目录
- Ethernet
- 以太网
- 以太网硬件
- 以太网帧
- 以太网服务
- ARP
- 地址解析协议
- 子网外的地址解析
- 捕获和分析以太网帧
- 实验步骤
- 问题解答
- 地址解析协议
- 实验操作
- 问题解答
- 抓取 ARP 消息
- 实验操作
- 问题解答
- 参考资料
Ethernet
以太网
以太网是个好东西哦,在现在的有线局域网中有着支配者的地位,就像是因特网使得全球互联那样。其实局域网技术还有令牌环、FDDI 和 ATM 等,但是以太网仍然具有很多独特的优势,使其保持着广泛的使用,原因有:
- 以太网是第一个广泛部署的高速局域网,网络从业者对其更为熟悉;
- 以太网相对令牌环、FDDI 和 ATM 等技术更为简洁、便宜;
- 以太网也不断发展,诞生出更多数据效率高的新版本,使得其可以与新的局域网技术仍保持竞争力;
- 以太网的网络硬件很便宜,因为以太网技术非常流行。
以太网硬件
初始的以太局域网使用同轴电缆总线互联结点,也就是总线型。使用总线拓扑的以太网是广播局域网,也就是所有传输的真传输到总线连接的所有适配器来处理。这就说明了所有结点会在同一冲突域中,因此彼此之间很容易发生冲突,需要用具有二进制指数回退的 CSMA/CD 多路访问协议。
在发展之后就出现了基于集线器的星形拓扑以太网,集线器是物理层设备,操作的不是以太帧而是各个字节。集线器的工作原理是当在一个接口接收到一个比特,就将这个比特生成一个副本并向其他接口发送。随着不断的发展,后续交换机取代了集线器,仍然使用星形拓扑。星形拓扑的好特点是没一个节点的冲突域是单独的,结点间彼此不冲突。
以太网帧
以太网帧有 6 个字段:
数据: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 表不需要手动配置,只需要让协议自动建立就行。
子网外的地址解析
在相同子网内的 ARP 很好理解,那么当子网中的主机要向子网外发送网络层数据报时,ARP 又是怎么工作的呢?对于主机,每台主机只有一个 IP 地址和一个适配器,对于一台路由器来说,每个接口都有一个 IP 地址,也都有一个 ARP 模块和一个适配器。
当一个子网向另一个子网发送 IP 数据报时,发送主机向适配器传递,此时应该传递什么 MAC 地址呢?明显不是目的主机的 MAC 地址,因为在所在子网中该地址与所有的适配器之间都不匹配,那就只好丢弃了。所以适当的 MAC 地址应该是路由器接口的适配器地址,但是路由器接口的 MAC 地址怎么获取?ARP 嘛!
接下来路由器就需要将数据报发到正确的目的地去,也就是要发到哪个接口去呢?可以查询路由器的转发表,根据转发表送到对应的接口去。接口收到数据包之后,适配器把数据报封装到新的帧中,发送到下一个子网去,下一个子网的 MAC 地址怎么确定?再搞个 ARP 就行了!
捕获和分析以太网帧
实验步骤
- 首先,确保浏览器的缓存为空(清除浏览器缓存),启动 Wireshark 数据包嗅探器。
2. 打开以下 URL “http://gaia.cs.umass.edu/wireshark-labs/HTTP-ethereal-lab-file3.html” 您的浏览器应显示一段长文档。
3. 停止 Wireshark 数据包捕获,找到您向 gaia.cs.umass.edu 的 HTTP GET 消息的数据包编号以及 gaia.cs.umass.edu 相应您的 HTTP 回应。干扰巨大,还是看看现成的包吧。
4. 更改 Wireshark 的“捕获数据包列表”窗口,仅显示有关 IP 以下协议的信息。
5. 选择包含 HTTP GET 消息的以太网帧,在数据包详细信息窗口中展开以太网信息,以太网帧的内容(标题以及有效负载)显示在数据包内容窗口中。
问题解答
根据包含 HTTP GET 消息的以太网帧进行分析:
- 你的电脑 48 位的地址是多少
源地址:AmbitMic_a9:3d:68 (00:d0:59:a9:3d:68)
2. 以太网帧中的 48 位目标地址是什么?这是 gaia.cs.umass.edu 的以太网地址吗?
目的地址: LinksysG_da:af:73 (00:06:25:da:af:73)。这个不是 gaia.cs.umass.edu 的以太网地址,这个应该是出子网的路由器的地址。
3. 以太网帧上层协议 16 进制值是什么?这对应的上层协议是什么?
0x0800,表示上层协议是 IPv4。
4. 从以太帧的开始,一直到“GET”中的 ASCII“G”出现在以太网帧中為止,有多少字节?
有 16 × 3 + 6 = 54 Byte
根据包含 HTTP 响应消息的第一个字节的以太网帧的内容:
由此可见响应消息被分片了。
5. 这个帧中,以太网源地址的值是多少?这是你的计算机的地址,还是 gaia.cs.umass.edu 的地址?拥有这个以太网地址的设备是什么?
源地址:LinksysG_da:af:73 (00:06:25:da:af:73),这个应该是出子网的路由器的地址。
6. 以太网帧中的目的地址是什么?这是您的计算机的以太网地址吗?
目的地址:Destination: AmbitMic_a9:3d:68 (00:d0:59:a9:3d:68),这个是我的计算机的以太网地址。
7. 以太网帧上层协议 16 进制值是什么?这对应的上层协议是什么?
0x0800,表示上层协议是 IPv4。
8. 从以太帧的开始,一直到 “OK” 中的 ASCII“O” 出现在以太网帧中为止,有多少字节?
有 16 × 4 + 4 = 68 Byte
地址解析协议
实验操作
ARP 协议通常在您的计算机上维护 IP 到以太网地址转换对的缓存 .arp 命令(在 MSDOS 和 Linux / Unix 中)用于查看和操作此缓存的内容。 arp 命令用于查看和操作 ARP 缓存内容,而 ARP 协议定义了发送和接收的消息的格式和含义,并定义了对消息传输和接收所采取的操作。
现在查看计算机上 ARP 缓存的内容,没有参数的 Windows arp 命令将显示计算机上 ARP 缓存的内容,运行 ARP 命令。
问题解答
- 每个列值的含义是什么?
按照颜色分别是:网卡、路由 IP 和 MAC 地址、广播地址、组播地址。
抓取 ARP 消息
为了观察您的计算机发送和接收 ARP 消息,我们需要清除 ARP 缓存,否则您的计算机很可能在其缓存中找到所需的 IP-Ethernet 地址转换关系,因此不会发送 ARP消息。
实验操作
- 清除你的 ARP 缓存。
2. 确保浏览器的缓存是空的,启动 Wireshark 捕捉封包。
3. 打开以下 URL “http://gaia.cs.umass.edu/wireshark-labs/HTTP-wireshark-labfile3.html”,你的浏览器应该再次显示长文档。
4. 同样设置不显示 IP 和更高层协议。
问题解答
- 包含 ARP 请求消息的以太网帧中源和目标地址的十六进制值是什么?
目的地址: Broadcast (ff:ff:ff:ff:ff:ff)
源地址: AmbitMic_a9:3d:68 (00:d0:59:a9:3d:68)
11. 以太网帧上层协议 16 进制值是什么?
0x0806,表示上层协议是 ARP。
12. 分析 ARP 请求
a) ARP 操作码字段开始从以太网帧的最开始有多少字节?
16 + 5 = 21 Byte
b)在进行 ARP 请求的以太网帧的 ARP 负载部分中,操作码字段的值是多少?
操作码的值为 1。
c) ARP 消息是否包含发送方的 IP 地址?
ARP 消息包含发送方的 IP 地址。
d) 在 ARP 请求中从哪里看出我们要查询相应 IP 的以太网地址?
13. 找到相应 ARP 请求的而发送 ARP 回复。
a) ARP 操作码字段开始从以太网帧的最开始有多少字节?
16 + 5 = 21 Byte
b) 在进行 ARP 响应的以太网帧的 ARP 负载部分中,操作码字段的值是多少?
操作码的值为 2。
14. 包含 ARP 回复消息的以太网帧中的源地址和目标地址的十六进制值是多少?
目的地址: 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(地址解析协议) 百度百科地址解析协议 维基百科