
你可能没有意识到一点,互联网上任意两台计算机要想通信,必须拥有彼此的路由表。你要想Ping 8.8.8.8这台主机,你的计算机必须要有“8.8.8.8”的路由表。
你可能会说不对吧,你的电脑上并没有直接指向“8.8.8.8”的路由表!
是的,不光你的电脑,地球上几乎所有的电脑都没有直接指向“8.8.8.8”的路由表!可是你的电脑一定有一条神奇的路由,它就是“0.0.0.0”!
知道0.0.0.0这条路由的真实含义吗?
它包含地球上所有的路由,其中自然包括8.8.8.8。所以相当于你的电脑上拥有了8.8.8.8的路由。而且这个路由指向通向互联网的上游设备,即运营商。
读者可能会迷惑不解,以上的文字和题主的问题好像并没有什么联系啊。
太有联系了,不光互联网上的计算机之间要有彼此的路由,互联网上的路由器同样也要有彼此的路由,还包括计算机的路由。如果不,你们的计算机又有何德何能彼此通信呢?如果有不同意见者,可以评论区讨论。
既然互联网上的路由器需要同步彼此的路由表,是不是每个路由器都要与其他路由器建立邻居关系,分享彼此的路由表?
无论是理论上,还是真实网络上都没有这种实现,因需要N*(N-1)/2 邻居关系,假设全球路由器有N=100万台,需要多少邻居关系大家一下就可以算出来。这是不可能的实现的任务。
通常的做法是,每个运营商选出几个功能强大的边缘路由器PE。假设电信选出的PE是老王,联通选出的PE代表是老李。它们使用一根光纤直连,老王和老李在一个相同的网段,问老王和老李能通信吗?
当然可以,因为老王和老李网络层是连通状态,对吗?
可是电信里还有其他路由器小王,能和联通的老李通信吗?
不能啊,因为小王和老李没有彼此的路由表啊。
怎么才能让两者通信呢?
好办,只要在老王与老李上运行BGP路由协议,老王把电信内部所有的路由告知老李。老李呢,把联通内部所有的路由都告知老王。是不是就可以完成双向的路由同步,那么电信内部所有的路由器(网段),其中包括老王、小王,都可以与联通的所有路由器(网段)通信,其中包括老李、小李。
互联网由好几百个运营商组成,分享彼此路由的原理,并最终完成互联网路由同步都在上文描述中。如果路由出现了短暂的不同步,用户直观感受就是断网了。
为什么一定要BGP,难道OSPF、ISIS这些路由协议不能替代BGP?
BGP最大的好处是粗线条,什么意思呢?BGP只告知对方自己有小王、小美、小丽…,但是不告知小王、小美、小丽之间藕断丝连、勾肩搭背的暧昧状态。
但是OSPF、ISIS却恰恰相反,它一一告知对方,小王和小美牵小手,小王和小丽还有一腿,小丽和小美还暗恋彼此。。。
正是因为BGP考虑的是宏观视野,兼容并蓄,海纳四方,所以容纳几乎无上限的路由表条目,上限取决于路由器CPU、内存的上限。
OSPF/ISIS着眼微观细节,设计之初为了不让OSPF/ISIS陷于海量计算难难以自拔(影响同步/收敛速度),通常对容纳的路由条目做了最大数目的限制。
综上所述,OSPF/ISIS的使用场合是运营商内部的路由同步,BGP用于运营商之间的路由同步。当前互联网全局路由表的条目接近100万条,对于BGP来说小菜一碟,换OSPF/ISIS试试,压根就容纳不了。
