路由器封装数据包
目的:把最基本的数据包被路由器解封装、转发、再封装的过程用动画显示出来。
拓扑:两个主机经一个路由器相连。
步骤:1)H1 ping H2, 得先封装三个报头(link network, protocol) 后才发送。
2) 路由器收到后,把ping解封装、转发、再封装,送往 H2.
3)H2收到ping时,把它解封装, 知道这个ping是针对自己的,就回复echo,把 echo封装好才发送。
4)R1收到echo后,将其转发给H1。H1把echo解封装,知道这个echo是回复自己的,ping成功了 。
初始化:ARP表的MAC地址齐全
这个案例假设H1, H2已经知道彼此的地址。
【注】这个案例一开始假设 H1, H2已经 代理,得到彼此的ARP地址。例,H1的ARP表显示
(11.1.1.2, MAC.R1.1 ("H2")),意思是 H1 所得到的H2的 MAC地址 事实上是R1 的接口E0/1的 MAC地址.
H1 先封装ping报头,然后发送
H1 要ping H2, 得先封装的报头,才能发送。
- 封装协议报头: protocol 设为 ICMP, type 设为 8 (ICMP request)
- 封装网络报头:destination IP 设为10.1.1.2/24 (H2的 IP), source IP 设为 10.1.1.1/24 (H1的 IP).
- 封装Link 报头: destination MAC 设为 MAC.H2, source MAC 设为 MAC.H1.
然后H1发送ping。点击ping包可以查看其报头内容。
【注】 若ARP表没有H2的MAC地址,就不能封装link报头,而导致ping失败。
R1 把Ping解封装、转发、封装
R1 收到Ping 后, 把它解封装、转发、再封装如下:
- 链路报头:比较destination MAC 和自己的 MAC,一样就接受,否则丢弃。
- 网络报头:比较destination IP (11.1.1.2) 和自己的 IP不同,就把ping交给路由引擎。
- R1查看路由表,发现前往11.1.1.2的下一跳接口是E0/2,就把Ping转发到E0/2.
- R1封装链路层报头,把目的MAC地址设为H2的MAC地址。
H2 封装 Echo, 然后发送
H2 要回复Echi 给 H1,得先封装报头
- 封装协议报头: protocol 设为 ICMP, type 设为 0 (ICMP response)
- 封装网络报头:destination IP 设为10.1.1.1/24 (H1的 IP), source IP 设为 10.1.1.2/24 (H2的 IP).
- 封装Link 报头: destination MAC 设为 MAC.H1, source MAC 设为 MAC.H2.
然后H2 发送Echo。
H1 解封装 Echo,Ping成功
R1 收到echo, 把它解封装、转发、再封装,然后从E0/1接口发送出去。
H1 收到Echo, 进行解封装,从链路报头,而网络报头,到协议报头。H1知道这个echo是响应自己的ping.。
Ping.成功了。
FAQ