目录

  • Ethernet
  • 以太网
  • 以太网硬件
  • 以太网帧
  • 以太网服务
  • ARP
  • 地址解析协议
  • 子网外的地址解析
  • 捕获和分析以太网帧
  • 实验步骤
  • 问题解答
  • 地址解析协议
  • 实验操作
  • 问题解答
  • 抓取 ARP 消息
  • 实验操作
  • 问题解答
  • 参考资料

Ethernet

以太网

以太网是个好东西哦,在现在的有线局域网中有着支配者的地位,就像是因特网使得全球互联那样。其实局域网技术还有令牌环、FDDI 和 ATM 等,但是以太网仍然具有很多独特的优势,使其保持着广泛的使用,原因有:

  1. 以太网是第一个广泛部署的高速局域网,网络从业者对其更为熟悉;
  2. 以太网相对令牌环、FDDI 和 ATM 等技术更为简洁、便宜
  3. 以太网也不断发展,诞生出更多数据效率高的新版本,使得其可以与新的局域网技术仍保持竞争力;
  4. 以太网的网络硬件很便宜,因为以太网技术非常流行。

wireshark ARP协议分析实验 ip.addr wireshark arp_wireshark ARP协议分析实验

以太网硬件

初始的以太局域网使用同轴电缆总线互联结点,也就是总线型。使用总线拓扑的以太网是广播局域网,也就是所有传输的真传输到总线连接的所有适配器来处理。这就说明了所有结点会在同一冲突域中,因此彼此之间很容易发生冲突,需要用具有二进制指数回退的 CSMA/CD 多路访问协议。

wireshark ARP协议分析实验 ip.addr wireshark arp_子网_02


在发展之后就出现了基于集线器的星形拓扑以太网,集线器是物理层设备,操作的不是以太帧而是各个字节。集线器的工作原理是当在一个接口接收到一个比特,就将这个比特生成一个副本并向其他接口发送。随着不断的发展,后续交换机取代了集线器,仍然使用星形拓扑。星形拓扑的好特点是没一个节点的冲突域是单独的,结点间彼此不冲突。

wireshark ARP协议分析实验 ip.addr wireshark arp_wireshark ARP协议分析实验_03

以太网帧

以太网帧有 6 个字段:

wireshark ARP协议分析实验 ip.addr wireshark arp_缓存_04


数据:46~1500 字节,这是上层协议的载荷,这个字段将承载了 IP 数据报。由于以太网的 MTU是 1500 字节,因此经常需要给数据报分片;

目的地址\源地址:6 字节,包含目的适配器\源适配器的 MAC 地址;

类型:2 字节,指定以太网复用的网络层协议,因为主机能够支持多种网络层协议;

CRC:4 字节,循环冗余检测用于令接收适配器检测真中是否引入查错;

前同步码:8 字节,前 7 字节都是 “10101010”,用于“唤醒”接收适配器,并且同步时钟,最后一个字节是 “10101011”。

以太网服务

以太网向网络层提供 2 种服务。首先是无连接服务,也就是适配器之间发送接收真,发送网卡和接收网卡间不需要“握手”,类似于 IP 协议和 UDP 协议。第二是不可靠服务,虽然接收适配器执行 CRC 校验,但是这个校验并不发送类似 ACK 的确认帧。虽然将到时传递到网络层的数据流出现间隙,这种传输方式可以使得以太网可以简洁且便宜。对于这种间隙,接收方遇到查错帧就直接丢弃,若要修复丢弃帧的数据,需要依靠类似 TCP 这样的高层协议。

ARP

地址解析协议

由于 IP 地址是网络层地址,MAC 地址是链路层地址,因此当我需要传输数据时就需要对地址进行转换。在同一个 LAN 里如何在一直目的 IP 地址的前提下确定 MAC 地址?这就需要 ARP 协议。这个好像和 DNS 有些相似之处,DNS 是在因特网中进行主机的主机名解析,ARP 是在一个子网上的主机和路由器接口解析 IP 地址。

每台主机和路由器在内存中有 ARP表,表中有 3 个内容,前两个是 IP 地址和 MAC 地址,这表示了 IP 地址和对应的 MAC 地址的映射关系,还有一个是 TTL,这是每个映射关系保存的时间,这是因为我们其实不必要去为每一台主机和路由器都存储映射关系,毕竟有的主机我可能从来不访问。

拥有 ARP 表之后是怎么实现功能呢?首先发送方构造一个 ARP 查询分组,这个分组用于询问子网上的所有主机和路由器,使用 MAC 广播地址(FF-FF-FF-FF-FF-FF)发送分组,LAN 中的所有结点都会受到这个 ARP 查询分组,此时只有接收方会接收这个分组匹配,这个匹配是通过ARP 模块实现的,模块的作用是将适配器将 ARP 分组传入时,检查 IP 地址是否与 ARP 的目的 IP 地址匹配。匹配成功之后就可以用单播(不是广播)发送 ARP 响应分组,其他的就忽略这个分组。发送方接收到这个响应分组之后,就在 ARP 表中缓存该 IP-MAC 映射关系,然后超时后刷新。

这里有 2 个细节需要注意。首先是 ARP 查询分组是广播,而响应分组是单播。第二是 ARP 是即插即用的,也就是 ARP 表不需要手动配置,只需要让协议自动建立就行。

wireshark ARP协议分析实验 ip.addr wireshark arp_缓存_05

子网外的地址解析

在相同子网内的 ARP 很好理解,那么当子网中的主机要向子网外发送网络层数据报时,ARP 又是怎么工作的呢?对于主机,每台主机只有一个 IP 地址和一个适配器,对于一台路由器来说,每个接口都有一个 IP 地址,也都有一个 ARP 模块和一个适配器。

wireshark ARP协议分析实验 ip.addr wireshark arp_IP_06


当一个子网向另一个子网发送 IP 数据报时,发送主机向适配器传递,此时应该传递什么 MAC 地址呢?明显不是目的主机的 MAC 地址,因为在所在子网中该地址与所有的适配器之间都不匹配,那就只好丢弃了。所以适当的 MAC 地址应该是路由器接口的适配器地址,但是路由器接口的 MAC 地址怎么获取?ARP 嘛!

接下来路由器就需要将数据报发到正确的目的地去,也就是要发到哪个接口去呢?可以查询路由器的转发表,根据转发表送到对应的接口去。接口收到数据包之后,适配器把数据报封装到新的帧中,发送到下一个子网去,下一个子网的 MAC 地址怎么确定?再搞个 ARP 就行了!

捕获和分析以太网帧

实验步骤

  1. 首先,确保浏览器的缓存为空(清除浏览器缓存),启动 Wireshark 数据包嗅探器。

wireshark ARP协议分析实验 ip.addr wireshark arp_IP_07


wireshark ARP协议分析实验 ip.addr wireshark arp_缓存_08


2. 打开以下 URL “http://gaia.cs.umass.edu/wireshark-labs/HTTP-ethereal-lab-file3.html” 您的浏览器应显示一段长文档。

wireshark ARP协议分析实验 ip.addr wireshark arp_子网_09


3. 停止 Wireshark 数据包捕获,找到您向 gaia.cs.umass.edu 的 HTTP GET 消息的数据包编号以及 gaia.cs.umass.edu 相应您的 HTTP 回应。干扰巨大,还是看看现成的包吧。

wireshark ARP协议分析实验 ip.addr wireshark arp_wireshark ARP协议分析实验_10


4. 更改 Wireshark 的“捕获数据包列表”窗口,仅显示有关 IP 以下协议的信息。

wireshark ARP协议分析实验 ip.addr wireshark arp_wireshark ARP协议分析实验_11


wireshark ARP协议分析实验 ip.addr wireshark arp_缓存_12


5. 选择包含 HTTP GET 消息的以太网帧,在数据包详细信息窗口中展开以太网信息,以太网帧的内容(标题以及有效负载)显示在数据包内容窗口中。

问题解答

根据包含 HTTP GET 消息的以太网帧进行分析:

wireshark ARP协议分析实验 ip.addr wireshark arp_IP_13

  1. 你的电脑 48 位的地址是多少

wireshark ARP协议分析实验 ip.addr wireshark arp_缓存_14


源地址:AmbitMic_a9:3d:68 (00:d0:59:a9:3d:68)

2. 以太网帧中的 48 位目标地址是什么?这是 gaia.cs.umass.edu 的以太网地址吗?

wireshark ARP协议分析实验 ip.addr wireshark arp_子网_15


目的地址: LinksysG_da:af:73 (00:06:25:da:af:73)。这个不是 gaia.cs.umass.edu 的以太网地址,这个应该是出子网的路由器的地址。

3. 以太网帧上层协议 16 进制值是什么?这对应的上层协议是什么?

wireshark ARP协议分析实验 ip.addr wireshark arp_子网_16


0x0800,表示上层协议是 IPv4。

wireshark ARP协议分析实验 ip.addr wireshark arp_IP_17


4. 从以太帧的开始,一直到“GET”中的 ASCII“G”出现在以太网帧中為止,有多少字节?

wireshark ARP协议分析实验 ip.addr wireshark arp_缓存_18


有 16 × 3 + 6 = 54 Byte

根据包含 HTTP 响应消息的第一个字节的以太网帧的内容:

wireshark ARP协议分析实验 ip.addr wireshark arp_wireshark ARP协议分析实验_19


由此可见响应消息被分片了。

5. 这个帧中,以太网源地址的值是多少?这是你的计算机的地址,还是 gaia.cs.umass.edu 的地址?拥有这个以太网地址的设备是什么?

wireshark ARP协议分析实验 ip.addr wireshark arp_wireshark ARP协议分析实验_20


源地址:LinksysG_da:af:73 (00:06:25:da:af:73),这个应该是出子网的路由器的地址。

6. 以太网帧中的目的地址是什么?这是您的计算机的以太网地址吗?

wireshark ARP协议分析实验 ip.addr wireshark arp_子网_21


目的地址:Destination: AmbitMic_a9:3d:68 (00:d0:59:a9:3d:68),这个是我的计算机的以太网地址。

7. 以太网帧上层协议 16 进制值是什么?这对应的上层协议是什么?

wireshark ARP协议分析实验 ip.addr wireshark arp_wireshark ARP协议分析实验_22


0x0800,表示上层协议是 IPv4。

8. 从以太帧的开始,一直到 “OK” 中的 ASCII“O” 出现在以太网帧中为止,有多少字节?

wireshark ARP协议分析实验 ip.addr wireshark arp_wireshark ARP协议分析实验_23


有 16 × 4 + 4 = 68 Byte

地址解析协议

实验操作

ARP 协议通常在您的计算机上维护 IP 到以太网地址转换对的缓存 .arp 命令(在 MSDOS 和 Linux / Unix 中)用于查看和操作此缓存的内容。 arp 命令用于查看和操作 ARP 缓存内容,而 ARP 协议定义了发送和接收的消息的格式和含义,并定义了对消息传输和接收所采取的操作。

现在查看计算机上 ARP 缓存的内容,没有参数的 Windows arp 命令将显示计算机上 ARP 缓存的内容,运行 ARP 命令。

wireshark ARP协议分析实验 ip.addr wireshark arp_缓存_24

问题解答

  1. 每个列值的含义是什么?

wireshark ARP协议分析实验 ip.addr wireshark arp_wireshark ARP协议分析实验_25


按照颜色分别是:网卡、路由 IP 和 MAC 地址、广播地址、组播地址。

抓取 ARP 消息

为了观察您的计算机发送和接收 ARP 消息,我们需要清除 ARP 缓存,否则您的计算机很可能在其缓存中找到所需的 IP-Ethernet 地址转换关系,因此不会发送 ARP消息。

实验操作

  1. 清除你的 ARP 缓存。

wireshark ARP协议分析实验 ip.addr wireshark arp_IP_26


2. 确保浏览器的缓存是空的,启动 Wireshark 捕捉封包。

wireshark ARP协议分析实验 ip.addr wireshark arp_IP_07


wireshark ARP协议分析实验 ip.addr wireshark arp_缓存_08


3. 打开以下 URL “http://gaia.cs.umass.edu/wireshark-labs/HTTP-wireshark-labfile3.html”,你的浏览器应该再次显示长文档。

wireshark ARP协议分析实验 ip.addr wireshark arp_子网_09


4. 同样设置不显示 IP 和更高层协议。

wireshark ARP协议分析实验 ip.addr wireshark arp_wireshark ARP协议分析实验_11


wireshark ARP协议分析实验 ip.addr wireshark arp_缓存_12

问题解答

  1. 包含 ARP 请求消息的以太网帧中源和目标地址的十六进制值是什么?

wireshark ARP协议分析实验 ip.addr wireshark arp_IP_32


目的地址: Broadcast (ff:ff:ff:ff:ff:ff)

源地址: AmbitMic_a9:3d:68 (00:d0:59:a9:3d:68)

11. 以太网帧上层协议 16 进制值是什么?

wireshark ARP协议分析实验 ip.addr wireshark arp_wireshark ARP协议分析实验_33


0x0806,表示上层协议是 ARP。

wireshark ARP协议分析实验 ip.addr wireshark arp_IP_17


12. 分析 ARP 请求

wireshark ARP协议分析实验 ip.addr wireshark arp_缓存_35


wireshark ARP协议分析实验 ip.addr wireshark arp_子网_36


a) ARP 操作码字段开始从以太网帧的最开始有多少字节?

wireshark ARP协议分析实验 ip.addr wireshark arp_子网_37


16 + 5 = 21 Byte

b)在进行 ARP 请求的以太网帧的 ARP 负载部分中,操作码字段的值是多少?

操作码的值为 1。

c) ARP 消息是否包含发送方的 IP 地址?

wireshark ARP协议分析实验 ip.addr wireshark arp_缓存_38


ARP 消息包含发送方的 IP 地址。

d) 在 ARP 请求中从哪里看出我们要查询相应 IP 的以太网地址?

wireshark ARP协议分析实验 ip.addr wireshark arp_缓存_39


13. 找到相应 ARP 请求的而发送 ARP 回复。

wireshark ARP协议分析实验 ip.addr wireshark arp_wireshark ARP协议分析实验_40


a) ARP 操作码字段开始从以太网帧的最开始有多少字节?

wireshark ARP协议分析实验 ip.addr wireshark arp_wireshark ARP协议分析实验_41


16 + 5 = 21 Byte

b) 在进行 ARP 响应的以太网帧的 ARP 负载部分中,操作码字段的值是多少?

操作码的值为 2。

14. 包含 ARP 回复消息的以太网帧中的源地址和目标地址的十六进制值是多少?

wireshark ARP协议分析实验 ip.addr wireshark arp_wireshark ARP协议分析实验_42


目的地址: AmbitMic_a9:3d:68 (00:d0:59:a9:3d:68)

源地址: LinksysG_da:af:73 (00:06:25:da:af:73)

15. 在作者抓包结果中,他有两台电脑,一台运行 wireshark 进行抓包,一台没有,那么为什么运行 wireshark 那台电脑发送 ARP 请求得到了应答,另外一台电脑的 ARP 请求没有得到应答?

因为 ARP 查询分组是广播,而响应分组是单播。

参考资料

《计算机网络 自顶向下方法》 [美] James F.Kurose,Keith W.Ross 著,陈鸣 译,机械工业出版社以太网 维基百科ARP(地址解析协议) 百度百科地址解析协议 维基百科