路由器封装数据包

理解数据包封装与路由转发过程
本文通过动画展示两个主机经路由器相连时,数据包从封装、路由转发到解封装的过程,包括从H1 ping H2开始,路由器R1如何解封装、转发并最终由H2回应echo,以及H1接收echo的整个流程。案例假设H1和H2已知对方地址,且ARP表已包含MAC地址。

 2011062820172530.jpg

简介:封装入门

目的:把最基本的数据包被路由器解封装、转发、再封装的过程用动画显示出来。

拓扑:两个主机经一个路由器相连。

步骤: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

转载于:https://www.cnblogs.com/chenxt/archive/2011/06/28/2092607.html

### 路由器数据包进行解封装的前提条件 在网络通信中,路由器作为连接不同网络的关键设备,在转发数据包的过程中会涉及数据包的解封装操作。这一过程基于特定前提条件完成。 #### 1. 数据包到达目标接口 当数据包进入路由器的一个物理端口时,该端口必须能够识别并接收数据帧。这通常依赖于数据链路层协议(如以太网),并且需要确保接收到的数据帧无误[^2]。如果检测到错误,则可能丢弃数据帧而不继续处理。 #### 2. 验证MAC地址匹配 在数据链路层上,路由器需验证其自身的硬件地址(即MAC地址)是否为目标地址之一。只有当数据帧的目标MAC地址与路由器某个端口上的MAC地址相匹配时,才会进一步解析此数据帧的内容。 #### 3. 提取IP头部信息 一旦确认属于自己的流量后,路由器将剥离掉最外层的数据链路层报头和尾部字段,从而暴露出内部嵌套着更高层次的信息——主要是IPv4或IPv6首部部分[^1]。通过分析这些IP头部参数来决定下一步动作。 #### 4. 查找路由表项 利用提取出来的目的IP地址查找本地存储维护的一张或多张路由表格记录;寻找是否存在精确或者最长前缀匹配条目指向下一跳节点位置以及出口方向等必要细节说明如何把消息传递给最终收件者那里去[^3]。 ```python def router_packet_processing(packet): # 接收数据帧并校验 if not validate_frame_checksum(packet.frame_header, packet.frame_payload): drop_packet() # MAC地址匹配检查 elif packet.destination_mac != ROUTER_MAC_ADDRESS: ignore_packet() else: ip_header = extract_ip_header_from_frame(packet) # IP路由决策 next_hop_info = lookup_routing_table(ip_header.destination_ip) if next_hop_info is None: discard_packet() else: forward_to_next_hop(next_hop_info.interface, reencapsulate_with_new_headers(packet)) ``` 上述代码片段展示了路由器对接收到的数据包执行的主要逻辑流程概览。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值