封装 4 层 ICMP 头
封装 3 层 IPV4 头,源 IP 为 12.1.1.1 目的 IP 为 23.1.1.2
封装 2 层 头,源 MAC 为 aabb.cc00.1000 目的 MAC(也就是网关的 MAC) 不清楚
封装暂停。
PC1 开始发送 ARP 报文,获取网关 MAC,报文如下:
路由器 R2 收到 ARP 请求报文,开始解封装,发现报文中的 Sender IP 是自己,那么进行 ARP 报文回复,并将 PC1 的源 MAC 和源 IP 记录在自己 ARP 缓存表中,报文如下:
PC1 收到 ARP 应答报文,进行解封装,取出报文中缺少的 MAC 地址,添加到搁置的 ICMP 的包中,PC1 顺利的将数据包发送至网关
R2 收到发来的 ICMP 包后,进行解封装,进行到第三层时,发送目的 IP 是自己可达网段中的 IP。因此进行转发,开始封装新的 ICMP 数据包
封包过程如下:
三层不变
封装二层,封装源 MAC:aabb.cc00.2010 ,目的 MAC (PC2 终端 MAC)不清楚
封包暂停
R2 开始发送 ARP 报文,请求 PC2 的 MAC 地址,报文如下:
交换机收到 ARP 请求报文,将 R2 的 e0/1 的 MAC 地址和自己的端口号(e0/0) 记录在 MAC 地址表内,然后根据规则进行泛洪.
PC2 收到 ARP 解析包后,发送 ARP 包中的目的 IP 是自己,因此进行 ARP 应答,并将 ARP 请求中的源 MAC (aa:bb:cc:00:20:10) 和 源 IP(23.1.1.1) 记录在自己的 ARP 缓存表中,应答报文如下:
交换机收到 PC 的 ARP 应答报文后,先将 PC2 的 e0/0 MAC 地址和自己的端口号(e0/1) 记录字 MAC 地址表内,接着发现要去数据包要去的 MAC 地址在自己的 MAC 表内,因此直接转发。
R2 收到 ARP 应答报文,取出 PC2 的 MAC 地址,并添加到搁置的 ICMP 包中,封包成功。接着将 ICMP 包发给 PC2,同时也将 PC2 的 MAC 地址和 IP 记录在自己的 ARP 缓存表中。
PC2 收到 ICMP 包发现,三层包中目的 IP 是自己,接着进行 ICMP 应答,我们再来模拟一下封包的过程:
封装 4 层 ICMP 头
封装 3 层,源 IP:23.1.11 目的 IP:12.1.1.1
封装 2 层,源 MAC:aabb.cc00.4000 目的MAC:网关 MAC(aabb.cc00.2010)(在 ARP 缓存表中取得)
然后进行发包。
交换机收到数据包后,发送目的 MAC 在自己的 MAC 表中有,直接转发给 R2,R2 收到数据包后,解 封 2 层,发现 3 层中要去的网段自己能到达,因此开始封装包:
3 层不变
2 层的源 MAC 为自己的 MAC 地址(e 0/0),目的 MAC 为 aabb.cc00.1000 (从 ARP 缓存表中取得),
报文如下:
最后我们可以发现,数据包在跨网段传输时,网络层的 IP 是固定不变的,但是 MAC 地址是在不断发生变化的。