IP 数据包跨网络路由是如何运转的
你的数据并不是一整条线缆送过去的——它被切成一个个数据包,途经的每台路由器再决定下一跳。跟着一个数据包走一遍,一次查表接一次查表。
你的数据并不是一整条线缆送过去的——它被切成一个个数据包,途经的每台路由器再决定下一跳。跟着一个数据包走一遍,一次查表接一次查表。
当你在网络上发送数据时,它并不是以一整条连续的数据流传送的,而是被拆成一个个很小的单位,叫做 IP 数据包,由一串路由器逐个转发,直到抵达目的地。
路由,就是每一步都在决定数据包接下来该去哪里。正因如此,一条消息才能穿过许多各不相同、分属不同运营者的网络,而每一层都不需要知道完整的路线。
因为相互独立的数据包比一条长连接灵活得多。不同的包可以走不同的路径、与其他流量共享链路,还能绕开故障。如果某条路径变得不可用,后面的包直接改走另一条即可。
代价是网络只做到尽力而为:路由器转发收到的数据包,却不保证送达或次序。让数据重新变得可靠,是两端的工作。
发送主机把一段数据包进一个 IP 数据包里,并打上源地址与目的地址。从这一刻起,这个数据包就是自成一体的。
数据包到达本地网关路由器 A。它读出目的地址,在路由表里找出匹配得最精确的一条,再把数据包转发往那个下一跳。
路由器 B 做同样的事,然后是路由器 C。每台都只决定下一跳——而不是整段旅程——再把数据包交给离目的地更近的那台路由器。
路由表是决策的核心。它列出各个目的地范围以及对应的下一跳。路由器挑出与数据包地址匹配得最精确的那一条。
最终某台路由器在与目标主机直接相连的网络上找到了它,把数据包投递出去。任何回复都走一遍同样的旅程,只是方向相反。
因为每一跳都各自决定,数据包可能走不同路径、到达时次序颠倒,甚至在途中被丢弃。重组与重传由两端处理,而不是网络。
它是一小块自成一体的数据。每个数据包都带着自己的源地址和目的地址,因此路由器可以独立地转发它,无需知道它属于哪条完整消息。
路由器读出每个数据包上的目的地址,在路由表里查它,然后把数据包转发到能把它带得更接近目的地的那个下一跳。
它是一份把目的地映射到下一跳的规则清单。数据包到达时,路由器找出匹配得最精确的那一条,据此决定数据包接下来去哪里。
不一定。每一跳都是一次独立的决定,所以同一条消息的不同数据包可能走不同的路径,甚至到达时次序颠倒。
没有任何一个中心来决定。每台路由器只决定自己的下一跳,端到端的路径是这些局部选择叠加出来的结果。
路由器只负责转发收到的数据包,并不承诺送达。丢包与补救由两端的协议处理,它们会发现缺失的数据并请求重传。