Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1749097
  • 博文数量: 143
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1462
  • 用 户 组: 普通用户
  • 注册时间: 2016-08-23 11:14
文章分类

全部博文(143)

文章存档

2022年(3)

2021年(13)

2020年(21)

2019年(8)

2018年(28)

2017年(7)

2016年(63)

我的朋友

分类: 网络与安全

2016-11-15 15:52:03

1 关键字
  网络通信协议 
  lwip 
  tftp 
  TCP/IP协议栈 == TCP/IP协议簇 == TCP/IP协议 == TCP/IP != TCP协议 != IP协议
2 TCP/IP协议和OSI协议之间的区别
  开放系统互联(OSI)模型是由国际标准化组织(ISO)于1984年提出的一种标准七层参考模型; 
  TCP/IP参考模型是首先由ARPANET所使用的网络体系结构。这个体系结构在它的两个主要协议出现以后被称为TCP/IP参考模型(TCP/IP Reference Model),是四层参考模型。TCP/IP是Transmission Control Protocol/Internet Protocol的简写,中译名为传输控制协议/因特网互联协议,又名网络通讯协议,它不仅仅只有TCP协议和IP协议,它是一个TCP/IP协议簇; 
  ISO制定的OSI参考模型的虽然抽象力高、通用性好,但由于当时技术不成熟,实现起来过于庞大、复杂,反而招致了许多批评。与此对照,由技术人员自己开发的TCP/IP协议栈获得了更为广泛的应用。TCP/IP与OSI最大的不同在于OSI是一个理论上的网络通信模型,而TCP/IP则是实际运行的网络通信模型。如下图片盗于网络:
    
3 TCP/IP协议栈的传输层协议
  传输层协议通过“IP地址+端口号”来区分同一主机上的不同服务,如http服务、FTP服务等。
3.1 常见问题
3.1.1 由Internet号分配机构分配的常见应用层协议的默认知名端口是否可以修改?
  答案是,既然是默认就可以修改,但是有一些不能修改。见如下:
  ①知名端口即众所周知的端口号,范围从0~1023,这些端口号一般固定分配给一些服务。比如21端口分配给FTP(文件传输协议)服务,25端口分配给SMTP(简单邮件传输协议)服务,80端口分配给HTTP服务,135端口分配给RPC(远程过程调用)服务等。 
  ②网络服务是可以使用其他端口号的,如果不是默认的端口号则应该在地址栏上指定端口号,方法是在地址后面加上冒号”:”(半角),再加上端口号。比如使用”8080”作为WWW服务的端口,则需要在地址栏里输入”“。
  ③但是有些系统协议使用固定的端口号,它是不能被改变的,比如139 端口专门用于NetBIOS与TCP/IP之间的通信,不能手动改变。 
  ④客户端在访问服务器时,源端口一般都是动态分配的1024以上的端口。
4 TCP/IP协议栈的应用层协议
4.1 通俗理解
  首先,应用层协议,就是通讯各方事先约定好一些规则要求,比如传输数据的格式,大小,各字符按的含义等。最简单的比如传二进制数据一般都采用以下序列: 
数据块总长度
数据
  其实,编程最简单的实现就是把约定好的结构体当成应用协议发送过去。
  然而,应用层协议不仅仅是数据,它可以通过其数据块字段做可靠性控制(如用帧序号等)、流量控制等。
  另外,不仅仅只有一种包类型,还有例如控制包、数据包等。
4.2 编程实现
  TCP及以下层是由操作系统内核实现,是处理通信细节。而应用层程序是通过socket编程实现的,处理的是应用程序细节。
  TCP/IP只是一个协议栈,就像操作系统的运行机制一样,必须要具体实现,同时还要提供对外的操作接口。就像操作系统会提供标准的编程接口,比如Win32编程接口一样,TCP/IP也必须对外提供编程接口,这就是Socket编程接口。socket的出现只是可以更方便的使用TCP/IP协议栈而已,其对TCP/IP进行了抽象,形成了几个最基本的函数接口。比如create,listen,accept,connect,read和write等等。
4.3 常见问题
4.3.1 什么是Socket编程/Socket通信?
  Socket是应用层与TCP/IP协议族通信的中间软件抽象层,其实就是一组接口,即Socket接口。
  Socket接口是”TCP/IP网络”(其实目前的网络都是TCP/IP网络了)的API,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,而接口实现由内核完成。
  Socket编程/Socket通信是指应用程序通过调用系统提供的Socket API实现网络中不通主机的进程间通信。
4.3.2 不同的应用层协议如何定义Socket?
  首先,解释下定义Socket时,Socket函数的三个参数:
  domain:AF_INET、AF_INET6、AF_LOCAL(或称AF_UNIX)。由于Dos\Window中仅支持AF_INET,所以通常选AF_INET。
  type:SOCK_STREAM、SOCK_DGRAM、SOCK_RAW、SOCK_PACKET、SOCK_SEQPACKET等。通常选基于tcp连接,或基于udp无连接,或基于原始网络协议存取。这也意味着,用socket可以创建任何协议的连接,因为其它协议都是基于此的
  protocol:IPPROTO_TCP、IPPTOTO_UDP、IPPROTO_SCTP、IPPROTO_TIPC等。通常赋值0。
  备注:上面的type和protocol并不是可以随意组合的,如SOCK_STREAM不可以跟IPPROTO_UDP组合。当protocol为0时,会自动选择type类型对应的默认协议。
4.3.3 tftp和udp的区别?
  其实最简单的tftp,就是在用socket定义udp连接的基础上,增加了打开关闭文件的操作。
5 TCP/IP协议栈的应用层协议和传输层协议之间的关系
待补充......。
6 推荐书籍
《深入浅出linux工具与编程》
《深入浅出linux tcp/ip协议栈》

阅读(3186) | 评论(0) | 转发(0) |
0

上一篇:c c++ 标准库

下一篇:shell cmd powershell

给主人留下些什么吧!~~