IP协议头格式的详细分析(1)(2)
◆生存时间(Time To Live,TTL)
生存时间字段设置了数据报可以经过的最多路由器数,表示数据包在网络上生存多久。TTL的初始值由源主机设置(通常为32或64),一旦经过一个处理它的路由器,它的值就减去1。当该字段的值为0时,数据报就被丢弃,并发送ICMP消息通知源主机。这样当封包在传递过程中由於某些原因而未能抵达目的地的时候就可以避免其一直充斥在网路上面。占8位。
◆协议(Protocol,PROT)
指该封包所使用的网络协议类型,如ICMP、DNS等。占8位。各协议对应的值如表1所示。
表1 协议号
协议号 |
协议 |
协议号 |
协议 |
00 |
IP |
22 |
XNS-IDP |
01 |
ICMP |
27 |
RDP |
02 |
IGMP |
29 |
ISO-TP4 |
03 |
GGP |
36 |
XTP |
04 |
IP-ENCAP |
37 |
DDP |
05 |
ST |
39 |
IDPR-CMTP |
06 |
TCP |
73 |
RSPF |
08 |
EGP |
81 |
VMTP |
12 |
PUP |
89 |
OSPFIGP |
17 |
UDP |
94 |
IPIP |
20 |
HMP |
98 |
ENCAP |
◆头校验和(Header checksum)
指IPv4数据报包头的校验和。这个数值用来检错用的,用以确保封包被正确无误的接收到。当封包开始进行传送后,接收端主机会利用这个检验值会来检验余下的封包,如果一切无误就会发出确认信息表示接收正常。与UDP和TCP协议包头中的校验和作用是一样的。占16位。
首部检验和字段是根据IP首部计算的检验和码,不对首部后面的数据进行计算。ICMP、IGMP、UDP和TCP协议在它们各自的首部中均含有同时覆盖首部和数据检验和码。
IP协议头格式规定了:计算一份数据报的IP检验和,首先把检验和字段置为0。然后,对首部中每个16位进行二进制反码求和(整个首部看成是由一串16位的字组成),结果存在检验和字段中。当接收端收到一份IP数据报后,同样对首部中每个16 位进行二进制反码的求和。由于接收方在计算过程中包含了发送方存在首部中的检验和,因此,如果首部在传输过程中没有发生任何差错,那么接收方计算的结果应该为全1。如果结果不是全1(即检验和错误),那么IP就丢弃收到的数据报。但是不生成差错消息,由上层去发现丢失的数据报并进行重传。
ICMP、IGMP、UDP和TCP都采用相同的检验和算法,尽管TCP和UDP除了本身的首部和数据外,在IP首部中还包含不同的字段。由于路由器经常只修改TTL字段(减1),因此当路由器转发一份消息时可以增加它的检验和,而不需要对IP整个首部进行重新计算。
◆源地址(Source Address,SA)
发送IP数据包的IP地址。占32位。
◆目的地址(Destination Address)
接收IP数据包的IP地址。也占32位。
◆选项(Options)+填充(Padding)
这两个选项较少使用,只有某些特殊的封包需要特定的控制才会利用到。共32位。这些选项通常包括:
◆安全和处理限制:用于军事领域
◆记录路径:让每个路由器都记下它的IP地址
◆时间戳:让每个路由器都记下它的IP地址和时间
◆宽松的源站选路:为数据报指定一系列必须经过的IP地址
◆严格的源站选路:与宽松的源站选路类似,但是要求只能经过指定的这些地址,不能经过其他的地址。
以上这些选项很少被使用,而且并非所有的主机和路由器都支持这些选项。选项字段一直都是以32位作为界限,在必要的时候插入值为0的填充字节。这样就保证IP首部始终是32位的整数倍(这是首部长度字段所要求的)。
从以上IP协议头格式可以看出,IP协议包头大小也有两种:当没有“选项"这个字段时,为160位,20个字节;当有“选项"字段时为192位,24个字节。它与TCP协议包头大小是一样的。
评论暂时关闭