在第 3 层 IP 数据包从一台路由器转发到下一台路由器的过程中,除生存时间 (TTL) 字段发生变化外,该 IP 数据包的其它字段均保持不变。当路由器收到一个 IP 数据包时,它会将该数据包的 TTL 减一。如果减一后得到的 TTL 值为零,则路由器将丢弃该数据包。TTL 用于防止 IP 数据包由于路由环路或网络中其它异常状况而在网络上永无休止地传输。
请记住,在数据包从源设备到最终目的设备的传输过程中,第 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 地址。
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 地址。