网络的车轮

网络的车轮

 

作者: 北京—小武

邮箱:night_elf1020@163.com

新浪微博:北京-小武

总想有空闲对自己的网络内容进行各汇总,以防止自己老化的脑袋忘记某些东西。其实没有学习到什么东西,只是一些自己的感悟。但是受工作岗位职责和保密的限制,只能说些对底层的认识,所以就是交换机以及由此而扩展的部分内容。至于controller和网络虚拟化,可能是自己知识太有限的原因吧,还是点到为止。

 

我喜欢历史,但是是客观描写的历史,但决不能是被某些人篡改过的,这样的历史不仅反映了一些重大事件的决策过程,更能让后来者以史为鉴,减小重蹈覆辙的概率。但网络长期在外国发展,很多事件无法亲身经历或者阅读立传性的记录,再加上接触范围有限,很多无法也不太可能获得事情发展的本貌,希望将来有机会谁能整理一份相对完整的文章或书籍,让大家能有个清晰的了解。所以从这个角度说,《浪潮之巅》汇总了很多公司的历史,这本书个人觉得值得所有IT人士一读;而《大道至简》的作者从多个项目的历史中总结,详细的阐述了一个项目应走的历史过程;同类型的书籍《人月神话》虽然从一个浩大项目中(虽然失败了)总结了大量的数据和教训,并推导出了数字化表述和规划IT工程的施工进度计算,但这本书的作者没有考虑个人效率不同及中国这种人情关系在工作做起的作用等几点影响吧,所以才有人提问孕妇一个人10个月生一个孩子,那10个孕妇一个月能生一个孩子吗?下面言归正传。

 

我个人认为计算机和通信来两个专业是属于信息相关一体的两个学科,只是在网络四层划分的层次中处于不同的层次——通信主要关心比特位的处理,和具体传输介质打交道比较多,无论是网线和网卡,或者是交换芯片硬件或FPGA,还是无线通信中的3G和LTE,这点我觉得SDNAP群里(群号:279796875)的北京-nothing-cpd(qq号364005032)做的事情比较相关,他是把OPENVSWITCH移植到黑莓上,属于通信人的正经事;而计算机则关心packet级别的通信,以太网还是PPP,无论是TCP还是UDP或者是ICMP等,都是为了传输报文,而无需关心具体用什么硬件转化成什么比特位进行传输,北邮-李程(qq号350959853)所进行的SDN 关于controller方面的研发工作个人认为则属于典型此方面的工作。

 

众所周知,最开始发明计算机的时候,真的是纯粹为了数据计算的需要,慢慢才有了广义的计算——数据处理,当然现在已经发展为对文本,图像,视频的综合快速处理。所以computer被翻译成电脑,我不认为是可口可乐的那种神译,而是非专业人士引入的另类称呼。计算机开始的时候数据处理也基本是单机的,随着其发展出现了需要联机计算的数据,也就是需要网路(分布式计算的鼻祖?),这个应该是网络最最初衷的模型。由于当时是在实验环境,大家的电脑都是可控的安全的,数量比较少,也就自然没有网络安全防御方面的措施;当然从现在来看,在网络中每个客户或者大部分使用者是安全的假设,是非常错误的,甚至和现实是截然相反的,因为现实上无论是主动的攻击者还是被控制的肉鸡机器,都表明每个PC甚至是每个终端都是不安全的,也导致从这样的畸形发展壮大的网络带来后续一些列安全问题,而为了解决这些安全问题使得现有的网络陷入了非常非常大的麻烦之中,也付出了惨重的代价,这些内容以后再讨论。两台设备之间的互连要通过线缆进行通信(当时还没有虚拟机的出现),出现各种网络拓扑比如星形、网状型、树形、总线型等。后来随着设备的增加,连线工作也变得繁杂不可靠而且难以维护;拿网状型的网络来说,原来有N台设备,每增加一台机器(要含N个网卡),就要新增N条网线和N个网卡(其他机器也要增加一块网卡,那个时候网卡即插即用吗?要硬件预留很多网卡插槽?还是换服务器?),有些是技术问题,有些是成本问题。所以HUB就应运而生,对计算机而言,都只有一块网卡,需要网络的计算机全都用一根网线连到一台HUB的一个端口上,给每台计算机分配一个硬件地址称之为MAC地址,这样一台计算机发信息的时候加个MAC头,包含两个MAC地址,自己的MAC和发送此信息所需到达设备的MAC,即SMAC和DMAC;HUB的工作方式就像大家一坐起围着一张桌子开会一样,无论谁说话其他人都听得见,但只有相关话题的人员才会参与回答,其他人虽然听到了都置之不理;这样做带来的问题就是不同话题小组的讨论内容也会被其他小组接收,所以HUB的缺陷是广播泛滥且没有安全性。为了解决这个问题,网路上出现了当初令人兴奋现在令人头疼的技术-vlan隔离,就是在SMAC和DMAC后面再加入16bit的数据-VLAN TAG,包括12bit的vlanid,一比特的cfi(该比特的作用是什么?who能直接回答下?别去搜索,好吧,是表明该报文mac地址是否是标准格式封装,那什么事标准MAC封装格式?),外加3bit的priority用于二层QOS。从当时来看12bit的vlanID,大概有4096个范围足够使用了。这样就导致了新的网络产品的出现交换机,交换机内的报文都要先有个vlan tag,然后当有请求报文转发时先学习smac+vid,然后再根据dmac+vid进行转发,查不到表项默认就向该vlan内的所有端口广播;响应报文回来时,根据原先学习到的表项进行转发回来;这样就完成了vlan的广播域隔离(不能转给其他vlan)和安全组的划分(不同的组通信用不同的vlan); 如果两个vlan间的成员想通信怎么办?起先用trunk技术(这样表述不是很精确,后续再详细讨论),但是随着网络规模的扩大,会导致出现环路、MAC表查找和维护工作复杂度较大等问题,解决环路问题用STP协议,而为了解决大规模网络的可用性提出了IP转发,即在报文中添加IP报文头,有源IP地址和目的IP地址,三层QOS所用字段TOS,三层防环TTL字段,这样主机通信近端用MAC,远端用IP,形成了接入层、汇聚层与核心层等传统的三级层次的网络架构模型。也因此,以前的转发称之为二层转发,MAC+VID称为二层报文头,而IP层的转发称之为三层转发,IP头称为三层报文头。而支持三层路由的网设备称之为路由器,后续出现了大吞吐率的三层交换机也可以进行三层转发,而网络设备之间交换IP转发路由的约定就是我们说的路由协议。这样网络运砖了很长一段时间,起初是运营商(ISP)为一般用户(包括家庭用户和企业用户)提供网络接入,出现了一段稳定器,因为当时用户的内网非常小,所以一般的网络设备都能hold住,但当互联网公司出现并迅速成为大亨大鳄时,发现其租用运营商的服务(主要是数据中心和带宽)成本高而服务也不太理想,便纷纷开始研发自用的数据中心,国外的如google,facebook等,国内的主要是BAT等;这些大亨大鳄凭借雄厚的财力,招揽了大量人才,根据自己的需要,进行了大量的尝试创新和验证,提出了很多新技术;并且随着需求的不断升级,他们发现仅仅是租用空地建房子,买来设备(服务器,网络设备)进行组装成数据中心已经不能满足需要,所以互联网公司开始了对协议栈、服务器和网络设备的自研工作,且有很多是开源或者开硬的,所有这些都无疑极大促进了网络的发展(当然互联网公司还有很多其他领域的贡献)。

底层的进步为上层的应用提供了很强很大的支持,而上层的应用需求是无穷尽的,又反过来对底层提出了更高的要求。拿一个例子来说就是云计算中虚拟机,不同物理机和相同物理机上的虚拟机如何进行通信?通过虚拟机提供的服务在虚拟机迁移时如何保持服务不中断?这就引入了网络虚拟化和大二层的概念。举另一个例子来说,某数据中心有一批服务器和网络设备提供出售火车票的服务,但是众所周知,火车票售票服务基本上都是在节假日流量较大,而其他时间则较为冷淡;能否将这些服务器和网络设备分类哪?即一部分机器长年累月提供售票服务,而两外一部分节假日参与提供售票服务,但是平常被用于科研或提供其他服务?这就出现了一个呼之欲出的名称—SDN。SDN的出现就是针对业务的不同通过软件的实现而提供不同的网络服务,在硬件上个人接触最早的提供SDN的API的是策略路由,即通过对报文的某些字段的匹配指定报文下一跳或其他动作,后来硬件为了实现对不同业务的匹配来实现SDN便于openflow进行了结合,可以说SDN能起到路由协议的作用且属于上层网络应用,openflow是一个转发的方式,属于底层实现,但是SDN完全脱离openflow,其实质是一种网络架构,一种思想,而不是简单的软件+网络。

那到底什么是网络那?网络的定义繁多复杂,每个人有不同的理解和认识,我个人理解网络是不同进程间的一种通信的方式,包括进程(可以属于一个物理或虚拟设备,也可以分别属于不同的物理或虚拟设备)及可能有的连接设备的物理或虚拟的网络设备和线缆。进程间通信的方式有很多种,大多数属于同一个设备之间的通信,而跨越不同的设备进行通信,必须通过网络,当然同一个物理或者虚拟的设备两个进程也可以用网络的方式进行通信。

 

从上面的表述可以看出,报文有很多层次性的东西,先有二层头,然后IP报文是三层头,如果是TCP、UDP或者ICMP报文还有再多一层头,当然如果是MPLS报文封装格式就另一个模板了。这里面体现了网络的的多样性,多种标准,多种格式,可能每种格式有自己特定的应用场景。报文的封装从原始的应用数据到添加一层层的报文头,要增加很多信息,这个增加了传输应用数据的信息的冗余部分,因为对于对端接受者而言这些数据其本身是不需要的,只是为了传输的需要才添加的,这也符合信息论的特性,想获得的更多,保证信息传输的精确,就必须提供更多的信息比特。这些在后续将会详细通过计算来表明封装的影响。

 

但是现在常见的每种格式都是当初很多技术中竞争胜出的,而这种胜出有时候不仅仅是技术的优劣,更重要的是技术标准退出者所占的市场地位决定的;而网络界和其他领域不太相同的一点是,学术界的直接研究内容往往不能直接用于工业界,因为网络很多学术研究是基于纯理论的,而网络是一门实践性很强的领域,倒是很多企业里的技术或标准成为学术界的规范,比如思科的很多技术,再就是七层模型和四层模型。起初标准组织规定了七层网络模型,但是在企业界不太实用,所以企业界一般都用四层模型,相信现在用的最多的也是四层模型,而七层模型存在较多的教科书和面试题中。

路由器和交换机到底有啥区别那?这个问题需要从很多角度考虑,这里复制下本人群里发过的一段话:

1.  三层交换机可以二层转发,也可以三层路由,路由器只能三层路由;

2.  三层交换机用专用芯片,IP转发时吞吐量一般比路由器大;

3.  路由器可以实现报文分段和整合,压缩解压缩、加密解密等功能,NAT等功能,而交换机只能变相支持或部分支持。

4.  现在得交换机多是针对以太网,所以称为以太网交换机,解析其他格式的封装一般需要做特殊配置;而路由器不仅是多种路由域的临界点,还可以对多种格式封装的报文进行解析和封装,比如PPP,PPPoe,SLIP等;

5.  不同的东西价格不同,以前的交换机CPU通常是PPC、ARM和MIPS居多,现在随着硬件价格的下降和性能要求的提示,用X86作为交换机的CPU依然是一种趋势。

 

大家都知道,交换机是一个CPU连接ASIC或FPGA的交换芯片,这种架构下,交换芯片负责高速低延迟的转发报文,CPU负责处理交换机之间的协议交互报文,交换芯片和CPU的通道在交换芯片上的端口称为CPU口。其实交换机上可以看出是每个交换机都有一个控制端,然后为了实现多个交换机的协同工作,交换机CPU作为控制端进行交互信息,显示普通的盒式机,即一个CPU控制两个交换芯片;后来发展成机架,CPU称为主控卡,来控制几个甚至更多的交换芯片;为了让主控卡工作更稳定,往往有备用主控卡,就是一个机架上有两个或多个主控卡,当master主控卡异常或者挂掉的时候,备用主控卡可以立即起作用,保证整个机架的使用正常。为了在盒式交换机上实现机架的这种组合效应,增加总带宽及均衡和管理能力,提出了对盒式交换机的堆叠;有点类似于OSPF的广播网络类型,需要选举主交换机的一个流程,并且不同厂商的交换机往往是无法一起堆叠的。

对于Openflow交换机的架构来说,可以是堆叠或者机架设备的进一步升级,将更大范围的网络设备的控制层集中到一个设备上;这样做的好处就是可以对此范围的所有网络设备进行统一控制和集中管理,对于网络带宽资源的进行合理的调度和分配,比如QOS中综合服务模型的RSVP协议,在openflow交换机这种架构下就相对容易实现;但是

对controller设备的安全性和稳定性要求就会有所提高,因为一旦控制点出现问题,整个网络就会异常,甚至可能不可用或者崩溃,这也是openflow 标准1.2版本提出需要有multiple controller 的原因。

无论openflow是否能最终以解决传统网络的问题得以长足发展,还是只是一种中间技术形态很快被其他技术所代替,这些标准的确立和采用,不仅仅是技术的创新或者更有效为依据,而在很大程度上更取决于各个利益相关者的竞争,标准的最终形态是一个博弈过程后各个厂家瓜分市场的讨价还价的结果。最终SDN将发展成何种形态现在无法得知,但是经过必然是一个血雨腥风的过程,有可能网络市场被重新洗牌,一些芯片商、设备商和云计算公司发展壮大,当然还有更多的被淘汰。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值