首页 > 代码库 > 网络虚拟化(SDN,NFV..)和企业骨干网的演化

网络虚拟化(SDN,NFV..)和企业骨干网的演化

本来昨天就规划了今天的这篇文章,无奈昨天中午自己喝了将近一瓶的52度二锅头...晚上想着今天怎么着也完了,要颓废难受一天了...没想到早上竟然一点都不难受了,于是就写下了本文。正文之前,还是做个广告,喝酒就要喝高度酒,醉得快,醒的也快。     

BGP和IGP的路由黑洞问题

在描述企业骨干网(大型企业的内网)之前,我得先来解释一下互联网路由的层次问题,理解了这个,你才能理解企业内网的构建规则,我还是以问题开始吧。
        路由本身是层次化的,但是路由的查询则是平坦的。比如下图的情形:


技术分享


现在看上图中红色字描述的问题,显然B并不知道10.1.2.0/24的任何信息。虽然说在整体上,AS200知道10.1.2.0/24的下一跳为172.16.1.1,但是由于路由查找是平坦的(系统不会将查询请求发送到一个叫做“AS路由器”的地方来层次化查询),这就要求AS200中每一个路由器都有10.1.2.0/24这条路由,显然的解决方案是有的,那就是在边界路由器上把从BGP学到的路由全部注入到IGP,比如OSPF中。然而这会让路由表完全平坦化!这会丢失BGP路由属性信息,哪些路由是从BGP学习到的,还是可以区分的,系统路由表将会大大膨胀!属性的丢失是比较严重的,为此将BGP注入到IGP不是一个好办法!
        那么还有什么办法呢?很简单,那就是建立Full mesh iBGP,即所有路由器之间全部建立iBGP连接,这样在每一个路由器均会保存所有的两类路由项,一类是IGP路由项,另一类是BGP路由项,两类路由项分别由IGP进程和BGP进程分别独立维护,不会相互影响,这就解决了路由黑洞问题。
         当然,上面的讨论是简化的,没有考虑反射器等机制...介绍BGP和IGP不是本文的目的,本文是想介绍数据中心以及互联网公司骨干网的。

互联网企业骨干网的演化

不管是阿里还是腾讯,或者其它大型企业,一开始创业的时候,其网络大概就是这个样子:


技术分享


但是总有一天,这些公司会产生自己的大量的内容和数据,于是从一开始租用服务器,到最后自建IDC机房,最终这些大型互联网企业会拥有多个IDC,其实不光是互联网企业,传统的制造业企业,跨国银行等也是类似的网络拓扑布局,我本人在2013年左右一直跟这种跨国银行打交道,而目前在大型互联网企业就职,也内窥了好多的内网拓扑,但是本着原则,我是不可能公开这些细节的,所以我只能简而化之。
        如果企业拥有了多个IDC或者其分公司分布在多个物理区域,将这个分散的地点连接起来就是一个迫切的需求。问题是采用什么方式连接呢?可以是物理的连接,那么这意味着企业要挖沟布光缆,目前中国三大运营商(曾经的邮电部小弟)均有这个能力和资质来完成这件事,但是对于大多数企业而言,由于通信资源属于国家级战略资源,是不允许自己挖沟布线的,不过好像听说山西煤老板要自建海底光缆...还好不是在国土上自建...不过也不是很绝对,如果一家企业财大气粗到一定地步,一切皆有可能的。
如果不能自己挖沟布线,那么咋办?其实三大运营商已经帮你搞好了,你只需要租用或者购买他们部署的光密集波分复用(DWDM)系统即可,简单快捷,用钱能解决的事决不找关系,这是成功商人的原则。
        好了,现在搞定了不同IDC,分公司的互联问题,那么一个大型企业的网络便会变成下面的样子:


技术分享


有点复杂,不过不要紧,只要你知道什么是IGP,什么是BGP,应该是很好理解的。
        这就是企业骨干网的框架。这种企业骨干网在国内是没有对外运营权限的,也就是说,它只是一个大的数据库,而不允许终端用户接入穿越,即不允许用户直接接入这个骨干网,然后依靠它的路由系统去访问别的资源,说白了就是你不能跟三大运营商抢生意。所以说这些企业内网基本上没有复杂的接入层,然而大型企业需要大量的数据调度,特别是提供CDN服务的企业,所以说它的汇聚层和核心层就必须非常强大!
        现在简单说下为什么要将一个网络划分为汇聚层和核心层,其实很简单,原则就是能本地交换的尽量本地交换,迫不得已再跨区。以上的企业网拓扑是一个平坦层面上的拓扑,按照这个层次关系,企业网的拓扑可以重新画如下:


技术分享


现在简化了,不是吗?

新旧两代内部网络的构建

曾经,如果跨区域的分公司要二层穿越或者三层穿越,那么就要把整个公网云看作一个路由器,典型的技术就是通过GRE等tunnel技术来封装数据包,隧道模式的VPN就是这么个道理,只是加上了安全层面的东西。如下图所示:


技术分享


我们可以看到,作为隧道终结点的路由器设备要完成的工作特别繁重!这种设备其实把更多的功耗消耗在了隧道封装而非路由。随着IDC越来越猛,服务器的增多,流量的增加,这种隧道终结点越来越不堪重负,所以按照虚拟化的思想,NFV就被提出并派上了用场。
        总的来讲就是,既然数据到了隧道终结点要被各种封装,那为何数据不能在服务器内部就完成封装呢?实现的思路很简单,其实就是把专门的硬件设备所要完成的功能用软件的方式实现在服务器内部。在虚拟化的时代,一台服务器再也不是以往看到的一台机器了,每一台服务器其实只是个黑盒子,里面可能承载了一个网络,所以说虚拟交换机的概念就被提出并付诸实施了。如果想形象化理解,那么考虑一下我们经常使用的VMWare,其实VMWare内部就有一个虚拟交换机,具体我就不多说了。
        依托虚拟化概念实现了NFV的IDC,大大减少了以往传统设备的负载,使得构建企业大二层变得非常简单:


技术分享


除了NFV,我想说下SDN的意义。
        注意本文的第三幅图,我解释说OSPF作为主导的IGP协议来完成最优路径规划,但是事实上这种规划的效果非常差!有时候次优路径反而是最优的。这就是SDN全局控制的深意,因为SDN控制器知道全网当前的快照。我所了解到的是Google以及国内的腾讯,阿里等公司已经在自己的骨干上使能了SDN,效果如何呢?Google作为发起方和第一人,肯定不错,国内的所谓大型互联网企业的技术,我只能呵呵,不管怎样,概念是抢到了,无措也无错。

说点胡话做点广告

1.我用OpenVPN构建过并且成功构建过大二层;
2.我曾经自己实现过一个LISP完全绕过了GRE;
3.SDN是否能铺开取决于左翼和右翼之间的对抗;
4.TCP/IP模型正在被颠覆,这个我是认同的。
...

突然又翻出了几年前的网络拓扑图,我在想,干嘛那么在乎TCP啊!后来我明白了答案,对于大多数程序员而言,数据离开了电脑,自己就再也控制不住了,所以不懂网管的程序员脑子里只有TCP而无IP。网管意味着什么?其实网管也不是清闲的群体,网管也要会C语言,也要会Python,也要会Java,网管要开发各种工具监控网络中的动态,网管非常忙...最关键的一点,网管可以拔网线,可以对交换机浇水,面对此状,程序员又能怎样呢?难道用加班的方式感动网管把网线插上吗?
        我不懂编程,我不懂网络,我不是程序员,我不是网管...

网络虚拟化(SDN,NFV..)和企业骨干网的演化