实验描述:
在本实验中,我们将研究以太网协议和 ARP 协议。在开始实验之前, 您可以查看课本的 6.4.1 节(链路层地址和 ARP)和 6.4.2(以太网), 您也可以去看 RFC 826(ftp://ftp.rfc-editor.org/in-notes/std/std37.txt)了解关于 ARP 的协议详细信息,该协议可以根据 IP 地址获取远程主机的的物理地址(MAC地址)。
实验过程:
第一部分:捕获和分析以太网帧
让我们从捕获一组以太网帧开始研究。 请执行下列操作 :
-
首先,确保浏览器的缓存为空(清除浏览器缓存),对于Chorme浏览器,如下图所示,然后启动 Wireshark数据包嗅探器。
-
打开以下 URL http://gaia.cs.umass.edu/wireshark-labs/HTTP-ethereal-lab-file3.html 您的浏览器应显示相当冗长的美国权利法案。
-
接下来停止 Wireshark数据包捕获,找到您向 gaia.cs.umass.edu的 HTTP GET消 息的数据包编号以及 gaia.cs.umass.edu相应您的 HTTP回应。您的抓包结果应 看起来向下面一样:
-
由于本实验是关于以太网和 ARP的,我们对 IP或更高层协议不感兴趣。 因此,让我们更改 Wireshark的“捕获数据包列表”窗口,以便它仅显示有关 IP 以下协议的信息。 要让 Wireshark执行此操作,请选择 Analyze-> Enabled Protocols(分析-启用的协议)。 然后取消选中 IP框(这里指的 IPV4 协议,下面有搜索)并选择确定。
(下面的图应该是取消IPv4的“勾”即可,不要全部禁用,懒得去改了)
您现在 Wireshark窗口应该如下所示:
回答问题:
第一部分:捕获和分析以太网帧
为了回答以下问题,您需要查看数据包详细信息 和 数据包内容窗口(Wireshark中 的中间和下部的显示窗口)。
选择包含 HTTP GET消息的以太网帧。 (回想一下,**HTTP GET请求是被加上 TCP头封装到 TCP段进行传输,TCP段加上 IP头被封装到 IP数据报进行传输,IP数据报又被加上以太网头封装成以太网帧进行传输;**如果你发现这个封装有点令人困惑,请重读文本中的第 1.5.2节)。 在数据包详细信息窗口中展开以太网 II 信息。 请注意,以太网帧的内容(标题以及有效负载)显示在数据包内容窗口中。
根据包含 HTTP GET消息的以太网帧进行分析,如果有可能建议您使用标记的方式展现您的答案。
- 你的电脑 48位的地址是多少?
答:我的电脑的MAC地址为:
5a:00:dd:d9:3c:7f
- 以太网帧中的 48位目标地址是什么?这是 gaia.cs.umass.edu的以太网地址吗?(提示:答案是否定的)。那么它是什么?
答:直接看上面的图,以太网帧中的目的MAC地址为:
a8:9c:ed:c3:ad:2c
,不是gaia.cs.umass.edu的以太网地址吗,这是我手机的虚拟路由地址(我用小米手机开的热点做的实验)。
- 以太网帧上层协议 16进制值是什么?这对应的上层协议是什么?
答:16进制值是
0x0800
,对应的是网络层的IPv4协议。
- 从以太帧的开始,一直到“GET”中的 ASCII“G”出现在以太网帧中为止,有多少字节?
答:两个16进制代表一个字节,
第一行、第二行、第三行都是16个字节,总共48个字节,第四行到G
总共有7个字节,所以总共55个字节。
接下来,根据包含 HTTP响应消息的第一个字节的以太网帧的内容(带有OK的响应消息),回答以下问题。
- 这个以太网帧中,以太网源地址的值是多少?这是你的计算机的地址,还是 gaia.cs.umass.edu的地址(提示:答案是否定的)。拥有这个以太网地址的设备是什么?
答:以太网源地址为:
a8:9c:ed:c3:ad:2c
,这不是我计算机的地址(我的地址第一题一句说了),也不是远端服务器的地址,而是我手机的虚拟路由地址,因为可以看得出前面有个小米手机。
- 以太网帧中的目的地址是什么?这是您的计算机的以太网地址吗?
答:目的地址就是我的计算机的以太网地址了,为
5a:00:dd:d9:3c:7f
。
- 以太网帧上层协议16进制值是什么? 这对应的上层协议是什么?
答:还是像第三题那样,16进制值是
0x0800
,对应的是网络层的IPv4协议。
- 从以太帧的开始,一直到“OK”中的 ASCII“O”出现在以太网帧中为止,有多少字节?
答:4*16+4 = 68个字节。
实验过程:
第二部分:地址解析协议
回想一下,ARP协议通常在您的计算机上维护 IP 到 以太网地址(MAC地址) 转换缓存,.arp 命令(在 MSDOS和 Linux / Unix中)用于查看和操作此缓存的内容。由于 arp命令和 ARP协议具有相同的名称,因此很容易混淆它们。但请记住,它们是不同的:
- arp命令,用于查看和操作 ARP缓存内容(就是IP转到MAC地址的转换表),
- ARP协议,定义了发送和接收的消息的格式和含义,并定义了对消息传输和接收所采取的操作。
我们来看看您计算机上ARP缓存的内容
我的是Windows,我就直接在cmd命令行操作了:
为了观察您的计算机发送和接收 ARP消息,我们需要清除 ARP缓存,否则您的计算机很可能在其缓存中找到所需的 IP-Ethernet地址转换关系,因此不会发送 ARP 消息。
抓取 ARP 消息
请进行以下操作:(很多都是和第一部分的实验差不多,有的截图没有贴出来)
-
清除arp表的缓存,如上图。
-
清除浏览器的缓存。
-
启动 Wireshark捕捉封包。
-
打开以下 URL,http://gaia.cs.umass.edu/wireshark-labs/HTTP-ethereal-lab-file3.html。你的浏览器应该再次显示相当长的美国权利法案。
-
同样设置不显示 IP和更高层协议,请选择 Analyze-> Enabled Protocols(分析 -启用的协议)。 然后取消选中 IP框,之后窗口内容应该如下:
回答问题:
第二部分:地址解析协议
- 写下计算机 ARP缓存的内容。每个列值的含义是什么?
答: 每个列值的含义其实都在上面说了,分别表示Internet地址(也就是IP地址)、物理地址(也就是MAC地址)、类型(动态,表示如果某个表项在一定的时间内没有被用到就被删除,静态则永久保存)
ARP动态与静态类型参考资料
- 包含 ARP请求消息的以太网帧中源和目标地址的十六进制值是什么?
答:这里的arp请求消息就是广播消息,因为一开始的时候arp缓存被清空了,所以就会发出arp广播,但是好像要有无线路由器才能抓取arp广播消息Broadcast,所以这里直接使用官方抓取的数据包了。
对应的源地址为:00:d0:59:a9:3d:68
,目的地址为:ff:ff:ff:ff:ff:ff
- 以太网帧上层协议 16进制值是什么?
答:如上图可知,以太网帧上层协议(以太网帧封装在ip数据包中,上层协议就是ip协议),对应的16进制值是:
0x0806
。
-
分析ARP请求
a) ARP 操作码字段 开始从以太网帧的最开始有多少字节?
答:ARP协议报文的格式
这道题问的就是ARP操作码之前有多少个字节,ARP操作码就是Opcode
,找到即可,前面总共是16 + 5 = 21字节:
b) 在进行ARP请求的以太网帧的ARP负载部分中,操作码字段的值是多少?
答:如上图可以看到,字段的值为1。
c) ARP 消息是否包含发送方的 IP 地址?
答:包含,如下图所示
d) 在 ARP 请求中从哪里看出我们要查询相应 IP 的以太网地址?
答:操作码字段中有request,表示要请求,也就是查询响应IP的以太网地址。
-
分析ARP结果
a) ARP 操作码字段开始从以太网帧的最开始有多少字节?
答:跟ARP请求其实是一样的,都是21个字节。
b) 在进行 ARP 响应的以太网帧的 ARP 负载部分中,操作码字段的值是多少?
答:上图可以看到,响应的值为2。
c) 在响应 ARP 中从哪里看出现早期 ARP 请求的答案?
答:从下面可以看出:
- 包含 ARP 回复消息的以太网帧中的源地址和目标地址的十六进制值是多少?
答:源地址:
00:06:25:da:af:73
,目的地址:00:d0:59:a9:3d:68
- 在作者抓包结果中,他有两台电脑,一台运行 wireshark 进行抓包,一台没有,那么为什么运行 wireshark 那台电脑发送 ARP 请求得到了应答,另外一台电脑的 ARP 请求没有得到应答?(没有相应第 6 帧的 ARP 的请求)
答:因为 ARP 广播信息是广播的,所有该网段内的电脑均可收到,而 ARP 广播回复是单播的,只有请求的那台电脑才能收到,因此抓不到另外一台电脑的 ARP 请求。 【参考自别人】
参考资料:
https://github.com/moranzcw/Computer-Networking-A-Top-Down-Approach-NOTES