假设我连接到 64.34.119.12。网络如何知道将流量发送到哪里?
我知道有很多 IP 地址提供给 ISP,但是互联网如何管理从世界任何地方到正确的目标网络和 IP 地址的流量?
rnx*_*xrx 10
有两种基本情况-
1.) 终端主机/存根网络(即互联网的边缘)——这些实体知道数据包要么在本地交付,要么被发送到默认网关。这种确定是由传输设备的 IP 地址及其子网掩码决定的。
2.) 具有完整视图/无默认值的路由器 - 接收完整路由(通常通过 BGP)的路由器具有公共路由子网的数据库。您的 64.34.119.x 网络可能是更大的汇总路由的一部分。有问题的路由器找到数据包的目的地和这些本地接收的子网之间的最短匹配(即最长的子网掩码)。该路由将具有相应的下一跳 - 必须将数据包发送到的下一个路由器。这个下一跳路由器执行相同的查找和转发,依此类推,直到数据包到达具有本地连接的所述子网的路由器(很可能类似于#1)。
请注意,对发射机和接收机之间的中间网络知之甚少或一无所知。每个路由设备只知道到达给定目的地的下一跳。
每个主机都有一个路由表。它包含子网、网络号和网络掩码以及接口。例如(简化):
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
Run Code Online (Sandbox Code Playgroud)
使用最具体的一种。因此,例如,主机 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)来发现相邻路由器而产生的,通过给每条路由加上一个度量(cost)来找到最有效的路径,这样选择成本最低的最具体的路由让数据包通过。
如果数据包以循环结束,或者遇到死胡同(被路由到无处发送的路由器),数据包将被丢弃,并且有时会向您返回 ICMP 失败消息。
| 归档时间: |
|
| 查看次数: |
6888 次 |
| 最近记录: |