流量如何到达互联网上的正确目标 IP 地址?

流量如何到达互联网上的正确目标 IP 地址?

假设我连接到 64.34.119.12。网络如何知道将流量发送到哪里?

我知道 ISP 获得了大量的 IP 地址,但是互联网如何将来自世界各地的流量传送到正确的目标网络和 IP 地址呢?

答案1

有两种基本情况:

1.) 终端主机/存根网络(即互联网边缘) - 这些实体知道数据包是在本地传送还是发送到默认网关。此判断由传输设备的 IP 地址及其子网掩码决定。

2.) 具有完整视图/无默认的路由器 - 接收完整路由(通常通过 BGP)的路由器具有公共路由子网的数据库。您的 64.34.119.x 网络可能是较大汇总路由的一部分。相关路由器会找到数据包目的地与这些本地接收子网之间的最短匹配(即最长子网掩码)。此路由将具有相应的下一跳 - 数据包必须发送到的下一个路由器。此下一跳路由器执行相同的查找和转发,依此类推,直到数据包到达本地连接该子网的路由器(最有可能是 #1)。

请注意,对于发送器和接收器之间的中间网络,我们知之甚少或一无所知。每个路由设备只知道到达给定目的地的下一跳。

答案2

每个主机都有一个路由表。它包含子网(包括网络号、网络掩码和接口)。例如(简化):

0.0.0.0/0     eth0  via 172.16.1.1
172.16.1.0/24 eth0  local
10.0.0.0/8    eth1  local
127.0.0.0/8   lo    local

使用最具体的那个。例如,主机 172.16.1.2 位于 172.16.1.0/24 子网上,因此路由表告诉我们只需将其发送到 eth0 即可。

如果是 10.0.1.2,它将位于 10.0.0.0/8,因此我们会在 eth1 上本地发送它(而不是通过网关)。

如果我们连接到 4.2.2.1,路由表中没有比默认路由 (0.0.0.0/0) 更具体的路由,因此它会通过默认网关 (172.16.1.1) 发送数据包,而默认网关又会使用其路由表将其传递下去(这称为跳跃)。最终,会找到一个具有 4.2.2.1 本地路由的路由器,然后数据包将到达目的地。

这是一种简化,但基本上就是它的工作原理。

网络本身并不知道或实际上做任何事情;主机和路由器完成所有工作;)

在路由器上,路由表通常是通过使用路由协议(比如 BGP,或者 cisco 的 EIGRP)来发现相邻路由器而生成的,通过给每条路由添加度量(成本)来找到最有效的路径,从而选择成本最低的最具体路由来让数据包通过。

如果数据包最终进入循环或遇到死胡同(被路由到无处发送的路由器),则该数据包将被丢弃,并且有时会向您返回 ICMP 故障消息。

答案3

本质上,您的数据包被标记了源/目标 IP 地址,然后被包装在第 2 层帧数据(硬件地址等)中。如果您的工作站的路由表中没有目标网络的路由(尝试route print在 Windows 工作站的 cmd 提示符中输入以查看路由表),则数据包将被发送到工作站上设置的默认网关。请注意,帧将使用网关接口的 MAC 地址作为目标 MAC。如果没有设置网关,数据包/帧将在工作站被丢弃。

网关(路由器)将接收该帧,并查看目标 MAC 是否是其 MAC,然后读取数据包数据。它将查看源 IP 地址和目标 IP 地址,然后在其路由表中查找与目标 IP 网络匹配的路由。将有直接连接的路由(路由器直接连接的网络)或远程路由。

如果与本地网络匹配,路由器将用新的帧数据(源/目标硬件地址)包装数据包,并将其发送到该网络的关联接口。路由器将使用发送接口的源 MAC 和目标 IP 的目标 MAC。如果路由器不知道目标 IP 的 MAC 地址,它将使用 ARP 来学习它。目标主机将接收帧,看到目标 MAC 是它自己的,然后看到数据包目标 IP 是它自己的,并处理其余的数据包数据。

如果与远程网络匹配,路由器将用新的帧数据包装数据包并将其发送到该网络的关联接口。路由器将使用发送接口的源 MAC 和远程路由中定义的下一跳路由器的目标 MAC。匹配的远程网络可以是专门定义的(静态的)、动态学习的(路由协议,如 RIP、OSPF、EIGRP、ISIS),也可以是“默认路由”(本质上是为路由器设置默认网关)。任何发往路由表中网络的流量都将发送到默认路由中定义的目标 IP。在这种情况下,此过程将继续重复,直到路由器收到具有到目标 IP 网络的本地路由的数据包。此时,将使用上述本地路由的过程。

所有这些中要注意的一个关键点是,除非使用 NAT,否则源/目标 IP 地址在整个过程中不会改变。第 2 层帧数据是每次跳跃都会改变的内容。

如果您想要了解数据包在到达目的地之前会遇到哪些路由器,您可以tracert 64.34.119.12在 Windows 或traceroute 64.34.119.12Linux 机器上使用。不过,请记住,并非所有路由器都会响应其信息。

相关内容