IP_Header

来源:互联网 发布:js获取数组对象的属性 编辑:程序博客网 时间:2024/04/28 05:59

 

版本号(Version)长度4比特。标识目前采用的IP协议的版本号。一般的值为0100(IPv4),IPv6的值(0110)。

 

IP包头长度(Header Length):长度4比特。这个字段的作用是为了描述IP包头的长度,因为在IP包头中有变长的可选部分。该部分占4个bit位,单位为32bit(4个字节),即本区域值= IP头部长度(单位为bit)/(8*4),因此,一个IP包头的长度最长为“1111”,即15*4=60个字节。IP包头最小长度为20字节。对于标准ipv4报头,这个字段的值肯定是20/4=5(10进制)=0101(2进制)。

 

服务类型(Type of Service):长度8比特。这个子段可以拆分成两个部分:Precedence和TOS。TOS目前不太使用。而Precedence则用于QOS("Quality of Service",中文名为"服务质量")应用。(TOS字段的详细描述RFC 1340 1349)。

 

IP包总长(Total Length):长度16比特。以字节为单位计算的IP包的长度 (包括头部和数据),所以IP包最大长度65535字节。

标识符(Identifier):长度16比特。该字段和Flag和Fragment Offest字段联合使用,对大的上层数据包进行分段(fragment)操作。

 

标记(Flag):长度3比特。该字段第一位不使用。第二位是DF位,DF位设为1时表明路由器不能对该上层数据包分段。如果一个上层数据包无法在不分段的情况下进行转发,则路由器会丢弃该上层数据包并返回一个错误信息。第三位是MF位,当路由器对一个上层数据包分段,则路由器会在最后一个分段的IP包的包头中将MF位设为0,其余IP包的包头中将MF设为1。

 

Bit 0: reserved, must be zero
Bit 1: (DF) 0 = May Fragment, 1 = Don't Fragment.
Bit 2: (MF) 0 = Last Fragment, 1 = More Fragments.

 

分段序号(Fragment Offset):长度13比特。该字段对包含分段的上层数据包的IP包赋予序号。由于IP包在网络上传送的时候不一定能按顺序到达,这个字段保证了目标路由器在接受到IP包之后能够还原分段的上层数据包。到某个包含分段的上层数据包的IP包在传送是丢失,则整个一系列包含分段的上层数据包的IP包都会被要求重传。

 

生存时间(Time to Live):长度8比特。当IP包进行传送时,先会对该字段赋予某个特定的值。当IP包经过每一个沿途的路由器的时候,每个沿途的路由器会将IP包的TTL值减少1。如果TTL减少为0,则该IP包会被丢弃。这个字段可以防止由于故障而导致IP包在网络中不停被转发。

 

协议(Protocol):长度8比特。标识了上层所使用的协议。

 

头部校验(Header Checksum):长度16比特,由于IP包头是变长的,所以提供一个头部校验来保证IP包头中信息的正确性。

 

源IP地址(Source IP Addresses):长度16比特。标识了这个IP包的源IP地址。

 

目的IP地址(Destination IP Address):长度16比特。标识了这个IP包的目的IP地址。

 

可选项(Options):这是一个可变长的字段,长度为0或32bit的整倍数,最大320bit,如果不足则填充到满。该字段由起源设备根据需要改写。可选项目包含以下内容:

 

    松散源路由(Loose source routing):给出一连串路由器接口的IP地址。IP包必须沿着这些IP地址传送,但是允许在相继的两个IP地址之间跳过多个路由器。

    严格源路由(Strict source routing):给出一连串路由器接口的IP地址。IP包必须沿着这些IP地址传送,如果下一跳不在IP地址表中则表示发生错误。

    路由记录(Record route):当IP包离开每个路由器的时候记录路由器的出站接口的IP地址。

    时间戳(Timestamps):当IP包离开每个路由器的时候记录时间。

 

填充(Padding):因为IP包头长度(Header Length)部分的单位为32bit,所以IP包头的长度必须为32bit的整数倍。因此,在可选项后面,IP协议会填充若干个0,以达到32bit的整数倍。