转载地址:http://blog.chinaunix.net/uid-26413668-id-3407371.html
字段内容介绍如下:
版本(Version)占4位
声明这个ip数据包的版本,如目前惯用的IPv4信息就反映在这里。
首部长度(IHL:Internet Header Length)占4位
这个ip数据包的报头长度,以4字节为一个单位来记录IP报头的长度。
服务类型(Type of Service)占8位
这个字段内容为“PPPDTRUU”,表示这个IP数据包的服务类型,主要分为:
- PPP:表示此IP数据包的优先级,目前很少用。
- D:若为0表示一般延迟,若为1表示为低延迟。
- T:若为0表示一般传输量(throughput),若为1表示为高传输量。
- R:若为0表示为一般可靠度(reliability),若为1表示高可靠度。
- UU:保留尚未被使用。
总长度(Total Length)占16位
指这个IP数据包的总容量,包括报头与数据部分。总长度字段为16位,因此数据报的最大长度为216-1=65535字节。
标识(Identification)占16位
当数据报由于长度超过网络的MTU而必须分片时,这个标识字段的值就被复制到所有的数据报的标识字段中。相同的标识字段的值使分片后的各数据报片最后能正确地重装成为原来的数据报。
标志(flags) 占3位,但目前只有2位有意义。
这个地方的内容为“0DM”,其意义为:
- D:若为0表示可以分段,若为1表示不可分段
- M:若为0表示此IP为最后分段,若为1鸟事非最后分段。
片偏移(Fragment Offset) 占13位
表示目前这个IP分段在原始的IP数据包中所占的位置。
片偏移以8个字节为偏移单位。这就是说,每个分片的长度一定是8字节(64位)的整数倍。
所以通过Total Length,Identification,Flags以及fragment Offset就能够将小IP分段在接收端组合起来了。
生存时间(Time To Live:TTL)占8位
表示这个IP数据包的生存时间,范围0~255.
当这个IP数据包通过一个路由器时,TTL就会减1,当TTL为0时,这个数据包将被直接丢弃。
协议(Protocol Number)占8位
协议字段指出此数据报携带的数据是使用何种协议,以便使目的主机的IP层知道应将数据部分上交给哪个处理过程。
首部检验和(Header Checksum) 占16位。
这个字段只检验数据报的首部,但不包括数据部分。这是因为数据报每经过一个路由器,路由器都要重新计算一下首部检验和(一些字段,如生存时间、标志、片偏移等都可能发生变化)。不检验数据部分可减少计算的工作量。
源地址(Source Address) 占32位。
源IP
目的地址(Destination Address) 占32位。
目标IP
可选字段(Options)
用来支持排错、测量以及安全等措施,内容很丰富。此字段的长度可变,从1个字节到40个字节不等,取决于所选择的项目。
增加首部的可变部分是为了增加IP数据报的功能,但这同时也使得IP数据报的首部长度成为可变的。这就增加了每一个路由器处理数据报的开销。实际上这些选项很少被使用。新的IP版本IPv6就将IP数据报的首部长度做成固定的。
目前,这些任选项定义如下:
(1)安全和处理限制(用于军事领域)
(2)记录路径(让每个路由器都记下它的IP地址)
(3)时间戳(让每个路由器都记下它的IP地址和时间)
(4)宽松的源站路由(为数据报指定一系列必须经过的IP地址)
(5)严格的源站路由(与宽松的源站路由类似,但是要求只能经过指定的这些地址,不能经过其他的地址)
这些选项很少被使用,并非所有主机和路由器都支持这些选项。
补充(Padding)
由于Options的某些选项项目只需要1个字节,它只包括1个字节的选项代码。但还有些选项需要多个字节,这些选项一个个拼接起来,中间不需要有分隔符,最后用全0的填充字段补齐成为4字节的整数倍。