例7 如果一个路由器收到一个IP分组的前8位是01000010,路由器丢弃了该分组,为什么?
分析:设计这个例题的目的是加深读者对IPv4报头结构和各个字段的理解。
(1)IPv4报头的结构如图所示。
(2)本题讨论的是前8位,即版本与报头长度。版本与报头长度字段均为4位。版本字段值为4,表示是IPv4协议;报头长度字段值是定义了以4字节为单位的报头长度。
答案:路由器接收到一个IP分组的前8位是01000010。
(1)第一个4位是0100,转换成十进制数为4,表示IPv4协议,没有错误。
(2)第二个4位是0010,转换为十进制数为2,表示报头长度为8(4×2)个字节,而IPv4的固定报头就是20个字节,因此该字段出现错误,应该丢弃。
例8 一个分组报头中报头长度(HLEN)字段值为(十六进制),而总长度字段值为
。请问:该分组携带了多少个字节的数据?
分析:设计该例题的目的是检查读者对IPv4报头两个长度字段意义的理解。注意两个长度字段值定义的不同。
解:
(1)HLEN=,表示报头长度为4×5=20字节,等于IPv4固定报头的长度,表示没有报头选项。
(2)总长度字段值为,用十进制数表示为40。总长度字段值表示以字节为单位的分组长度,这点与报头长度(HLEN)字段值的意义不同。因此,该分组的数据长度等于40-20=20(字节)。
答案:该分组携带了20字节的数据。
例9 如果到达的分组的M位是1,分片的偏移值为0。这是第一个分片,还是最后一个分片,或者是中间的分片?
分析:设计该例题的目的是加深读者对于分组头中的标志(flag)字段与片偏移字段意义的理解。
解:到达的分组的M=1,表示该分组已经被分片。分片的偏移值为0,表示这个分片是第一个分片。
答案:第一个分片
例10 假设一个IP分组头部长度为20B,数据字段长度为2000B。分组从源主机到目的主机要经过2个网络。这两个网络允许通过的最大传输单元分别是1500B和576B。请问:该IP分组通过两个网络时,需要如何进行分片?
分析:设计该例题的目的是加深读者对IP分组在传输过程中分片的概念与方法的理解。
解:已知:IP分组头部长度为20B,数据字段长度为2000B。由于分组总长度都超过了两个网络的最大传输单元值,因此必须要分片。在分片过程中需要在每个分片的头部保留分组头部20B。
(1)经过第一个MTU = 1500B的网络,需要分为两个片。
P1 = 1480B + 20B =1500B
P2 = (2000B - 1480B) + 20B = 540B
(2)经过第二个MTU = 576B的网络,P1需要继续分片。
P1 - 1 = 556B + 20B = 576B
P1 - 2 = 556B + 20B = 576B
P1 - 3 = (1480 - 556 - 556)B + 20B = 388B
P2 = 540B < 576B,不需要分片。
答案:
(1)经过第一个网络时分为2个片,长度分别为:1500B、540B等
(2)经过第二个网络时分为4个片,长度分别为:576B、576B、与368B、540B
例11 用二进制方法计算如图所示的IP分组头部校验和。
分析:设计本例题的目的是加深读者对于校验和的作用与计算方法的理解。
(1)大多数TCP/IP都是采用校验和的方法来进行差错检验。IP分组头的头校验和的设置是为了保证分组头部的数据完整性。
(2)IP分组在分组头设置了头校验和,而没有对整个分组设置校验,其原因主要有两点:一是IP分组头之外的部分属于高层数据进行校验。二是IP分组头每经过一个路由器都要改变一次,但数据部分并不改变。在分组头中设置头校验和,只对变化部分进行校验是合理的。如果对整个分组进行校验,那么每次都需要对整个分组进行计算,势必要花费路由器大量的时间,使系统性能大大降低。
(3)计算校验和时首先是将分组头中“校验和”字段值置0,然后将整个分组头按16位进行划分,将各段相加之和取反得校验和。发送分组时,将校验和插入分组头的“校验和”字段中。
解:校验和计算过程如图所示。
这个例子中没有涉及高位溢出的情况。
答案:校验和为10001011 10110001