本文假设读者有一定的网络知识基础;不是入门级别的网络知识预备!!切记切记!!
在开始学习网络编程之前,有必要将网络的有关知识再次回顾一下。
首先从哪个听起来很熟悉,但是却又不太懂里面的具体首先机制的IP数据报头部说起。
Internet协议(Internet Portocol)IP 是TCP/IP协议族中最为核心的协议。所有的TCP、UDP、ICMP、TGMP数据都是以IP数据报个数传送的。IP主要负责再源主机和目的主机之间传输来自高层软件的数据报文,在源和目的地之间提供非连接的传递服务。
简单的说,IP主要有一下四个功能:
1) 数据传送
2) 寻址
3) 路由选择
4) 数据报文分段
IP的主要目的是位数据输入、输出网络提供基本办法,为高层协议提供无连接的传动服务。这也就是说:1、IP数据提交给目的点之前不会建立两点之间的对话;2、仅仅只是分装和传递数据,至于数据的正确性则不予考虑。IP接收并格式化数据,以便于传输到数据链路层,此外IP还检索来自数据链路的数据,并将它送给请求的高层,IP传送的信息单位被称为”数据报文“,一些数据报文被组装起来就称为包。IP协议不注意包内的数据,就是他只负责分装和传递数据,至于包内数据的正确性则又高层处理。
在TCP/IP参考模型当中,Internet Layer下面就是Network Interface Layer了。也就是说IP数据从Internet Layer 交付到Network Interface Layer 之后会在IP的头部和尾部加上相应的数据;然后才会在网络上传送。OSI参考模型和TCP/IP参考模型如下所示:
Ethernet帧如下所示;会包含一些目的地址、源地址、数据类型、IP数据以及CRC效验位。
详细的说说IP数据报的格式,大体的如下图所示:
通过对于改图的详细解释,读者应该会有所了解
① 4比特的字段的版本:IP协议的版本号。如IPV4 IPV6
② 4比特的地段的头部长度:即包头长度,4位、能表示的最大十进制数位15、可不 是说IP首部的最大程度为15字节?15位?这都是现实的。注意:这里的1表示4个 字节;也就是说当该位段为1的时候就是说IP数据报的首部长度为4字节(这是不可能 的),为6的时候就是说该IP数据报的首部长度为6*4=24字节。那么这样算下来,IP 数据报的最大头长为15*4=60字节。同时,最短的IP头是20字节,也就是说该字段的 值为5,也就是0101
③ 8比特字段服务类型:如图所示:
优先权(3) D T R 未使用
优先权字段3位,000--111 也就是0-7(0为正常,7为网络控制),他允许传输站点的应 用程序想IP层发送数据报文的优先权,该地段与D(延时)、T(吞吐量)和R(可靠性)相结 合(TOS字段),这些向路由器表明应该采取那个路由。
D位--------------设置为1时,请求低延时
T位---------------设置为1时,请求搞吞吐量;
R位---------------设置为1是,高可靠性。
至于怎么样通过该字段来确定采取的路由策略则不在本文的讨论范围之内,笔者也没有 做深入的研究;故在此不讨论改问题。
④ 16比特字段的总长度:总长度指整个IP数据包的长度,一字节为单位。16位也就 是最大可达216-1 (65535)字节。总长度字段是IP首部中必要的内容,因为一些数据链 路需要填充一些数据,或者需要拆分一些数据,已达到Ethernet帧的最小长度46字节。 尽管IP数据支持最大可达65535字节的数据,但是主机一般要求不能接受超过567字 节的数据报。
⑤ 16位比特字段的标识,3位地段的标识,13位的比特字段分段偏移:TCP/IP可以 运行再任何数据链路上,当向不同的网络发送数据时,发送数据的大小可以根据网络的 不同发生变化。标识字段唯一的标识主机发送的每一份数据报,通常每送一份报文他的 值就加1.使用识别将识别出那些数据报文属于一个小组。标志将标识出是否将一份数据 报文分段以及是否出现了较多的分段;他站3位,分别为0、DF、MF DF为0表示该 包可拆分成多个碎片,1为不能,MF为0表示最后的碎片,为1表示还有碎片。总长 度和分段偏移字段使IP能重新构造数据报文并将它传递到高层软件,总长度指出了原 始包的总长度,偏移字段正在组装报德节点之处改报文偏移的开始端,此时数据处于分 段,义重新构造包。
⑥ 8比特字段的生存时间(TTL): 这里不再详细的解释TTL的含义。
⑦ 8比特字段的协议字段:传输是通过TCP实现还是UCP实现。
⑧ 16比特字段的效验和:即就是CRC。用来检测IP数据正确与否,
⑨ IP选项字段:确定数据是正常数据还是用做网络控制数据。等等
⑩ 下面的源IP地址、目的IP地址不在赘述。