如果上面的假设不成立,那么如何实现独立的控制平面和独立的数据平面,对于控制平面,简单,软件定义一切,对于数据平面呢?很难!这得从软件硬件的边界说起!
从以上我的胡拉乱扯中,你也许隐约知道了什么是协议,三要素,执行双方是陌生关系,执行双方是平等关系,存在一个第三方公证机构起制约监督作用。这就说明协议本身不管从任何方面讲,其执行,其监督都是分布式的,也就是说是自控制的,如果存在一个权威性的中心控制,那么将不再需要协议,一切都以赦令/服从的方式执行。
在网络的设计之初,目的是互联彼此分离的计算机实现通信,自然而然的方案就是各个计算机自己控制如何通信,当然,在阿帕网设计的同时,也有人提到过一个集中控制的结构,但是由于当时联网的中心是计算机而不是网络本身,所以添加额外的控制器无疑增加了复杂性。这种集中控制的策略过于早熟,在整个产业还不发达的时候,无疑是不可能实现的,那个时候,计算机技术不发达,芯片技术不发达,App几乎没有,机器完全是属于大型组织的,个人PC想都别想,因此网络流量完全在自控制可以解决的范畴,正如在车流量非常少的地方,没有必要建立统一控制管理的高速公路一样。
现在是云和移动的时代,SDN在这个时代启发了君主革命。如果控制器被完美实现,那么既有的分层协议还需要吗?这个提问有些凶,我的回答当然是不再需要!数据不再像以往那样通过IP路由逐跳发往目的地,甚至IP地址也可以退化成一个身份/位置编址系统而不再担任路由功能,如何发送数据全由SDN控制器掌控,因此就需要一系列的机制代替IP路由,策略路由,防火墙,负载均衡器之类的东西,确认“如何发送数据”,此时TLV便是一个比较好的格式,它天生地支持变长且不固定的格式,和TCP/IP分层协议头形成了鲜明的对比。TLV的通用解析逻辑是SDN数据平面的最佳选择。实际上,如果你熟悉Linux的iptables就会明白这一点,Linux系统中,所有的iptables规则在内核内存中的布局实际上就是类似TLV,虽然不是那么严格。我们知道一条iptables规则可用拥有理论上任意多的match,因此它的长度是不固定的,对于每一个match,由于match是自定义的匹配,其长度与格式也不固定,那么其存储就只能用类似TLV的链式存储,即你无法越过某N个规则直接去匹配第N+1之后的规则,同样对于match也一样,任何规则以及任何一个规则任何match的位置都由前一个相同的结构体给出,类似IPv6协议头的“下一个头”这个字段所表示的含义。实现了链式布局以后,如何解析以及如何匹配自定义的match是下一个重要的问题,iptables的方法是每一个match对应一个xt_match结构体去负责,这些结构体动态注册到内核中。通过以上的iptables例子可以看出,这种方式对于SDN如何定义一个流,如何针对一个流执行策略是多么好的一种方式,这正是软件的灵活性所能提供的,任何一个狂热的人不禁疾呼,SDN要成功了,然而却忽略了软件和硬件之间的边界,该边界就是机制和策略之间的边界!硬件实现机制,软件提供策略。可是当我们在高喊“TLV形式的完全通用的转发接口”的时候,我们突然发现,没有任何机制可以抽取出来,即,具体的策略之间没有交集或者很少有交集,然而SDN数据平面的高效率转发需求呼唤必须用硬件实现,这个胡同很难突破!
现有的协议头,一般都是一个固定长度固定格式的头,加上一个可选的变长option,这在解析起来非常容易,解析逻辑的固定化十分容易用硬件直接实现,然而如果用硬件实现TLV解析难度就大了,因为TLV是无格式变长的,没有统一的逻辑。在工程意义上,接口越通用,实现越复杂,这是一个工程学上的真理,不仅仅局限于编程方面。对于成熟的硬件芯片而言,其生成周期要比软件久,一旦成型,修改成本也巨高昂,因此,你根本无法像修改,扩展xt_match那样去修改,扩展芯片,芯片里的代码可以成为firmware,其中的firm前缀说明了一切!
我无意给SDN泼冷水,我只是觉得,不管什么事,最终都是理论派和务实派之间妥协的结果-有可能一个人扮演两个角色,读过历史就会知道,自盘古开天地,一直到我写下这个字的现在,政治,军事,文化,科学,哲学,工程,爱情,仇恨,理想,工作,学习,生活,没有一个不是妥协的结果。因此,最终的SDN没有狂热者说的那么灵活,也许还是在现有的经过改进的芯片上转发数据,当然,硬件ASIC也是要有所改进的,也许是突破,但是绝对突破不到SDN理论家所要求的那般田地;由于上述妥协,TCP/IP协议会弱化,但是决不会消失。你说呢?
















