答案是否定的!
为了解释“否定”这两个字,却需要很多文字。
一条神奇的路由
使用Windows操作系统的读者,可以在CLI命令行里敲入命令“Route print”,会呈现主机的路由表,一定会有这条神奇的路由:
0.0.0.0/0
这条神奇的路由,称之为默认路由、缺省路由。Internet上千万万条路由可以高度抽象成这条神奇路由0.0.0.0/0,所以即使主机上没有Internet路由表,访问Internet却一点问题没有。
如果没有发现这条神奇的路由,访问Internet一定有问题,各位不妨试试看去掉这条神奇的路由,还能访问互联网吗?
各位在互联网上冲浪浪的朋友,要由衷地感谢这条神奇的路由!
Internet上有没有不需要“0.0.0.0/0”的设备?
有,运营商核心路由器PE(Provider Edge),PE路由器通过BGP路由协议,与其它运营商交换全球路由表。
由于PE路由器知晓到达世界任何地方的路由,所以PE路由器是没有0.0.0.0/0的。
下一个问题,运营商的路由器是否都需要运行BGP路由协议?都需要全球路由表?
运营商还有更多的路由器,称之为P(Provider)路由器,并没有运行BGP协议,也没有全球路由表。
为什么P路由器不跑BGP协议?
(1) 跑BGP协议,需要路由器具有强大的CPU计算能力,同时具有超大的内存用于记录、保存全球庞大的路由表,目前只有高端路由器才能胜任该项任务,这是一笔庞大的开支。
(2) 因为没有必要,P路由器只要学习到运营商内部的路由表,再加上0.0.0.0/0路由,通过这条神奇的路由,就可以找到通向Internet的PE路由器,而PE路由器是知道如何世界任何角落的。
(3) 只要P、PE路由器运行IGP路由协议,如OSPF/ISIS,就可以完成(2)的描述。
来验证一下,以上的讲述有没有问题:
PE1接收一个目的IP =8.8.8.8的IP报文,查询路由表需要发给PE2,那PE1如何到达PE2呢?需要先把IP报文发给P1路由器,IP报文到达P1路由器。
现在该P1路由表来决策了,由于P1没有全球路由表,只好使用0.0.0.0/0来路由IP报文了。
很不幸的是,P1的0.0.0.0/0的下一跳是PE1,于是又把IP报文扔给PE1。
看,环路了吧?
如果P1路由器没有0.0.0.0/0,可以避免环路吗?
可以,但是没有8.8.8.8的路由,无法转发该IP报文,同样会被丢掉!
如何能克服以上困难?
最好的方案就是,P1路由器在收到IP报文时,避免查询自己的路由表,而使用标签转发。IP报文携带的标签,指示P1路由器将IP报文发给PE2。
标签哪里来?
通过在PE1、P、PE2上运行LDP(Label DistributionProtocol), 事先为各个PE生成分发标签,这项技术就是MPLS。
通过MPLS技术,可以避免P路由器没有全球路由表而可能造成的路由环路、次优路径转发,同时还可以被用来运载客户公司的私有IP报文,这个就是三层的MPLS VPN技术。