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

2023-05-16

实验描述:

在本实验中,我们将研究 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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 64位ubuntu虚拟机编译后可运行,32位的arm不能运行的原因

    这两天遇到一个怪事 xff0c 就是在64位虚拟机上使用asn1c工具编译生成的asn源文件 xff0c 交叉编译生成静态库 xff0c 在虚拟机上跑的好好的 xff0c 但是在arm上跑的时候无法解码 xff0c 最后查明原因是asn1c
  • 如何使用交叉编译将大量源文件生成动态库

    今天要把算法包生成一个动态库放在ARM上调用运行 xff0c 特此记录一下给大家参考 1 首先将算法文件夹中的源程序生成 o文件 arm span class token operator span linux span class tok
  • 结构体赋值运行时出现段错误(核心已转储)

    今天给嵌套结构体赋值的时候编译没问题 xff0c 但是运行总是段错误 xff0c 后来发现是忘了分配动态内存 xff0c 记得用calloc分配 xff0c 实际结构体嵌套比较复杂 xff0c 在这里举个简单的例子给大家看看 xff0c 引
  • 如何将一段字符串在word中,自动删除换行,两两之间增加空格键

    我们在拉取十六进制数据分析时 xff0c 经常遇到对方只给一条长长的字符串 xff0c 当然 xff0c 我们可以通过代码的方式进行空格添加 xff0c 方便阅读 xff0c 但是有时候身边没有编译工具或者流程复杂 xff0c 介绍一个用w
  • Python学习第5天——洛谷刷题(顺序结构)、循环

    Python学习第5天 1 洛谷刷题1 1 顺序结构1 2 高精度 2 循环2 1 while循环2 2 for循环2 3 range xff08 xff09 函数2 4 用for循环绘图练习2 4 1 绘制同心圆2 4 2 绘制棋盘格 1
  • 如何定义字符串

    如何定义字符串 一维和二维的都可以 xff1b 一维的情况如下 xff1a 1 xff0c char string0 10 2 xff0c char string1 61 34 prison break 34 3 xff0c char st
  • static全局变量与普通的全局变量的区别?

    1 static全局变量与普通的全局变量有什么区别 xff1f static局部变量和普通局部变量有什么区别 xff1f static函数与普通函数有什么区别 xff1f 答 xff1a 全局变量 外部变量 的说明之前再冠以static 就
  • 动态存储方式和静态存储方式

    从变量的作用域的角度来观察 xff0c 变量可以分为全局变量 和局部变量 xff1b 全局变量都是存放在静态存储区中的 因此它们的生存期是固定的 xff0c 存在于程序的整个运行过程 局部变量 xff0c 如果不专门声明存储类别 xff0c
  • c语言中的return 0有什么用?

    return 0是正常退出 xff0c return 非零是异常退出 xff0c 这是返回给控制台的 xff0c 不在编的程序的控制范围内 xff0c 是给操作系统识别的 xff0c 对你的程序无影响 如果是C中 xff0c 定义void
  • JAVA代码实现字符串匹配(一)——BF、KMP

    话不多说 xff0c 直接进入主题 xff1a 题目描述 xff1a 给定两个字符串text和pattern xff0c 请你在text字符串中找出pattern字符串出现的第一个位置 xff08 下标从0开始 xff09 xff0c 如果
  • pwntools, terminal =‘tmux‘ 报错

    pwntools terminal 61 tmux 报错 Traceback most recent call last File exp py line 4 in gdb attach File home pwn pwn lib pyth
  • 更改手动导入的wsl的默认登录用户

    导入了一个wsl后 xff0c 每次登录都是root用户 xff0c 这个就有点不太好 网上的教程都是说在ps里用分发版的对应exe文件来设置默认用户 xff0c 但是导入的这个wsl我没找到这个exe 找了半天然后看了微软官方的教程 xf
  • v8安装fetch不上

    大佬方案 xff1a 白嫖github action 感谢大佬
  • pwnabletw-babystack

    BabyStack 思路 危险函数 xff0c strcpy 在copy的时候strcpy看似没有问题 xff0c 但是由于src的内容并没有清空 xff0c 还保存着被销毁栈的原有数据 xff0c 而strcpy是根据 34 x00 34
  • vmware win7虚拟机安装vmtools坑

    win7镜像下载 要下带SP1这个记号的 xff0c 表示有service pack 1这个补丁的 一定一定记得 xff0c 不然vmtools装不上 补丁 vmtools安装期间有很多驱动安不上的话 xff0c 首先 xff0c 安装一个
  • Python学习第10天——GUI初步

    Python学习第10天 1 多个库2 所写的代码 1 多个库 图形开发界面的库 Tkinter xff1a Tkinter 模块 Tk 接口 是 Python 的标准 Tk GUI 工具包的接口 Tk 和 Tkinter 可以在大多数的
  • IO扩展芯片PCF8574的中断引脚的理解

    The PCF8574 device provides an open drain output INT that can be connected to the interrupt input of a microcontroller A
  • java中的字符转换为数字 十进制转为二进制

    java中的字符转整数 span class token comment 方式1 span span class token keyword char span c span class token operator 61 span spa
  • xshell登录 安卓手机

    局域网远程连接手机 通过ssh登录到手机 Termux安装Termux安装openssh启动sshd服务配置登录密钥方法1方法2 手机查看当前用户名手机查看当前ip电脑cmd ssh到手机电脑xshell连接到ssh手机 通过ssh登录到手
  • vscode插件之Linux相关插件

    Linux相关插件 1 Remote SSH 远程连接插件2 shell format 代码格式化工具3 shellman 代码语法提示4 Linux ansible 语法提示5 皮肤设置5 1 Dracula Official5 2 ta

随机推荐