Wireshark 实验
本部分按照数据链路层、网络层、传输层以及应用层进行分类,共有 10 个实验。需要使用协议分析软件 Wireshark进行
✍ 初识Wireshark
准备:
请自行查找或使用如下参考资料,了解 Wireshark 的基本使用:
选择对哪块网卡进行数据包捕获
进行网络选择
开始/停止捕获
了解 Wireshark 主要窗口区域
设置数据包的过滤
为避免其他无用的数据包影响分析,可以通过在过滤栏设置过滤条件进行数据包列表过滤
ip.addr=[IP地址]
1
可以看到与www.baidu.com的数据交换
跟踪数据流
✍一、数据链路层
✎实作一
熟悉 Ethernet 帧结构
使用 Wireshark 任意进行抓包,熟悉 Ethernet 帧的结构,如:目的 MAC、源 MAC、类型、字段等。
✎ 问题
你会发现 Wireshark 展现给我们的帧中没有校验字段,请了解一下原因。
这是因为有时校验和会由网卡计算,这时wireshark抓到的本机发送的数据包的校验和都是错误的,所以默认关闭了WireShark自己的校验。
✎实作二
了解子网内/外通信时的 MAC 地址
ping 你旁边的计算机(同一子网),同时用 Wireshark 抓这些包(可使用 icmp 关键字进行过滤以利于分析),记录一下发出帧的目的 MAC 地址以及返回帧的源 MAC 地址是多少?这个 MAC 地址是谁的?
ping 192.168.43.72
发出帧的目的 MAC 地址以及返回帧的源 MAC 地址是b0:68:e6:04:6d:53,这个MAC地址是旁边主机的MAC地址
2.然后 ping qige.io (或者本子网外的主机都可以),同时用 Wireshark 抓这些包(可 icmp 过滤),记录一下发出帧的目的 MAC 地址以及返回帧的源 MAC 地址是多少?这个 MAC 地址是谁的?
ping qige.io
发出帧的目的 MAC 地址以及返回帧的源 MAC 地址是c2:68:e6:04:6d:53,这个MAC地址是本机的网关MAC地址
再次 ping www.cqjtu.edu.cn (或者本子网外的主机都可以),同时用 Wireshark 抓这些包(可 icmp 过滤),记录一下发出帧的目的 MAC 地址以及返回帧的源 MAC 地址又是多少?这个 MAC 地址又是谁的?
ping www.cqjtu.edu.cn
可以看到请求超时,未发送信息。发出帧的目的 MAC 地址以及返回帧的源 MAC 地址是c2:68:e6:04:6d:53,是网关的MAC地址
✎ 问题
通过以上的实验,你会发现:
访问本子网的计算机时,目的 MAC 就是该主机的,访问非本子网的计算机时,目的 MAC 是网关的
请问原因是什么?
因为本机接收到的本子网以外的信息必定经由网关发送给我,同理本机发送到本子往外信息的下个地址必定是网关的mac地址。而本子网内的可以直接到达。
✎实作三
掌握 ARP 解析过程
为防止干扰,先使用 arp -d * 命令清空 arp 缓存
发现出现问题:ARP项删除失败:请求的操作需要提升
解决方法如下:右击Windows键→选择Window PowerShell(管理员),进入管理员端,输入arp -d即可
ping 你旁边的计算机(同一子网),同时用 Wireshark 抓这些包(可 arp 过滤),查看 ARP 请求的格式以及请求的内容,注意观察该请求的目的 MAC 地址是什么。再查看一下该请求的回应,注意观察该回应的源 MAC 和目的 MAC 地址是什么。
再次使用 arp -d *命令清空 arp 缓存
然后 ping qige.io (或者本子网外的主机都可以),同时用 Wireshark 抓这些包(可 arp 过滤)。查看这次 ARP 请求的是什么,注意观察该请求是谁在回应。
ping qige.io
ARP请求为Who has 192.168.43.90? Tell 192.168.43.1
回复的为本机的MAC地址
这里遇到了一个问题,ARP协议并未使用广播来发送请求,而是直接将MAC地址写入了目的MAC。 查阅相关资料得到了答案:
-Another alternative is to have a daemon perform the timeouts. After a suitable time, the daemon considers removing an entry. It first sends (with a small number of retransmissions if needed) an address resolution packet with opcode REQUEST directly to the Ethernet address in the table. If a REPLY is not seen in a short amount of time, the entry is deleted. The request is sent directly so as not to bother every station on the Ethernet. Just forgetting entries will likely cause useful information to be forgotten, which must be regained.
加粗段落指出,每隔一段合适的时间,后台进程会考虑移除一条表项(每条表项都有对应的生存时间),在移除此表项前,会先直接发送一条地址解析包到表中对应的以太网地址,如果在短时间内没有回复,则删除此表项。请求包是直接发送到目的地的,所以可以不打扰到以太网中的其他站点;而直接删除此表项会造成有用的信息被删除,并且需要重新来获取此信息。
这样答案就很明显了。如果arp表中的表项生存时间一到,直接删除此表项,则还需要重新发送广播帧来请求目的mac地址,这样做因为广播而打扰其他站点。
考虑到如果以太网中的主机很多,那么每台机器中的arp表中的表项也会很多,如果每条表项生存时间一到就直接删除表项,那么局域网中的广播数量会很多,这会在一定程度上影响网络的利用率,因此在删除表项之前,直接向该表项的目的地址发送一条请求报文来确认。如果短时间内没有收到回复,则说明此mac地址的拥有者已经改变了ip地址,或者已经离开了此以太网,直接删除此表项即可。
参考自博文:有些arp请求报文中为什么会有目的mac地址(不使用广播地址)
✎ 问题
通过以上的实验,你应该会发现,
ARP 请求都是使用广播方式发送的 如果访问的是本子网的 IP,那么 ARP 解析将直接得到该 IP 对应的 MAC;如果访问的非本子网的IP, 那么 ARP 解析将得到网关的 MAC。 请问为什么?
ARP代理,访问非子网IP时是通过路由器访问的,路由器再把发出去,目标IP收到请求后,再通过路由器端口IP返回去,那么ARP解析将会得到网关的MAC。