网络的可靠性、冗余性自从网络诞生以来就是一个不曾停止过讨论的话题,最近阿里云发布了云骨干网这一产品,引起了业界的广泛讨论,突然觉得在广域网领域有一些事情发生,比如基于阿里云骨干网的SD-WAN的StartUP就是一个不错的想法。说到SD-WAN,感觉其就是在网络可靠性与建设成本之间的Trade off,当然也会有一些灵活性在里面。
作为一个有着原始的分层基因网络,其灵活性远远超出了我们的想象,当然一切事物都是不完美的,有利必有弊。把一件事物从不完美一步一步趋向近乎完美的过程应该是一件有意思的事情,这也许就是网络工作者的意义所在。今天,暂且只讨论网络分层带给我们的好处。
0X00 地沟
首先我们的讨论的网络的负一层:地沟,一般运营商做网络可靠性保护时都要求主备链路不能同沟同缆,这里的同沟就是指的这一层,千万不要小看这一层,这可是党的特权,不是你想挖就能挖的,一般也是最耗时的一层。站在这一层去看可靠性的一般都是土豪,比如我们做城域网或者长传波分的环路保护,在两个节点之间至少要挖两条沟,导致成本直接是Double的。作为普通的用户,在这一层能做的事情也就有限了,甚至可以忽略。
0X01物理层
这里的物理层主要就是光纤了,光纤都是放在地沟里面的,受限于上面地沟这一层,因此用户能做的事情类似。
0X02数据链路层
这里拿以太网举例,从最初HUB的工作原理来讲直接就是广播(当然还有辅助的CSMA/CD),看上去像一个粗人的玩法,但是在特殊的场景也是一种比较有效的方法,比如在电信领域,有些厂家为了满足50ms的倒换时间,也是简单粗暴的直接把数据包发送两份通过不同的路径传送到核心网来保证切换时的低延时,个人认为这也是对广播的一次应用,当然你也可以说这是一种带宽换时间的做法,只要你高兴就好。
还有就是在VR游戏领域,为了获取实时性的低延时,现场摄像头采集的画面信息、各个背包机的位置更新、手柄的信息等都是通过广播来通信的,一方面是有多对一或者一对多的互通需求,另一方面就是通过广播来提高网络的可靠性。当然这里提到应用场景,可能网工觉得这是瞎搞,不符合网络的规则,可是我想说的是谁让业务需求这么奇葩呢,网络本来就是为应用服务的,只能是不管白猫黑猫,能够抓住老鼠的猫就是好猫。
这里说的主要是思路,如果你有这样的业务需求,可以往这个方向去考虑。
0X03网络层
网络主要是IP,这里也是网工的主战场,大部分的网络冗余性都是在这里实现,那些牛X的动态路由协议也在这里施展拳脚。除了路由协议自己实现的主备或者负载的冗余技术,这里简单提几个小的TIPs。比如大家都知道路由是递归查询的,利用递归我们可以解决一些棘手的问题,比如有些厂家的PBR仅支持多个下一跳的负载或者主备,我们可以把下一跳递归到静态路由,通过调用静态路由的特性来实现相关功能(负载或者主备或者BFD检测等)。还有在163类似的骨干网中使用的虚拟下一跳技术,也是使用了路由的递归查询来实现网络冗余。
还有就是上层对下层的复用,比如多个IP网络复用同一个以太网网络,具体到端口就是一个物理端口配置使用多个IP地址,再扩展一下就是同一个以太网段使用不同的IP地址网段来满足特定的需求。
0X04传输层
这里就是”类F5”的天下了,通过前置负载均衡调度来实现应用级别的网络可靠性。当然“类F5”还有其他的功能,举个例子,大家玩Openstack的都知道Neutron模块所实现的Floating IP仅支持IP级别的公私网映射,但是大家都知道IPv4是很珍贵的,特别是在天朝,一般公司很少有几个C以上级别的地址。但是我们可以通过在Horizon配置负载均衡来实现端口级别的映射,只需添加一台Real Server来代替内网主机就可以了,这也算是一个Trade off吧,风险自行评估,各位新老司机量力而行。
当然传输层对网络层的复用应该就是端口级别的复用了,应用比较广泛的就是NAT映射,这个大家应该都玩的比较溜,不再展开。各种OVERLAY的技术也在此应用,大部分都是UDP封装IP或UDP直接封装以太网(VXALN),这应该算是下层对上层的复用?你自己说了算。
0X05应用层
由于本人没玩过编码,这部分还是由码农来帮忙添加一下吧。
这里从网络分层的角度列举了每层可以Hack的技术,可以每层单独使用,也可以组合使用,比如网络层无法解决的问题可以转嫁到传输层或者数据链路层,物理层无法解决的问题也可以转网络层。到我相信还有更多的东西等待大家去挖掘,期待看到更多的分享。