wireshark实验之 IP协议分析

实验中使用的主要仪器设备及软件:

        操作系统:Microsoft Windows 7及以上

        软件环境:Wireshark 3.6.2

实验目的:

(1)熟悉Wireshark包嗅探器的使用,通过进行Wireshark操作来研究著名的 IP 协议的行为,分析 IP 传输内容的发送和接收实现过程。

(2)通过分析在执行 traceroute程序发送和接收的一系列 IP 数据报(IP datagram)的完成过程来研究 IP 协议,进一步加深对网络协议的理解。

(3)熟悉IP datagram 中的各个字段(fields),并详细研究 IP fragmentation 的方法。

实验原理:

        IP协议是用于将多个包交换网络连接起来的,它在源地址和目的地址之间传送一种称之为数据包的东西 ,它还提供对数据大小的重新组装功能,以适应不同网络对包大小的要求。IP的责任就是把数据从源传送到目的地。它不负责保证传送可靠性,流控制,包顺序和其它对于主机到主机协议来说很普通的服务。IP实现两个基本功能:寻址和分段。

        IP可以根据数据包包头中包括的目的地址将数据报传送到目的地址,在此过程中IP负责选择传送的道路,这种选择道路称为路由功能。如果有些网络内只能传送小数据报,IP可以将数据报重新组装并在报头域内注明。IP模块中包括这些基本功能,这些模块存在于网络中的每台主机。

实验步骤(附实验过程和截图):

1. 捕获执行 traceroute的数据包

        为了生成本实验的一系列 IP 数据报,我们将使用 traceroute 程序向不同的目的地 X发送不同大小的数据报。回想一下, traceroute 通过首先发送一个或多个带有生存时间(TTL: Time-to-Live)字段设置为 1 的数据报;然后发送一个或多个带有生存时间(TTL: Time-to-Live)字段设置为 2 的数据报到同一个目的地;然后发送一个或多个带有生存时间(TTL: Time-to-Live)字段设置为 3 的数据报到同一个目的地,以此类推,直到目的地真正收到此数据报为止。回想一下,路由器必须将每个接收到的数据报中的 TTL 减 1(实际上, RFC791 文献中表示路由器必须将 TTL 减少至少一个)。如果 TTL 达到 0,路由器会向来源主机发送 ICMP 消息(类型 11 - 超出TTL)。由于这种行为, 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 然后填写 PacketSize 字段,可以在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 并在“要跟踪的地址窗口”中输入目标目标的名称。在“要跟踪的次数”字段中输入 3,这样您就不会收集太多数据。选择菜单项编辑 - >高级选项 - >数据包选项,然后在数据包大小字段中输入值 56,然后按确定。然后按 Trace 按钮。你应该看到一个看起来像这样的 pingplotter 窗口: (备注:新版 PingPlotter5 中没有跟踪次数的设定,可以在 count 到达 3 的时候按下暂停键,停止收集数据包)

        接下来,通过选择编辑 →高级选项 →数据包选项并在数据包大小字段中输入值 2000,然后按确定,发送一组长度较长的数据报。然后按“继续”按钮。

        最后,通过选择 Edit→ Advanced Options→ Packet Options 并在 Packet Size字段中输入值 3500,然后按 OK,发送一组长度较长的数据报。然后按“继续”按钮。

        停止 Wireshark 数据包捕获。

注:

        如果您使用的是 Unix 或 Mac 平台,请输入三个 raceroute 命令,一个长度为 56 个字节,一个长度为 2000 个字节,另一个长度为 3500 个字节。 停止 Wireshark 数据包捕获。

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

2. 查看捕捉到的痕迹

        在您的跟踪数据包中,您应该能够看到计算器发送的一系列的 ICMP Echo 请求讯息(在 Windows 计算器的情况下)或 UDP 区段(在 Unix 的情况下)以及由中间路由器发送到计算器的 ICMP TTL 超出的讯息。

实验结果及分析:

在下面的问题中,我们假设您使用的是 Windows 机器。

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

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

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

IP header 20 bytes,数据报一共有56 bytes,有效负载为36 bytes

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

目测没有,因为第一个包的TTL是1,如果被分段就会出现多个TTL为1的包,但是没发现

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

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

“always”从有改变?

标识符,存活时间,首部检验和一只在变

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

必须保持不变:

  1. 版本:占4 bit ,通信双方使用的版本必须一致,对于IPv4字段的值是4;
  2. 首部长度:占4 bit ,首部长度说明首部有多少32位字(4字节)由于IPv4首部可能包含数目不定的选项,这个字段也用来确定数据的偏移量;
  3. 区分服务:占6bit,只有在使用区分服务时,这个字段才起作用,在一般的情况下都不使用这个字段;

保持不变:

  1. 显式拥塞通告:允许在不丢弃报文的同时通知对方网络拥塞的发生
  2. 全长:占16位字段,定义了报文总长,包含首部和数据,单位为字节。这个字段的最小值是20(0字节数据),最大值是65535。
  3. 标识符:占16位,这个字段主要被用来唯一地标识一个报文的所有分片,因为分片不一定按序到达,所以在重组时需要知道分片所属的报文
  4. 分片偏移:这个13位字段指明了每个分片相对于原始报文开头的偏移量,以8字节作单位。
  5. 源地址:报文的发送端;
  6. 目的地址:报文的接收端;
  7. 选项:附加的首部字段可能跟在目的地址之后;

必须更改

  1. 标识符:占16位,主要被用来唯一地标识一个报文的所有分片;
  2. 存活时间:占8位,避免报文在互联网中永远存在。实现为跳数计数器,报文经过的每个路由器都将此字段减1,当此字段等于0时,报文不再向下一跳传送并被丢弃,最大值是255这是 traceroute 的核心原理;
  3. 首部检验和:占16位,检验和字段只对首部查错,在每一跳,路由器都要重新计算出的首部检验和并与此字段进行比对,如果不一致,此报文将会被丢弃;
  4. 数据:所谓的保持不变指的是这次 traceroute 不会改变的,但是下一次 traceroute 可能就会改了。

7. 描述您在 IP datagram 的 Identification field 中的值中所看到的。

主要被用来唯一地标识一个报文的所有分片,因此对于不同的报文就需要改变这个值,使得报文可以唯一确定

下一步(数据包仍按来源地址排序)查找最近的(第一跳)路由器发送到您的计算器的一系列 ICMP TTL超出的回复讯息。

。下一步查找第一跳路由器发送到您的计算机的一系列ICMP TTL 超出的回复讯息。

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

ID 字段 13673  TTL 字段 64

9. 对于最近(第一跳)路由器发送到您的计算器的所有 ICMP TTL 超出的回复,这些值是否保持不变?为什么?单击“时间”列,再次按时间对数据包列表进行排序。

ID 字段改变,TTL字段不改变

10. 在将 pingplotter 中的数据包大小更改为 2000 后,查找计算机发送的第一个ICMP Echo Request 消息。该消息是否已碎片化为多个 IP 数据报? [注意:如果你发现你的数据包没有被分割,你应该下载 zip 文件http://gaia.cs.umass.edu/wireshark-labs/wireshark-traces.zip 并提取 ip-etherealtrace-1packet 跟踪。如果您的计算机具有以太网接口,则数据包大小为2000 会导致碎片。 ]

该消息被碎片化为2个IP数据报

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

More fragments字段为1表示Set,即该数据包被分片。通过ID字段判断这是第一个片段,分片长度为 1480 bytes。

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

Fragment Offset字段表示偏移量,1480 bytes 的偏移量表示是上一个片段的后续。没有更多的片段了,因为 More fragments 字段为Not set,表示后面没有分片了。

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

        现在,在将 pingplotter 中的数据包大小更改为 3500 后,找到计算机发送的第一个ICMP Echo Request 消息。

全长,标志和分片偏移

        接下来在将pingpoltter中的数据包大小更改为3500后,找到计算机发送的第一个ICMP Esho Request消息。

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

创建了三个片段

  • 9
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值