[Wireshark Lab v8.1] Lab: IP

[Wireshark Lab v8.1] Lab 翻译与解题.

以下实验步骤均来自实验指导手册。
实验指导手册下载地址:Jim Kurose Homepage (umass.edu)

Lab IP

在这个lab中, 我们将深入久具盛名的IP协议, 聚焦IPv4和IPv6数据报. 分为3部分, 在第一部分中, 我们将分析由traceroute程序发送和接收的IPv4追踪报文(traceroute程序本身将在ICMP lab中更进一步被说明), 将在第二部分学习IP分片的知识, 最终在第三阶段简要展示IPv6的内容.

在开始之前, 你可能需要回顾书中第1.4.3节和关于RfC2151的第3.4节, 来更新你对traceroute程序对操作认识. 你还可能需要阅读书本第4.3节和RFC791的内容来对IP协议进行了解. 当回答阶段2 IP分片时, 你大概率需要回顾下相关的材料. 尽管我们在书的第8版删除了IP分片的话题, 还是可以在第7版或更早的版本查阅. [RFC8200]是关于IPv6的完整RFC, 但本lab不需要完全阅读这个内容, 可以查阅书中4.3.4节关于IPv6的内容.

在 traceroute 的执行中抓包

在本次实验的前两个章节, 为了获取IPv4数据报的trace, 我们将使用traceroute程序, 来发送两个不同大小的数据报到 gaia.cs.umass.edu. 回忆traceroute程序通过将首先将一个或多个数据报中IP头的存活时间TTL(Time To Live)设置为1来发送, 然后发送TTL为2, 为3, 等等的包到目的主机. 回忆, 路由器必须将每个收到的数据报的TTL字段减一(事实上RFC791中的规定是至少减一). 当TTL归零时, 路由器返回一个ICMP消息(类型为11-TTL-exceed)给源主机. 根据这个行为,traceroute就能在通往目的主机的第一跳,第二跳,第三跳以及后续路由中获取返回的ICMP报文, 程序通过解析ICMP TTL-exceeded 消息中的IP地址, 从而得到它到目的主机之间所有路由的地址.

让我们运行traceroute程序, 使它发出两种不同大小的数据报. 更大一点的数据报将会导致traceroute消息被分片, 通过多个IPv4数据报传输.

  • Linux/MacOS. 使用 Linux/MacOStraceroute命令,可以通过指示数据报中的字节数来明确设置发送到最终目的地的 UDP 数据报的大小; 此值在目标名称或地址之后立即输入到traceroute命令行中。 例如,要向 gaia.cs.umass.edu 发送 2000 字节的traceroute数据报,命令将是: $traceroute gaia.cs.umass.edu 2000
  • Windows. Windows 提供的tracert 程序不允许更改tracert 发送的ICMP 消息的大小。 因此,不可能使用 Windows 机器生成大到足以强制 IP 分段的 ICMP 消息。 但是,您可以使用 tracert 生成小的、固定长度的数据包来执行本实验的第 1 部分。 在 DOS 命令提示符下输入: >tracert gaia.cs.umass.edu 如果你需要继续实验的第二部分, 可以选择下载使用在作者主机抓到的trace文件.

进行如下操作:

  • 启动Wireshark, 开始抓包
  • 输入两次traceroute命令, 目的地是 gaia.cs.umass.edu, 第一个包长度设置为56字节, 在命令执行完成后, 输入第二次traceroute, 目的地不变, 长度设置为3000字节
  • 停止抓包

如果无法正常抓包可以使用trace文件中的ip-wireshark-trace1-1.pcapng.

1: 基本IPv4.

你的trace中, 应该能看到由traceroute命令通过主机发送的一系列UDP段(MacOS/Linux)或者ICMP回声请求消息(Windows), 和由中间路由返回给主机的 ICMP TTL-exceeded 消息. 在下列的问题中, 我们假设你使用 MacOS/Linux 操作系统, 针对 Windows 机器的对应问题应该也是清晰的. 你的屏幕输出应与下图类似, 我们使用了udp||icmp过滤(亮绿字段的过滤区域), 因此只有UDP和ICMP报文会被显示.

p1

回答下列问题:

  1. 选择由主机通过traceroute命令向 gaia.cs.umass.edu 发送的第一个UDP段(提示: 在ip-wireshark-trace1-1.pcapng文件中的包#44), 在报文详细内容窗口打开 Internet Protocol 协议部分. 你电脑的IP地址是?
  2. 在这个IPv4数据报头中, TTL字段的值是多少?
  3. 在这个IPv4数据报头中, 上层协议字段的值是多少?(注意: Linux/Macos与Windows的答案可能不同)
  4. IP头的大小是多少字节?
  5. IP数据报文中的负载长度是多少? 解释你是如何确定负载长度的.
  6. 这个IP数据包被分段了么? 解释如何判断数据包是否被分段.

接下来, 查看由traceroute命令从主机发送的目的是 128.119.245.12 的UDP段sequence. 你可以在过滤中使用 "ip.src192.168.86.61 and ip.dst128.119.245.12 and udp and !icmp". 这允许你轻易的顺序移动只包含这些段段数据包. 你的屏幕截图应如下图所示.

p2

  1. 在你电脑通过traceroute向128.119.245.12发出的一系列UDP段中, IP数据包中的那个字段总是在不同的数据包中改变? 为什么?
  2. 这一系列的IP数据包(包含着UDP段)中那些字段保持不变? 为什么?
  3. 描述主机发出的IP数据包的Identification字段的模式.

现在让我们查看由中间路由接收到的TTL为0的包而返回给主机的ICMP报文. 你可以使用“ip.dst==192.168.86.61 and icmp”来过滤.

  1. 由路由返回的IPv4数据报报头中, 上层协议字段的值是多少?(注意: Linux/Macos与Windows的答案可能不同)
  2. Identification 字段的值(在所有路由器的ICMP包序列)是否与之前问题9的答案有着相同的行为?
  3. 在所有路由器的ICMP包序列中的TTL字段相似么?

2: 分片

在这个章节中, 我们通过traceroute发送一个大(3000字节)UDP段, 导致多IP数据报分片. 我们建议你首先查看在书中IP分片的材料

清空显示过滤, 点击Time行, 以时间为关键字, 对第一部分的包列表排序,

  1. 找到traceroute包长度为3000时, 以主机发送到 gaia.cs.umass.edu 的traceroute程序, 包含了发出的到128.119.245.12包的第一部分的IP数据报. (提示: 在 ip-wireshark-trace1-1.pcapng teace文件中是 #179, #179-#181时第一个3000字节的UDP段的分片后IP数据报) 数据报是否分片被不同IP数据报承载?(提示: 是)
  2. IP头中什么信息表明了数据报被分段了.
  3. IP头中什么信息表明了该包是第一个分片而不是后续的分片.
  4. 这个IP数据报中有多少字节(头部加载荷)
  5. 现在查看UDP段中被分片后的第二个段, IP头中包含了什么信息说明它不是第一个数据报份片?
  6. 在两个分片之间IP头中那个字段被改变了?
  7. 现在查看UDP段中被分片后的第二个段, IP头中包含了什么信息说明它是最后一个数据报份片?

3: IPv6

在最后一章中, 我们将对IPv6数据报进行概览, 可能需要回顾书中4.3.4节的内容. 由于互联网的主流还是IPv4网络, 且ISP可能还没有支持IPv6, 因此我们直接使用抓好的包含IPv6包的trace. 这个trace是通过浏览器访问 youtube.com 得到的, Youtube(google) 已经做出了良好的IPv6支持.

打开ip-wireshark-trace2-1.pcapng, Wireshark软件应该显示类似图中的内容.

让我们详细观察于3.814489发送的#20报文, 这是一个DNS请求(被IPv6数据报承载), 它发送个IPv6 DNS服务器来查找 youtube.com 的 IPv6 地址. DNS AAAA 请求标识解析地址格式为IPv6.

回答下列问题

  1. 发出DNS AAAA请求的 IPv6地址是什么? 这是这个trace文件中#20包的源地址. 以Wireshark完全相同的格式给出这个数据报的IPv6源地址.
  2. 数据报的IPv6目的地址是什么? 给出格式应与Wireshark相同.
  3. 数据报的flow label值是多少?
  4. 数据报携带了多少负载数据?
  5. 这个数据报的有效载荷将在目的地传递到什么上层协议?

最后, 找到DNS AAAA请求的IPv6 DNS响应, 包含了 youtube.com 的 IPv6地址.

  1. 针对这个AAAA请求, 响应中有多少IPv6地址?
  2. DNS 返回的第一个 youtube.com 的IPv6地址是什么(在ip-wireshark-trace2-1.pcapng文件中, 这也是地址按数值排序最小的)? 以Wireshark相同的缩写格式给出.

解答:

首先来看下IP数据报头的格式
|4位版本号|4位首部长度|8位区分服务|16位总长度|
|16位标识号|3位标志|13位片偏移|
|8位TTL|8位上层协议|16位首部校验|
|32位源地址|
|32位目的地址|
|可变部分与首部填充|

  1. 本地IP地址为 192.168.124.8

  2. TTL=1

  3. traceroute使用的是UDP, 因此上层协议字段是 UPD(17)

  4. 没有可变部分, 固定长度20字节

  5. 载荷长度32, 总长度减去IP头的长度

  6. 没有分片,标识部分控制了分片逻辑

  7. UDP包中, TTL每三个增长一次, Identification顺序增长, Identification相同的报文表示同一报文的拷贝或不同分片, 因此需要增长来区分.

  8. 除TTL, Identification和校验和都保持不变

  9. Identification顺序增长

  10. 在返回的IP数据报中, 协议字段是 ICMP(1)

  11. Identification 字段的值无法确定, 假如对连续三条请求作出响应的是同一个路由器, 则 Identification 字段顺序增长, 否则无法保证其关系.

  12. TTL也跟作出响应的路由器有关

  13. 被分片

  14. MF标识与段内偏移结合可以看出是否被分片

  • MF不为0, 偏移为0: 第一个分片
  • MF不为0, 偏移不为0: 中间分片
  • MF为0, 偏移不为0: 最后一个分片
  1. 前两个长度为1500(MTU), 最后一个为40.

IPv6数据头与IPv4并不兼容
|4位版本号|8位通信分类|20位流标记|16位负载长度|8位下一个头部|8位跳数限制|
|64位源IP地址|
|64位目的IP地址|

  1. 源地址 2601:193:8302:4620:215c:f5ae:8b40:a27a
  2. 目的地址 2001:558:feed::1
  3. 流标签用来区分在一个主机内不同应用的流量, (流标签, 源地址, 目的地址) 就唯一可以标识一条应用流量
  4. 载荷长度 37
  5. 上层协议通过 下一个头部 字段查询 UDP(17)
posted @ 2022-06-02 16:35  新新人類  阅读(1763)  评论(0编辑  收藏  举报