当路由器转发数据包时,它会经历一系列步骤,包括接收数据包、路由表查询、以及转发数据包。以下是详细的步骤描述:
1. 接收数据包
-
以太网帧到达端口:当一个以太网帧到达路由器的某个网络接口(端口)时,该端口的网卡接收到这个帧。
-
检查帧完整性:路由器会检查以太网帧的完整性,确保没有发生传输错误(通过帧校验序列(FCS)检查)。
-
提取数据包:如果帧完整性检查通过,路由器从以太网帧中提取出数据包(通常是一个 IP 包)。
2. 路由表查询
-
检查目标 IP 地址:路由器查看 IP 包的目标 IP 地址,并根据这个地址在它的路由表中查找下一跳信息。
-
路由表查询:路由器查找路由表,以确定如何将数据包发送到目标地址。这包括:
- 匹配最长前缀:路由器查找与目标 IP 地址匹配的最长前缀条目。
- 获取下一跳信息:找到匹配的路由条目后,提取下一跳的 IP 地址和出接口信息。
-
ARP 查询(如果需要):如果下一跳是一个特定的 IP 地址,路由器需要将其转换为物理地址(MAC 地址)。如果 ARP 缓存中没有该地址的条目,路由器会发送一个 ARP 请求,等待下一跳设备的 ARP 响应。
3. 转发数据包
-
封装新的以太网帧:根据下一跳的 MAC 地址和路由器出接口的信息,路由器重新封装一个新的以太网帧。这个帧包括:
- 目的 MAC 地址:下一跳设备的 MAC 地址。
- 源 MAC 地址:路由器出接口的 MAC 地址。
- 上层数据:原始的 IP 包。
-
发送以太网帧:路由器通过确定的出接口将新的以太网帧发送出去。
详细示例
假设有以下网络环境:
- 路由器 R,有两个接口:eth0(IP:192.168.1.1,MAC:00:11:22:33:44:55),eth1(IP:192.168.2.1,MAC:00:11:22:33:44:66)。
- PC1 在网络 192.168.1.0/24 上,IP:192.168.1.2,MAC:AA:BB:CC:DD:EE:01。
- PC2 在网络 192.168.2.0/24 上,IP:192.168.2.2,MAC:AA:BB:CC:DD:EE:02。
当 PC1 向 PC2 发送数据包时,具体过程如下:
-
PC1 发送数据包:
- PC1 封装一个以太网帧,源 MAC 地址为 PC1 的 MAC 地址,目的 MAC 地址为路由器 eth0 的 MAC 地址。
- 以太网帧到达路由器 eth0 接口。
-
路由器接收帧:
- 路由器 eth0 接口接收以太网帧,检查 FCS,提取 IP 包。
-
路由器查询路由表:
- 路由器检查 IP 包的目标地址 192.168.2.2。
- 路由器在其路由表中查找匹配的路由条目,发现下一跳是直接连接到 eth1 的 192.168.2.0/24 网络。
-
ARP 查询(如果需要):
- 如果路由器的 ARP 缓存中没有 192.168.2.2 的 MAC 地址,它会发送 ARP 请求,等待 PC2 响应。
- 收到 ARP 响应后,路由器将 192.168.2.2 的 MAC 地址添加到 ARP 缓存中。
-
封装新的以太网帧:
- 路由器封装一个新的以太网帧:
- 目的 MAC 地址为 PC2 的 MAC 地址(AA:BB:CC:DD:EE:02)。
- 源 MAC 地址为路由器 eth1 接口的 MAC 地址(00:11:22:33:44:66)。
- 包含原始的 IP 包。
- 路由器封装一个新的以太网帧:
-
发送以太网帧:
- 路由器通过 eth1 接口将新的以太网帧发送到 192.168.2.0/24 网络。
- PC2 接收到以太网帧,提取 IP 包,并进行处理。
通过上述步骤,路由器可以成功地将数据包从 PC1 转发到 PC2。