5.2.4 IP数据报(二)分析Wireshark捕获的数据帧
为了更好的理解IP数据报的格式,我们通过一个实例学习IP数据报的格式
例:使用数据报捕获工具Wireshark采集我自己主机传输的一条报文,其中有个数据帧的内容如图所示(均用16进制表示),这里我们分析这个帧中分装的IP数据报中的一些关键字段。
这里我们需要补充一点知识
-
如图左边的部分
表示的是数据帧至字节的编号,比如第一行0000表示右边第一个字节的编号是第零个字节,第二行0010表示该行右边第一个字节的编号是数据帧的第0010H也就是第16个字节,第三行0020表示该行右侧第一个字节的编号是数据帧的第0020H也就是第32字节,以此类推。
-
如图右侧部分
表示的是数据帧的内容,每一行是16个字节,均用十六进制表示 -
如图
让我们回忆一下第四章学习以太网的时候介绍的帧结构,如图在帧的首部有6个字节的目的MAC地址,6个字节的源MAC地址,2个字节的协议类型字段如果该字段是0800H就表示该帧的数据部分封装的是来自于上层的IP数据报,接下来就是数据字段了,封装的如果是IP数据报的情况下那么该帧的数据字段的第一个字节就是IP数据报首部的第一个字节了。
在明白了封装关系后我们才能回答以下问题。我们先来分析一下这个数据帧
如图,前六个字节是目的MAC地址
表示接收该帧的主机的MAC地址。
如图,接着的六个字节是源MAC地址
表示该帧是谁发的。
如图,接下来的两个字节是协议类型字段
我们可以看出该字段值为0800H,也就是该数据帧的类型是IP数据报。
有了以上的知识我们就可以分析帧中后面紧跟的IP数据报了,并回答一下问题。根据上一节我们学习的IP数据报的格式,第一个字节有8个比特位其中前面四个比特位时版本号
这里的版本号是4,也就代表了IPv4。
-
数据报首部长度为多少字节?
我们知道在IP数据报中紧跟着版本号4后面的四个比特位就是我们IP数据报首部长度,如图
这里的数值是5,因为该字段的单位是4字节,也就是标识语数据报首部长度为 5 × 4 = 20 5\times4=20 5×4=20个字节。这里我们要注意首部长度的单位是4个字节。也就是说从4开始的20个字节就是这个IP数据报的首部。在首部长度后面的一个字节8个比特位代表了服务类型。 -
数据报的总长度是多少字节?
根据IP数据报组成我们可以知道在服务类型后的16个比特位2个字节代表了数据报的总长度如图
转换成十进制之后 7 × 1 6 0 + 6 × 1 6 1 + 1 × 1 6 2 = 7 + 96 + 256 = 359 7\times16^0+6\times16^1+1\times16^2=7+96+256=359 7×160+6×161+1×162=7+96+256=359个字节。 -
数据报的协议字段是多少,表示什么协议?
我们知道在数据报总长度后面紧跟的4个字节32个比特位分别表示了标识、标志、片偏移如图
紧随其后的1个字节8个比特位就是生存时间TTL,后面的8个比特位1个字节便是数据报协议字段,也就是IP数据报首部的第十个字节如图
这里的值是06H,表示该IP数据报的数据部分封装的是来自于上层TCP协议的报文。 -
源主机和目的主机的IP地址分别是什么?
我们知道IP数据报的首部每一行都是32个比特位,4个字节,而源主机位于第四行的四个字节,也就是说是从IP数据报首部的第13个字节开始后的四个字节如图
,表示的是 2 × 16 + 15.6 × 16.15 × 16 + 13.6 × 16 + 9 2\times16+15.6\times16.15\times16+13.6\times16+9 2×16+15.6×16.15×16+13.6×16+9即47.96.253.105,目的地址则是从IP数据报首部的第17个字节开始后的四个字节如图
表示的是 12 × 16.10 × 16 + 8.16 + 15.4 × 16 + 14 12\times16.10\times16+8.16+15.4\times16+14 12×16.10×16+8.16+15.4×16+14即192.168.31.78 -
当前主机的TTL值是多少?
我们知道TTL字段位于第三行的第二个字节,也就是IP数据报首部中的第九个字节,如图
表示 3 × 16 + 3 = 51 3\times16+3=51 3×16+3=51。这里我们知道每经过一个路由器的转发这里的TTL值就会减一,如果我们知道这个IP数据报发送时的初始值我们就知道从源目的主机到我的机器之间一共经历了多少个路由器。
这里我们还应该知道,目的IP地址后面的字段是什么,我们知道该IP数据报的首部长度为20个字节,只有固定部分没有扩展部分,这说明在目的IP地址之后就是我们的IP数据报的数据部分即我们的TCP报文段,关于TCP报文段我们在后面的传输层具体的学习。
以上就是我们通过捕获到的数据帧以及IP数据报进行分析,我们一定要掌握分析的方法,特别是16进制和10进制或者二进制之间的转换不能出错,后面我们就要学习有关IP数据报的分片与重组。