数据包怎么找路,路由
还记得信是经过中间一个个邮局送到的吧? 可在每个岔口,邮局怎么定「下一步往哪儿送」呢? 没有谁在中央一条条下指令。每个站点自己挑路。这就是路由。
在岔口上挑
信经过了中间的一个个站点。
可一到某个站点,
出去的路不只一条。
旁边的站点常常有好几个。
那下一步交给哪个站点呢?
挑这个,就是路由的开头。
在互联网上,这个站点叫路由器。
下面,自己挑下一个站点。
在旁边的候选站点里点一个,把数据包交过去。(站点 = 路由器 · 点 = 选下一个站点)
一交,数据包就到了旁边的站点。
在那个站点又出现一个岔口。
就这样一站一站交下去,
迟早会到目的地。
可要是随便挑个旁边的站点,
就可能绕到不对的地方打转。
所以每个站点都得有个依据。
看什么来挑,下面就看。
看路由表
每个站点都拿着一张小表。
这就是「路由表」。
表里每一行都这么写着:
「要去那个目的地,就交给这个旁边的站点。」
所以数据包一到,
站点看目的地地址,
在表里找到那一行,
照着写的交给下一个站点。
点目的地那一行,查一查「下一步交给谁」。(表 = 路由表)
看着表,站点就不会迷糊。
不管目的地在哪儿,
找到那一行,下一步就定了。
关键是站点不需要
知道整条路。
只要知道「下一步交给谁」就行。
剩下的,下一个站点又看自己的表接着走。
一张张小表接起来,就成了长长的路。
挑最快的路
去目的地的路不只一条。
有绕的路,也有抄近的路。
那表里写哪条路呢?
当然是最快的那条。
这个我们以前见过。
在点和线上找最短距离那回事,
正是那个找最快的路,
在这儿的路由里照样用。
点这两条路比一比距离。短的那条就是表里写的路。(回收最短路径)
挑出短的路写进表里,
往后去那个目的地的数据包
就自动顺着快的路走。
所以路由做两件事。
一件是找最快的路、建好表,
另一件是数据包来了照表交下去。
前一件就是 algorithms 里学的最短路径,
后一件就是在岔口上挑。
没有中央控制塔
这儿出现了最让人惊讶的一点。
指挥这一切的中央控制塔,没有。
哪儿都没有「攥着整张地图的人」。
每个站点只看自己的表,
自己定下一步。
这种叫分散。
不是中央一处定全部,
而是无数站点分着判断。
点一个站点让它停掉。中央控制的话路就断了,分散的话别的站点会找绕行的路。
就算一个站点停了,路也没断吧?
旁边的站点改了自己的表,
绕到另一条路上去了。
要是中央一座控制塔
在定着这一切,
那座塔一停,全都会停。
因为是分散的,一处死了,
整体还接着活着动着。
小结
把路由收成一行。
数据包一站一站交下去,找到路。
每个站点看路由表,
挑下一步交给谁。
表里写着最快的路。
没有中央控制塔。
是每个站点自己判断的分散系统,
所以一个站点停了,信也照样走绕行的路。
依次点要点来收尾。(在岔口上挑 → 路由表 → 最快的路 → 没中央的分散)
互联网很难断的秘密就在这儿。
它没把一切都交给中央一处。
无数站点各看各的路由表,
顺着快的路把数据包交下去。
哪儿堵了,别的站点就找绕行的路。
一个个小判断聚到一块儿,
成了连接全世界的一条巨大的路。
这就是数据包找路的办法。