《计算机网络—自顶向下方法》 第四章Wireshark实验:IP

实验描述:

在本实验中,我们将研究 IP 协议,重点关注 IP 数据报(IP datagram)。我们将通过分析在执行 traceroute 程序发送和接收的一系列 IP 数据报的过程来完成这个实验(traceroute 程序本身则是在 Wireshark ICMP 实验中进行了更详细的探讨),我们将研究 IP datagram 中的各个字段(fields),并详细研究 IP fragmentation 的方法。


实验过程:

捕获执行 traceroute 的数据包
为了生成本实验的一系列 IP 数据报,我们将使用 traceroute 程序向不同的目的地 X 发送不同大小的数据报。回想一下,traceroute 通过
首先发送一个或多个带有生存时间(TTL: Time-to-Live)字段设置为 1 的数据报;
然后发送一个或多个带有生存时间(TTL: Time-to-Live)字段设置为 2 的数据报到同一个目的地;
然后发送一个或多个带有生存时间(TTL: Time-to-Live)字段设置为 3 的数据报到同一个目的地,
以此类推,直到目的地真正收到此数据报为止。

回想一下,路由器必须将每个接收到的数据报中的 TTL 减 1。如果 TTL 达到 0,路由器会向来源主机发送 ICMP 消息。由于这种行为,
TTL 为 1 的数据报(由执行 traceroute 的主机发送)将导致距发送方一次跳跃的路由器,将 ICMP TTL 超出的消息发送回发送方主机;
以TTL 为 2 发送的数据报将导致距离为两次跳跃的路由器,将 ICMP 消息发送回发送方主机;
以 TTL 为 3 发送的数据报将导致距离为两次跳跃的路由器,将 ICMP 消息发送回发送方主机,等等。

以这种方式,执行 traceroute 的主机可通过查看包含ICMP TTL 超出消息的数据报中的来源 IP 地址来获知其自身与目的地 X 之间的路由器的身份。

我们想要运行 traceroute 并让它发送各种长度的数据报

Windows 操作系统:Windows 提供的 tracert 程序(曾被使用于我们的 ICMPWireshark 实验中)不允许更改 tracert 程序发送的 ICMP echo 请求(ping)消息的大小。因此,一个更好的 Windows traceroute 程序是 pingplotter,可在 http://www.pingplotter.com 上以免费版和共享软件版本获得
下载并安装pingplotter,并通过对您喜欢的站点执行些 traceroute 来测试它。通过选择菜单项 Edit-> Options-> Packet Options 然后填写 Packet Size 字段,可以在pingplotter 中显式设置 ICMP echo 请求消息的大小。默认数据包大小为 56 个字节。一旦 pingplotter 发送了一系列具有递增的 TTL 值的数据包,它会在等待 Trace Interval 时间后再次以 TTL 为 1 重新启动发送进程。同时,我们可以在 pingplotter 中明确设置 Trace Interval 的值和间隔数。(备注:PinPlotter 5 需要使用到 Standar 版或是 Professional 版才能够自定义 packet 参数,有 14 天的试用版可以使用)

具体的步骤:
  • 启动 Wireshark 并开始数据包捕获(Capture-> Start),然后在 Wireshark 数据包捕获选项屏幕上按 OK(我们不需要在此处选择任何选项)。
    在这里插入图片描述

如果您使用的是 Windows 平台,请启动 pingplotter 并在“要跟踪的地址窗口(Address to Trace Window)”中输入目标的名称。在“要跟踪的次数(“# of times to Trace)”字段中输入 3,这样您就不会收集太多数据。选择菜单项编辑 - >高级选项 - >数据包选项(Edit->Advanced Options->Packet Options),然后在数据包大小字段中输入值 56,然后按确定。然后按 Trace 按钮。你应该看到一个看起来像这样的 pingplotter 窗口:(备注:新版 PingPlotter5 中没有跟踪次数的设定,可以在 count 到达 3 的时候按下暂停键,停止收集数据包)

我先给个下载链接:http://xiazai.zol.com.cn/detail/28/277370.shtml#hotArticle

  • 输入要跟踪的地址:www.gotokeep.com
    在这里插入图片描述

  • 将包的大小设置为56Byte
    在这里插入图片描述

  • 点击new trace开始运行(当运行到Count=3时右击抓取的数据手动pause
    在这里插入图片描述
    在这里插入图片描述

  • 重复以上两步 两次,分别设置包的大小为2000Byte和3500Byte

2000Byte:
在这里插入图片描述
3500Byte:
在这里插入图片描述

上面的过程其实就是:开启WireShark,然后进行三次以不同的包的大小(56、2000、3500 Bytes),来跟踪同一个网站同时抓取其中的数据包来进行IP协议的分析

如果您无法在实际的网络连接上运行 Wireshark,则可以下载在作者的某台Windows 计算器上执行上述骤时捕获的数据包跟踪文件。当您探索下面的问题时,即使您已经捕获了自己的跟踪数据并使用它,如同您自己的跟踪数据一般,您也可能会发现下载此跟踪数据对你的实验很有帮助。

所以说我自己的数据没有抓取好,步骤有点搞乱了,所以我也用的官方提供的数据包。

在您的跟踪数据包中,您应该能够看到**计算器发送的一系列的 ICMP Echo 请求讯息(在 Windows 下)**或 UDP 区段(在 Unix 下)以及由中间路由器发送到计算器的 ICMP TTL 超出的讯息。在下面的问题中,我们假设您使用的是 Windows 机器;对于 Unix 机器的相应问题应该是清楚的。

这是我自己的在实验过程中(在windows下),抓取的包:
在这里插入图片描述

这是官方提供的包,下面的回答问题都是基于这个数据包
在这里插入图片描述> PingPlotter是通过ICMP协议发送不同TLL值的ping包,来计算和获取访问网站的所经过路由。

TTL是存活时间,每经过一次路由器,TLL-1,当其减为0的时候,路由会丢带这个包并且发出TLL超时给原始的发出者,防止死包耗尽网络资源。然后每次PingPlotter都会发送起始从TLL=1的数据包,然后逐渐增大TTL,用来获取所访问网站经过的路由。但是有些路由会因为安全不回应这些包,所以还会看到有些请求没有回复,而TLL会持续增加获取下一条路由的回复。


回答问题:

  1. 选择计算机发送的第一个 ICMP Echo Request 消息,然后在 packet details window 中展开数据包的 Internet 协议部分。您的计算机的 IP 地址是多少

答:IP地址:192.168.1.102

  1. 在 IP header 中,上层协议字段的值是多少?

答:上层协议就是ICMP(如果是Unix下做的实验就是UDP),值为1。
在这里插入图片描述

IP中封装的ICMP本身就是值为1的。
>

  1. IP header 有多少 bytes? IP datagram 的有效负载中有多少 bytes? 说明如何确定 payload bytes 的数。

答:Header Length:20 bytes IP数据报总长度 = IP头长度 + IP数据长度(就是有效负载)
IP datagram payload bytes:64bytes
方法1:
IP datagram payload bytes = Total Length - Header Length = 84 - 20 = 64
在这里插入图片描述在这里插入图片描述

方法2:
IP数据报的有效负载,这里装的就是ICMP数据报,所以看ICMP占多少字节即可。
在这里插入图片描述

  1. 此 IP 数据报是否已被分段(fragmented)?解释您如何确定数据报是否已被分段(fragmented)。

答:
这里的IP数据报没有被分段, 因为Fragment offset = 0,分段的偏移量为0,所以没有分段,而且More fragments也是为Not set,表示没有设置分段。
在这里插入图片描述


接下来,通过单击 Source 列标题,根据 IP 源地址对跟踪的数据包进行排序,一个小的向下箭头应出现在 Source 旁边,如果箭头指向上方请再次单击“Source column header”。选择计算器发送的第一个 ICMP Echo Request 消息,然后展开“details ofselected packet header”窗口中的 Internet 协议部分。在“listing of captured packets”窗口中,您应该在第一个 ICMP 下面看到所有后续 ICMP 消息(可能还有计算器上运行的其他协议发送的其他散布数据包),使用向下箭头浏览计算器发送的 ICMP 消息。
>

  1. 在您的计算器发送的这一系列 ICMP 消息中,IP 数据报中的哪些字段 一直在改变?

答:发送的ICMP Echo(ping)request:标识号Identification、校验和Header checksum、存活时间TTL 不会改变
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

  1. 哪些字段保持不变? 哪个字段必须保持不变? 哪些字段必须更改? 为什么?

答:在这里插入图片描述

  1. 描述您在 IP datagram 的 Identification field 中的值中所看到的下一步(数据包仍按来源地址排序)查找最近的(第一跳)路由器发送到您的计算器的一系列 ICMP TTL 超时的回复讯息。

答:每个IP数据报的标识号是不同的,用于区分每个IP数据报和处理IP分片。
在这里插入图片描述
在这里插入图片描述

  1. ID 字段和 TTL 字段的值是多少?

答:这道题问的是 第一个返回超时路由返回给我们的IP报信息,因为只有IP才有TTL生存时间。
ID字段:0xa60b
TTL字段:244

  1. 对于最近(第一跳)路由器发送到您的计算器的所有 ICMP TTL 超出的回复,哪些值是否保持不变?为什么?

答:【没看懂】

单击“时间”列,再次按时间对数据包列表进行排序。
在这里插入图片描述

  1. 在将 pingplotter 中的数据包大小更改为 2000 后,查找计算机发送的第一个ICMP Echo Request 消息。该消息是否已碎片化为多个 IP 数据报?(如果计算机具有以太网接口,则数据包大小为2000 会导致碎片。)

答:
可以很明显的看到原本的IP数据报已经被分段为三个部分,#363、#364、#365在这里插入图片描述

  1. 打印出碎片 IP 数据报的第一个片段。 IP 头中的哪些信息表明数据报已碎片化? IP 头中的哪些信息表明这是第一个片段还是后一个片段? 这个 IP 数据报有多长?

答:
如下图就是IP数据报的第一个片段,其中的Flags已经表明了数据报已被分段,可以根据Flags下面的偏移量来判断是第一个数据报片段,这个IP数据报的长度为1500字节(20字节的报头+1480字节的数据段)
在这里插入图片描述
在这里插入图片描述

  1. 打印出碎片 IP 数据报的第二个片段。 IP 标头中的哪些信息表明这不是第一个数据报片段? 是否还有更多的片段? 你是如何知道的?

答:同上面一个可以看IP报头中的Flags字段中的展开项中的偏移量来确定这是第二个数据段。根据#365片段中可以看出363~365这三个片段属于一个一个数据报的分段。
在这里插入图片描述
在这里插入图片描述

  1. 在第一个和第二个片段中,IP 标头中哪些字段发生了变化?

答:Flags字段和Checksum校验和字段发生了变化。
在这里插入图片描述
在这里插入图片描述

14.从原始数据报创建了多少个片段?

答:三个片段
在这里插入图片描述

  1. 片段中 IP 标头中的哪些字段发生了变化?

答:总长度Total Length、标志Flags、首部校验和Header checksum


参考资料:

https://github.com/moranzcw/Computer-Networking-A-Top-Down-Approach-NOTES

发布了197 篇原创文章 · 获赞 18 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_41708792/article/details/103362416
今日推荐