IP头部结构
IP头部结构
RFC 751定义了因特网协议,IP是一个无连接的协议,这意味着它将每个IP分组都看成是与其他IP分组无关的独立数据单元。IP不具备通常为了确保数据的认证机制,如果再分组转发过程中发生错误,IP不会启动任何动作来更正这个错误。分组头部的字段和为之服务的协议功能的复杂度之间存在着直接的联系,头部越简单,相应的协议越简单。
IP头部由头部和数据段组成
头部包含有下列字段:版本(version),该字段占用4位以申明IP版本。目前广泛使用的是IPv4,然而新版本的IPv6正在逐渐的被更多的使用。
头部长度(header length)
IP分组的头部长度占用4位,他使用32位字度量头部长度,通常,头部由20个字节长(5个32位字),然而,如果增加了控制信息,那么通过附加IP可选字段,长度会进一步增加。头部的最大长度为60字节。
服务类型(Tos)(Type Of Service)
或者称呼它的新名字---区别服务字节(differrntiated service byte)(DS 字节)。该字段占用1个字节,与之对应的两个变量:Tos(以前名称)和DS字节(新名称),不管哪种情况,这个字段用来存储反映分组Qos需求的参数。
在Tos中,这个字段被分为两个子字段,其实的3位组成优先权子字段,优先权可取值0(普通分组)到7(控制信息分组)。路由器和计算机会考虑分组的优先权从而优先处理最高优先级的分组。Tos字段还包括3位用来判断路由选择策略(route selection criterion),有三个选项:低延迟、高可靠性或高吞吐量。如果delay(D)位设为1,那么在传送这个分组时路由应该选择将延时最小化。吞吐量(T)位会最大化吞吐量,可靠性(R)位会最大化可靠性。剩余2位是保留为,通常设为0. DS字节只使用该字节的高6位,保留低2位。
总长度(total length)
这个字段占用2个字节,申明分组的总长度,包括头部和数据段。分组最大长度受限于该字段的长度,即65535个字节。然而,多数网络并不适用如此长的分组。以太网帧最大分组长度为1500字节,TCP/IP标准确保所有主机有能力接受576个字节长的分组(无论他们是否分片)。
标识符(identification)
这个字段占用2个字节,用来识别源分组分片所创建的分组,同一个分组的各个分片必须具有形同的标识符值。
标志(flags)
标志占用3位,包含与分片相关的属性。将部分片(do not fragment,DF)位设为1提示路由器不要将此分组分片。但若多片(more fragment,MF)位被设置为1,就意味着此分组被分片且不是最后一片。剩余位属于保留位。
分片偏移量(fragment offset)
该字段占用13位,申明该分组中数据区域相对于分片源分子的数据起点的偏移量,它用于组装或重新组装分组时用,偏移量必须为8的倍数。
剩余生存时间(time to live)TTL
该字段占用1字节,用于指明分组在网络上传输的最大时间间隔,TTL以秒为单位,由发送端指定。分组的当前TTL随着它花费在网络传输中途径的每个路由器上的每一秒递减一。即使路由器处理分组的时间不足一秒,还是必须将TTL计数器减一。因为如今的路由器处理分组极少花费多于1秒的时间。TTL可以被解释分组路过的转换节点数。如果TTL值在到达目的地之前将为0,则丢弃该分组。因此TTL参数是分组的一种“自我破坏”的计时器。
协议(protocol)
该字段占用1字节,包括了数据字段中的信息所要传递的高一层协议的标识符。不同协议的标识符在“分配号码”RFC 1340中列出。序列号16代表TPC分组消息,17代表UDP,1代表ICMP。
头部校验和(header checksum)
这个字段占用2个字节,只计算头部的校验和。因为有些头部字段在网络传输过程中会改变(如 TTL),必须检查校验和并在每个路由器和终端节点上重新计算。校验和---16位---计算头部中所有16位字和的补码。在计算校验和时,头部校验和字段被设为零。如果校验和不正确,将会报告错误,那么该分组在错误被发现的同时被丢弃。
源IP地址(Source IP Address)和目的IP地址(Destination IP Address)
这两个字段长度相同--32位。
IP选项(IP Optitions)
这个字段是可选的。原则上是在网络纠错时才使用。该字段包含好多个子字段,每个具有八个预设类型。在这些字段中,可以指定途径路由器的准备路由,注册分组路过的路由器,存储安全系统数据或保存时间戳。
填充(padding)
既然IP选项字段的子字段数是任意的,但有必要在分组头部的最后增加几个字节以将分组对齐到32位边界。这个字段都用0来填充。