Skip to main content

 路由器设置 > 新闻资讯 >

网络处理中TLV形式的不固定格式匹配

2014-03-09 00:17 浏览:
假设如果已经实现了控制平面和数据转发平面的分离,即SDN,那么网络协议就被弱化了!为何如此放狂言?还得从历史说起!
如果上面的假设不成立,那么如何实现独立的控制平面和独立的数据平面,对于控制平面,简单,软件定义一切,对于数据平面呢?很难!这得从软件硬件的边界说起!

首先要指出的一点是,近期思考的一些东西没有考虑兼容性与成本,很多都是推倒重来的想法,步子大了一点,也挺蛋疼,所以不要拿现在即有的理论来框这些想法。

为何会有协议?想过吗?协议天生带有分布性与第三方可公证性,是彼此平等但陌生的你和我之间达成的共识。如果你和我非常熟悉就不需要协议,代之以惯例或曰不成文规定,如果你和我之间不平等,也不需要协议,代之以命令或服从。在考虑网络协议之前首先看下中国和欧洲的协议精神。

中国人长期固定于一块土地,安土重迁,人口流动性比较若,同一区域的人之间彼此都很熟悉,同一家庭内实行父权家长制,不符合产生协议的两大要素。看看西欧,罗马帝国末期以来,民族迁徙,中世纪的教会,王权,贵族,城市四方角力导致人口流动频繁(实际上,古希腊海洋性的特征也遗传了下来起了一定作用),彼此之间平等又陌生,这正是促使协议精神发展的温床。于是你就看到了很多所谓的条约,实际上就是约定的双方必须遵守的共识,显然,条约都是平等的,条约没有不平等的,是的,可能你要支付赔款,但人家不是停战了么?打不过人家是自己的问题,和条约没关系!如果签约双方有一方违约了,好办,他会受到第三方而不是对方的惩罚,比如第三方授权对方拒绝支付工资,比如市场不准入,总之以后人家就不把违约方作为平等角色了,一句话,人家不跟你玩了,你就panic吧!有点扯远了...

从以上我的胡拉乱扯中,你也许隐约知道了什么是协议,三要素,执行双方是陌生关系,执行双方是平等关系,存在一个第三方公证机构起制约监督作用。这就说明协议本身不管从任何方面讲,其执行,其监督都是分布式的,也就是说是自控制的,如果存在一个权威性的中心控制,那么将不再需要协议,一切都以赦令/服从的方式执行。

在网络的设计之初,目的是互联彼此分离的计算机实现通信,自然而然的方案就是各个计算机自己控制如何通信,当然,在阿帕网设计的同时,也有人提到过一个集中控制的结构,但是由于当时联网的中心是计算机而不是网络本身,所以添加额外的控制器无疑增加了复杂性。这种集中控制的策略过于早熟,在整个产业还不发达的时候,无疑是不可能实现的,那个时候,计算机技术不发达,芯片技术不发达,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协议会弱化,但是决不会消失。你说呢?