交换功能是指路由器在一个接口接收数据包并将其从另一个接口转发出去的过程。交换功能的重要责任是将数据包封装成适用于传出数据链路的正确数据帧类型。
对于从一个网络传入,以另一个网络为目的地的数据包,路由器会进行哪些处理?路由器主要执行以下三个步骤:
1. 通过删除第 2 层帧头和帧尾来解封第 3 层数据包。
2. 检查 IP 数据包的目的 IP 地址以便从路由表中选择***路径。
3. 将第 3 层数据包封装成新的第 2 层帧,并将该帧从送出接口转发出去。
在第 3 层 IP 数据包从一台路由器转发到下一台路由器的过程中,除生存时间 (TTL) 字段发生变化外,该 IP 数据包的其它字段均保持不变。当路由器收到一个 IP 数据包时,它会将该数据包的 TTL 减一。如果减一后得到的 TTL 值为零,则路由器将丢弃该数据包。TTL 用于防止 IP 数据包由于路由环路或网络中其它异常状况而在网络上永无休止地传输。
由于 IP 数据包是解封自第 2 层帧并再次封装成新的第 2 层帧,所以数据链路目的地址和源地址将随数据包从一台路由器转发到下一台路由器而不断发生变化。第 2 层数据链路源地址代表出站接口的第 2 层地址。第 2 层目的地址代表下一跳路由器的第 2 层地址。如果下一跳是最终目的设备,则第 2 层目的地址将是该设备的第 2 层地址。
数据包很有可能会被封装成与收到时不同的另一种第 2 层帧。例如,路由器从快速以太网接口上收到封装为以太网帧格式的数据包,然后将其封装成 PPP 帧格式通过串行接口转发出去。
请记住,在数据包从源设备到最终目的设备的传输过程中,第 3 层 IP 地址始终不会发生变化。但是,随着每台路由器不断将数据包解封、然后又重新封装成新数据帧,该数据包的第 2 层数据链路地址在每一跳都会发生变化。
数据包从源到目的地的传输过程
步骤 1:PC1 需要向 PC2 发送一个数据包
PC1 将 IP 数据包封装成以太网帧,并将其目的 MAC 地址设为 R1 FastEthernet 0/0 接口的 MAC 地址。
PC1 是如何确定应该将数据包转发至 R1 而不是直接发往 PC2?这是因为 PC1 发现源 IP 地址和目的 IP 地址位于不同的网络上。
PC1 通过对自己的 IP 地址和子网掩码执行 AND 运算,从而了解自身所在的网络。同样,PC1 也对数据包的目的 IP 地址和自己的子网掩码执行 AND 运算。如果两次运算结果一致,则 PC1 知道目的 IP 地址处于本地网络中,无需将数据包转发到默认网关(路由器)。如果 AND 运算的结果是不同的网络地址,则 PC1 知道目的 IP 地址不在本地网络中,因而需要将数据包转发到默认网关(路由器)。
注:如果数据包目的 IP 地址与 PC1 子网掩码进行 AND 运算后,所得到的结果并非 PC1 计算得出的自己所在的网络地址,该结果也未必就是实际的远程网络地址。在 PC1 看来,只有当掩码和网络地址相同时,目的 IP 地址才属于本地网络。远程网络可能使用不同的掩码。如果目的 IP 地址经过运算后得到的网络地址不同于本地网络地址,则 PC1 无法知道实际的远程网络地址,它只知道该地址不在本地网络上。
PC1 如何确定默认网关(路由器 R1)的 MAC 地址?PC1 会在其 ARP 表中查找默认网关的 IP 地址及其关联的 MAC 地址。
如果该条目不存在于 ARP 表中会发生什么情况?PC1 会发出一个 ARP 请求,然后路由器 R1 作出 ARP 回复。
步骤 2:路由器 R1 收到以太网帧
1. 路由器 R1 检查目的 MAC 地址,在本例中它是接收接口 FastEthernet 0/0 的 MAC 地址。因此,R1 将该帧复制到缓冲区中。
2. R1 看到“以太网类型”字段的值为 0x800,这表示该以太网帧的数据部分包含 IP 数据包。
3. R1 解封以太网帧。
4. 由于数据包的目的 IP 地址与路由器 R1 的所有直连网络均不匹配,R1 将求助于路由表来确定数据包的路由方式。R1 搜索路由表中的条目,看看其中是否存在网络地址和子网掩码的组合能否构成目的 IP 地址所在的网络。在本例中,路由表存在 192.168.4.0/24 网络的路由条目。数据包的目的 IP 地址为 192.168.4.10,这是该网络中的主机 IP 地址。
R1 到 192.168.4.0/24 网络的路由的下一跳 IP 地址为 192.168.2.2,送出接口为 FastEthernet 0/1。这表示 IP 数据包将封装到一个新的以太网帧中,其目的 MAC 地址为下一跳路由器的 IP 地址对应的 MAC 地址。由于送出接口连接的是以太网,R1 必须将下一跳 IP 地址解析为目的 MAC 地址。
5. R1 在其 FastEthernet 0/1 接口的 ARP 缓冲区中查找下一跳 IP 地址 192.168.2.2。如果该条目不在 ARP 缓冲区中,R1 会从 FastEthernet 0/1 接口发出一个 ARP 请求。R2 以 ARP 回复应答。收到 ARP 回复后,R1 便使用 192.168.2.2 条目及相关 MAC 地址更新其 ARP 缓冲区。
6. IP 数据包被封装到新的以太网帧中,并从 R1 的 FastEthernet 0/1 接口发出。
步骤 3:数据包到达路由器 R2
1. 路由器 R2 检查目的 MAC 地址,在本例中它是接收接口 FastEthernet 0/0 的 MAC 地址。因此,R1 将该帧复制到缓冲区中。
2. R2 看到“以太网类型”字段的值为 0x800,这表示该以太网帧的数据部分包含 IP 数据包。
3. R2 解封以太网帧。
4. 由于数据包的目的 IP 地址与路由器 R2 的所有接口地址均不匹配,R2 将查询其路由表来确定数据包的路由方式。R2 使用与 R1 相同的过程在路由表中搜索数据包的目的 IP 地址。
R2 的路由表中有到 192.168.4.0/24 的路由,下一跳 IP 地址为 192.168.3.2 且送出接口为 Serial 0/0/0。因为送出接口不是以太网,所以 R2 不需要将下一跳的 IP 地址解析为目的 MAC 地址。
当接口为点对点串行连接时,R2 将 IP 数据包封装成适合送出接口(HDLC、PPP 等)使用的数据链路帧格式。在此情况下,第 2 层封装为 PPP;因此,数据链路目的地址将设置为广播地址。请记住,串行接口没有 MAC 地址。
5. IP 数据包封装成新的数据链路帧 (PPP),然后通过 serial 0/0/0 送出接口发送出去。
步骤 4:数据包到达 R3
1. R3 接收并将数据链路 PPP 帧复制到缓冲区中。
2. R3 解封数据链路 PPP 帧。
3. R3 在路由表中搜索数据包的目的 IP 地址。路由表的搜索结果显示,该地址所在的网络为 R3 的直连网络。这表示该数据包可以直接发往目的设备,不需要将其发往另一台路由器。
因为送出接口是直连的以太网,所以 R3 需要将数据包的目的 IP 地址解析为目的 MAC 地址。
4. R3 在其 ARP 缓存中搜索数据包的目的 IP 地址 192.168.4.10。如果该条目不在 ARP 缓冲区中,R3 会从 FastEthernet 0/0 接口发出一个 ARP 请求。PC2 用其自身的 MAC 地址回复 ARP 应答。R3 用条目 192.168.4.10 及 ARP 应答中返回的 MAC 更新其 ARP 缓存。
5. IP 数据包被封装到新的数据链路(以太网)帧中,并从 R3 的 FastEthernet 0/0 接口发出。
步骤 5:封装有 IP 数据包的以太网帧到达 PC2
1. PC2 检查目的 MAC 地址,发现该地址与接收接口的 MAC 地址(PC2 的以太网网卡)匹配。因此 PC2 将数据帧的剩余部分复制到缓冲区中。
2. PC2 看到“以太网类型”字段的值为 0x800,这表示该以太网帧的数据部分包含 IP 数据包。
3. PC2 解封以太网帧并将 IP 数据包传递至操作系统的 IP 进程。