IP 数据包如何知道使用哪个网关?

Sim*_*hid 14 iptables ip-routing

假设同一网络上存在两个网关。如果我理解正确,发件人计算机上的 IP 路由表决定哪些数据包通过哪个网关路由。

IP 路由表包含网关的 IP 地址。

这个网关的IP地址在发送IP数据包时是如何使用的?

kub*_*zyk 17

TL;DR:网关的地址仅存储在包含 TCP/IP 数据包的以太网帧中

服务器->交换机->路由器流量以及服务器->交换机->服务器流量是IP寻址实际上没有发挥任何意义的部分。这是底层协议的世界,最有可能是以太网。所以这是一个运行在 MAC 地址上的世界。

因此,您只需要解决默认网关是 IP 地址的混淆。嗯,它是,有点……向人类展示了什么……但是网关的 IP只需要做一件事,那就是问:谁有 192.168.1.1 在这里?答案是说网关是 MAC 88:99:aa:bb:cc:dd:ee:ff。(这是 ARP 查询/响应,两个世界之间的转换器。)实际使用的是 MAC。数据包在以太网级别进入该 MAC,尽管它在 IP 级别拥有不同的目的地。

因此,通过设置以太网帧的“目标 MAC”字段,将数据包标记为去往选定的网关。如果有多个网关,该字段确定该网络上的哪个网关将获得它。(“框架”是一个底层胶囊,用于保存数据包或数据包的一部分。)

概括:虽然路由表是 IP 协议的核心,但当数据包通过线路时,它们的列说下一跳从未使用 IP 寻址实现。下一跳实际上总是使用以太网、MPLS 或其他底层协议:

$ ip route show
 192.168.98.0/24     via 192.168.99.1 dev eth0
|                   |                         |
|  <- IP world ->   | <- underlying world  -> |
|                   |                         |
Run Code Online (Sandbox Code Playgroud)

  • 我会更进一步说,这是这里唯一真正回答问题的答案。 (3认同)
  • 此外,它不仅适用于默认网关,还适用于路由表中任何条目的“下一跳”地址。 (3认同)
  • 当然,除了使用以太网之外,还有其他第 1/2 层协议。IEEE LAN 协议具有 MAC 地址,但其他协议使用某些内容或不使用其他内容。 (2认同)

Esa*_*nen 6

IP 数据报头只包含源地址和目的地址信息。根据目的地,路由器应该知道下一步将数据包转发到哪里,并且该信息存储在路由表中。

地址或其子网可能有静态路由信息,其余部分使用默认网关。这通常是本地网络的情况:可能有到其他本地网络的静态路由和其他本地网络的默认网关,即 Internet。在若干情况下,默认网关,即路由到0.0.0.0::,活性人会通过它所选择的偏好公制值。

当目的地之间有多条路由时,事情会变得更加复杂,因为在 Internet 级别的 ISP 之间存在路由。路由器之间共享信息的方法有多种:路由信息协议(RIP)、开放最短路径优先(OSPF) 和边界网关协议(BGP)。无论这些信息如何共享,路由表都知道下一跳,而 IP 数据包只知道其最终目的地。