可以说我连接到64.34.119.12。 networking如何知道在哪里发送stream量?
我知道有一些给ISP的IP地址,但互联网如何pipe理从世界任何地方的stream量到正确的目标networking和IP地址?
有两个基本情况 –
1.)结束主机/末端networking(即互联网的边缘) – 这些实体知道一个数据包是本地交付还是发送到默认网关。 该确定由发送设备的IP地址及其子网掩码确定。
2.)具有完全视图/默认自由的路由器 – 接收完整路由(通常通过BGP)的路由器具有公开路由子网的数据库。 您的64.34.119.xnetworking可能是更大的汇总路由的一部分。 所讨论的路由器发现分组的目的地和这些本地接收的子网之间的最短匹配(即最长的子网掩码)。 该路由将具有相应的下一跳 – 数据包必须发送到的下一个路由器。 这个下一跳路由器执行相同的查找和转发,等等,直到数据包到达与所述子网本地连接的路由器(最有可能像#1)。
请注意,发射机和接收机之间的干涉networking很less或根本不知道。 每个路由设备只知道到达给定目的地的下一跳。
每个主机都有一个路由表。 它包含子网,networking号码,networking掩码和接口。 例如(简体):
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,然后数据包将到达目的地。
这是一个简化,但它基本上是如何工作的。
networking本身并不知道或者确实做任何事情; 主机和路由器做所有的工作;)
在路由器上,路由表通常是通过使用路由协议(如BGP或cisco的EIGRP)来发现相邻路由器,并且通过向每条路由添加度量(成本)来find最有效的path,使得select成本最低的最具体的路由来传递分组。
如果数据包在一个循环中结束,或者到达死胡同(被路由到一个无处发送它的路由器),数据包将被丢弃,并且ICMP失败消息有时会返回给您。
基本上你的数据包被加上源/目标IP地址,然后包裹在第2层帧数据(硬件地址等)中。 如果您的工作站在目标networking的路由表中没有路由(尝试在Windows工作站的cmd提示符中键入route print以查看路由表),则数据包将被发送到工作站上设置的默认网关。 请注意,该帧将使用目标MAC的网关接口的MAC地址。 如果没有设置网关,则在工作站丢弃数据包/帧。
网关(路由器)将收到帧,并看到目的地MAC是MAC,然后读取数据包数据。 它将查看源和目标IP地址,然后在其路由表中查找目标IPnetworking的匹配项。 将有直接连接的路由(路由器直接连接的networking)或远程路由。
如果与本地networking匹配,则路由器将用新的帧数据(源/目的地硬件地址)封装数据包,并将其发送到该networking的相关接口。 路由器将使用发送接口的源MAC和目的IP的目的MAC。 如果路由器不知道目标IP的MAC地址,它将使用ARP来学习它。 目标主机会收到帧,看目的MAC是否是自己的,然后看到包的目的IP是它自己的,并处理剩余的包数据。
如果匹配到远程networking,则路由器将用新的帧数据封装数据包,并将其发送给该networking的相关接口。 路由器将使用发送接口的源MAC和远程路由中定义的下一跳路由器的目的MAC。 匹配的远程networking可以是专门定义的(静态的),dynamic学习的(路由协议,如RIP,OSPF,EIGRP,ISIS),也可以是“默认路由”(本质上是设置路由器的默认网关)。 任何目的地为路由表中的networking的stream量都将被发送到默认路由中定义的目的地IP地址。 在这种情况下,这个过程将继续重复,直到路由器收到具有本地路由到目标IPnetworking的数据包。 此时,使用上面的本地路线的过程。
要注意的一点是,除非使用NAT,否则在整个过程中源/目标IP地址不会改变。 第二层帧数据是每一跳都改变的。
如果你想知道你的数据包在到达目的地之前碰到的路由器,你可以在windows上使用tracert 64.34.119.12 ,在linux上使用traceroute 64.34.119.12 。 虽然,请记住并不是所有的路由器都会回应他们的信息。