首先我们先来说一下这个IP数据报的格式。
一个IP数据报由首部和数据部分两部分组成,首部的前一部分是固定长度,共20字节,是所有的IP数据报都必须具有的。在首部的固定部分的后面是一些可选字段,其长度是可变的。但对于首部的长度来说,最长是60个字节,所以可选字段最长为40个字节。
版本号:占4位,指IP协议的版本。
首部长度:占4位可表示最大十进制数值是15。一个位对应的是4个字节。因为IP首部的固定长度是20字节,因此首部长度字段的最小值是5。当这四个位都为1的时候就表示此时达到了首部的最大长度。需要注意的是当IP分组的首部长度不是4字节的整数倍时,必须利用最后的填充字段加以填充。通过首部长度可以知道数据部分是什么时候开始的。
区分服务:8bit(一个字节)其中拿了3个字节作为优先级,其余5bit表示特殊的要求。
总长度:16bit(两个字节)。最大可以表示的数值是2^16-1个字节。指首部长度和数据部分的总长度。由于在IP层下面的每一种数据链路层都规定了一个数据帧中的数据字段的最大长度MTU,当所发送的IP数据报超过这个MTU的时候就必须进行分片处理。
标识:16bit (两个字节)通过标识来给已经分片的IP数据报进行分组,保证最后分片之后的各数据报片能正确地重装成为原来的数据报。
标志:占3位。目前只有两位有意义,第一位一般是0,中间的一位DF表示能不能分片,只有当中间的一位的值为0的时候才允许分片。后面的一位MF表示后面还有无分片,当后面的一位值为0的时候表示后面已无分片。
片偏移:占13位,一个位表示8个字节的偏移量。除了最后一个数据报片外,每个分片的长度一定是8字节的整数倍。
如果在之后的过程中又进行了分片,那么新的分片的片偏移的计算是在第一片的基础上加上第一个切片数据部分的长度除上8。
这里需要注意的是片偏移是数据部分(没有加上首部的长度)如果题目中给的是位,由于8个字节对应的是64位我们要除上64来算。
生存时间:占8个位(一个字节)TTL,表明数据报在网络中的寿命。由发出数据报的源点设置这个字段。目的是防止无法交付的数据报无限制地兜圈子,消耗网络资源。这里我们直接解释新的TTL的意义:TTL表示在网络中要经历的跳数,路由器再每次进行转发的时候就会把TTL对应的值-1.由于只有八个位,所以能够在网络中经过的路由器的最大数值是255.
协议:占8个位(一个字节),协议字段指出此数据报携带的数据使用何种协议以便上层处理。
首部校验和:占16位(两个字节),这个字段只检验数据报的首部,不包括数据部分,利用二进制反码求和来进行校验。以此来决定是否丢弃数据报。
源地址:32位(四个字节)。
目的地址:32位(四个字节)。
注意:对于MAC地址说源地址和目的地址都是6个字节,可能直接给出数据报的报文让分析这个报文。
这里举两个例子吧。
1.一个数据报长度为4000字节(固定首部长度)。现在经过一个网络传送,此网络能够传送的最大数据长度为1500字节。试问应当划分为几个短些的数据报片?各数据报片的数据字段长度、片偏移字段和MF标志应当为何数值?
由于能传送的最大数据长度为1500字节,去掉首部固定的长度20字节之后还有1480字节,而1480字节刚好是8的整数倍,所以这里可以采取分片为三个较短的数据片,每片分别为1480,1480,1020
注意这里因为题目说了一个数据报长度为4000字节(固定首部长度)。所以实际上的数据部分为3980字节。
所以这里的片偏移量分别为
0/8=0
1480/8=185
2960/8=370
MF标志字段表示后面还有无分片所以这里的取值应该是 1 1 0
2.使用 Wireshark Wireshark集某主机访问南邮的网站服务器时所传输的报文 ,其中有个数据帧的内容如下图所示(均用 16 进制 表示),请 分析该帧中封装的数据报中的一些关键字段:
①数据报首部长度为多少字节? ②数据报的总长度是多少字节? ③ 数据报的协议字段是多少,表示什么? ④源主机 和目的 主机 IP 地址分别是什么? ⑤已知初始 TTL=64,从当前主机到南邮的网站 服务器, 大概 经过 了几台路由器的转发?
这个题看上去比较难,实际上还是比较简单的,只需要对MAC帧的格式和IP数据报的格式理解清楚即可。从题目中可以看出这是一个数据帧,那么应该属于数据链路层,所以这里前六个字节是目的地址。之后六个字节是源地址,之后两个字节为类型。接下来就是IP数据报了。
首先你要理解这个以十六进制表示是什么意思
第一问:数据报的首部长度为多少字节
由于首部长度是属于14个字节之后,所以这里表示数据报的长度为45中的5。45里面这个4表示的是版本号。4就是0100.表示IPV4。之后我们来看这个5,5是0101,也就是首部长度,首部长度有4个位,一个位表示4个字节。所以说这里的可选部分为0个字节。首部的长度为5*4=20字节。
第二问:数据报的总长度是多少字节?
在45之后为区分服务00 总长度为两个字节 00 34。我们可以看到这里的00 34 表示 0000 0011 0100。所以对应的值就为32 16 4=52个字节
第三问:数据报的协议字段是多少?
在总长度之后为标识字段,两个字节 00 00。之后为标志字段和片偏移 40 00。再下来就是生存时间 3b = 0011 1011 =32 16 11=59
第四问:源主机和目的主机的IP地址分别是什么?
之后是协议06 = 0000 0110 表示TCP协议,之后为首部校验和两个字节 0b 76。
再往后就为源地址4个字节ca-77-e0-c9。
之后就是目的地址4个字节c0-a8-c8-64。
第五问:经过几台路由器转发?
由于每经过一次路由器的转发其TTL的值都会减少1.即对应的生存时间的值减少1。又知道初始值为64,所以这里为64-59=5台。
,