IPv4首部
《图解TCP/IP》 4.7 IPv4的首部
版本:由4比特构成,表示标识IP首部的版本号。IPv4的版本号即为4,因此在这个字段上的值也为“4”。
首部长度:由4比特构成,表明IP首部的大小,单位为4字节(32比特)。对于没有可选项的IP包,首部长度则设置为“5”。也就是说,当没有可选项时,IP首部的长度为20字节(4*5=20)。
区别服务:由8比特构成,用来表明服务质量。每一个的具体含义如表所示。
这个值通用由应用指定。而且现在也鼓励这种结合应用的特性设定TOS(Type of Service)的方法。然而在目前,几乎所有的网络都无视这些字段。这不仅是因为在符合质量的要求下按其要求发送本身的功能实现起来十分困难,还因为若不符合质量要求就可能会产生不公平现象。因此,实现TOS控制变得极其复杂。这也导致TOS整个互联网几乎就没有被投入使用。不过已有人提出将TOS字段再划分为DSCP和ECN两个字段的建议。
DSCP(Differential Services Codepoint,差分服务代码点)是TOS(Type Of Services)的一部分。现在统称为DiffSer,用来进行质量控制。
如果3-5位的值为0,0~2位则被称作类别选择代码点。这样就可以向TOS的优先度那样提供8中类型的质量控级别。对于每一种级别所采取的措施则由提供DiffServ的运营管理者制定。为了与TOS保持一致,值越大优先度也越高。如果第五位为1,表示实验或本地使用的意思。
ECN(Ecplicit Congestion Notification,显示拥塞通告)用来报告网络拥塞情况,由两个比特构成。
第6位的ECT 用以通告上传TCP层协议是否处理ECN。当路由器在转发ECN为1的包的过程中,如果出现网络拥塞的情况,就将CE位设置为1。
总长度: 表示IP首部与数据部分合起来的字节数。该字段长16比特。因此IP包的最大长度为65535=2^16字节。目前还不存在能够传输最大长度为65535字节的IP包的数据链路。不过,由于有IP分片处理,从IP的上一层的角度看,不论底层采用何种数据链路,都可以认为能够以IP的最大包长传输数据。
标识:由16比特构成,用于分片重组。同一个分片的标识值相同,不同分片的标识值不同。通常,每发送一个IP包,它的值也逐渐递增。此外,即使IP相同,如果目标地址、源地址或协议不同的话,也会被认为是不同的分片。
标志:由3比特构成,标识包被分片的相关信息。每一个的具体含义如图:
片位移:由13比特构成,用来标识被分片的每一个分段相当于原始数据的位置。第一个分片对应的值为0.由于FO域占13位,因此最多可以表示8192(=2^13)个相对位置。单位为8字节,因此最大可表示原始数据8*8192=65536字节的位置。
生存时间(TTL:Time To Live):由8比特构成,它最初的意思是以秒为单位记录当前包在网络上应该生存的期限。然而,在实际中它是指可以中转多少个路由器的意思。每经过一个路由器,TTL会减1,直到变成0则丢弃该包。
协议:由8比特构成,表示IP首部的下一个首部隶属于哪个协议。目前使用的协议部分如图:
首部校验和:由16比特(2个字节)构成,也叫IP首部校验和。该字段只校验数据报的首部,不校验数据部分。它主要用来确保IP数据报不被破坏。校验和的计算过程,首先要将校验和的所有位置设置为0,然后以16比特为单位划分IP首部,并用1补数计算所有16位字的和。最后将所得到这个和的1补数赋给首部校验和字段。
源地址:由32比特构成,表示发送端IP地址。
目标地址:由32比特构成,表示接收端IP地址。
可选项:长度可变,通常只在进行实验或诊断时使用。该字段包含如下几点信息:安全级别,源路径,路径记录,时间戳
填充:也称作填充物。在有可选项的情况下,首部长度可能不是32比特的整数倍。为此,通过向字段填充0,调整为32比特的整数倍。
数据:存入数据。将IP上层协议的首部也作为数据进行处理。