说的网络分层模型,想必现在但凡有点网络常识的学生都应该知道。多年来通信专业的教育给我留下的最深刻的烙印就是我可以对ISO提出的OSI七层模型倒背如流:从底层到上层依次是物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。当然,正着也可以背下来:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。大家看,多么的顺畅。
玩笑开过,书归正文。网络分层的思想是一个非常伟大的思想,可以说这是对通信这个过程的完美总结。人类自从开始有了烽火狼烟、驿路快骑其实就在不自觉的实践分层模型。而无论是OSI七层模型,还是后来TCP/IP的五层(四层)模型,其思想都是把网络通信的过程划分为不同的阶段,每个阶段在有一个对应的“操作”。而“现代通信技术”只是把这些操作“电子化”和“计算机化”而已。
分层的模型中有两个基本的概念:“对等”和“服务”。所谓“对等”的概念是指一个通信实体中的某一层可以认为是和另外一个实体中的“对等”层在进行交互。比如,A机器的传输层是在和B机器的传输层交互。如果还不理解这一点可以把TCP协议的“三次握手”再拿出来复习复习。而“服务”则是同一个实体内部不同层之间的交互过程,下层通过为上层提供“服务”来让上层获得一种“能力”,而上层基于下层提供的服务来完成本层的操作,进而为更上一层提供“服务”。
在我读本科那会,由于互联网方兴未艾,学校在专业设置上有意无意增加了很多“网络”方面的课程。虽然我的本科专业叫“通信工程”,但学了很多名字带网络二字的课程。有什么计算机通信网、局域网与城域网、宽带通信网、移动通信技术与网络、接入网技术、网络系统工程之类的。如果加上不带网络而实际上就是在讲网络的什么交换原理、TCP/IP协议等,我上过的“网络”相关的课程估计有接近10门。然而,这些课程的内容和质量……说实话,乏善可陈。大部分课程热衷于讲解技术细节,而没有把网络架构、交换方式、分层设计思想这些真正的讲清楚。上面我谈到的“对等”和“服务”的理解以及分层的意义,还是上研究生之后做了一个基于单片机的多路数据采集系统给搞明白了。当年学完了这些课我就一个念头,最好这辈子别再碰这些鬼玩意,做做集成电路设计和信号处理多好。
所以读研究生的时候我选择了一个搞通信集成电路的实验室,研究生期间做的课题也是尽量和网络没有关系。然而人生的际遇就是这样飘忽不定,机缘巧合之下我又开始搞片上网络了。而且这还成为了我这些年来的主要研究方向。这些课程对我后面的研究产生了有利和有害两方面的影响。有利的影响在于多门课程反复熏陶构建出来的对于网络的“感觉”,不利的影响在于由于当年学习时候理解程度比较浅(总不能说是老师教学水平不行吧……)导致很多概念模糊不清甚至是错的。2016年我还没有转到微电子来之前参加了通信学院的一次研究生复试面试,当有学生回答网络层的作用就是把数据封装好了给数据链路层,数据链路层的作用就是把数据封装好了给物理层并且其他同学(当时是群面)以后我就觉得至少到了2016网络与交换技术的教与学的问题依然很大。
上面扯了两段并不是为了凑字数,而是为了说明对于大部分人甚至就是学习通信/网络相关专业的人来说,对于网络和交换技术的掌握也是很成问题的。而很多大部分集成电路设计方向的从业者并没有接受过比较完整和全面的网络与交换技术方面的学习,甚至连一门专门的课程都没有。只是在学习微机原理这类课程的时候在讲到总线这部分的内容时接触到了一点点和传输有关的知识,并且还不是以通信/网络的视角去讲的。因此大部分的从业者对于理解片上网络时存在非常严重的困难的。在这里我们就需要简要的分析一下一个完整的网络中每一层到底需要干什么,但要理解到更加清晰还需要去学习更为详细的网络与交换技术方面的知识。
网络的最底层时物理层,物理层顾名思义就是和物理世界打交道的一层。这一层的主要功能实现信息在“物理世界”的正常传输。其主要的技术原理是利用多种物理现象(声、光、电、磁)来实现信号的发射与接收。在正常通信系统中,一般依靠电和光两种物理现象作为载体,利用多种信号处理的手段把药传输的信息用物理信号表示出来并经过传输后再接受端加以提取和检测。在经典的便是网络中,由于信号就是在正常的互联线上传输,传输的方式就是芯片内部的标准数字信号。因此在经典片上网络中的物理层并不被大家关心。但随着一些“新技术”如片上光传输、传输线调制、TSV/3D集成、片上无线通信的发展,也有很多新的信号传输的方法被运用到片上网络中。这些新的传输方法由于使用到了特定的物理介质,因此必须要做相应的信号处理。但由于片上这个特殊环境是高度集成化切资源有限的,目前很多新技术并解决不了微型化、集成化的问题。而很多片上网络的研究者由于其自身知识体系的限制(通常为做通信、信号处理出身的研究者,上不知计算机体系结构,下不明集成电路原理与微电子器件),对于这些新兴的通信技术的理解往往是错的或者是不全面的。这些人炮制出了大量的“水”文,由于这些文章的审稿人也不熟悉这些新技术的具体实现,所以导致了“水”文被大量发表。这种现象过早的透支了大家对于片上网络中使用新传输技术的热情,最后落得一地鸡毛。
数据链路层则主要负责实现两个通信实体之间的“点对点”传输,在片上网络中就要解决NI到路由器之间,路由器和路由器之间的传输过程。其本质上是对传输链路的利用和管理。这中间就需要涉及到两个实体之间传输过程设计、流量控制方案设计、握手信号设计、数据缓存设计以及控制状态机设计等等。当传输过程对端口、链路、缓存这样的资源产生竞争时,还需要设计仲裁机制和方案,这和传统通信网络中的MAC子层的设计道理时一样的。这中间有大量的设计细节,而这些设计细节却一般又发不出论文(仲裁方案可以勉强发一发),所以很多人经常忽略这一层。但实际上这一层的很多设计细节将严重影响电路性能,而这部分写得比较好的论文只能在JSSC上看到(ISSCC由于篇幅太短无法展开)。
网络层的主要“选路”的问题,也就是数据包从哪条路径传输的问题。在片上网络中具体的事要解决数据包进入路由器以后从哪个输出端口出去的问题。在网络层,片上网络已经足够抽象,具体的内部实现交换、传输的电路细节被很好的屏蔽了。大家把大量的精力都集中到了选路的决策方法上,而这些方法依靠一些简单的算法过程就可以描述。以我在通信学院多年的任教经验,通信专业的本科生是最“迷”路由算法的。因为这个东西很好懂,又没有什么技术细节,通过自己的“想象”就可以“创造”出无数的“路由算法”。虽然这些多半是没有用或者已经被人想过或者就是错的。同样,片上网络的初学者也最喜欢“研究”路由算法。每次有新的学生参加到研究里来,最喜欢和我聊的事就是他们又想出了“新的”路由算法。每次都搞得我不堪其扰,最后只能在每次新人进组时粗暴的明确宣布作为新人不允许研究、讨论和片上网络路由算法有关的问题,不建议阅读和片上网络路由算法有关的文章。到目前为止,片上网络的路由算法发表了很多,毕业了N多博士。堪大用的却太少了。一个基本的X-Y路由,即先让数据包沿着X方向走到目的地的同列再让数据包沿Y方向传输到目的地,在考虑到真实的电路性能和设计复杂度的情况下表现实际上超过大部分的路由算法。
传输层是为了保证信息能够被端到端的正确收发,在这点和数据链路层有点类似。但是传输层是关注数据包从进入网络到离开网络的过程,把整个网络视为一个整体来加以运用。在片上网络中,传输层的功能基本是在NI这个环节完成的。包括了数据格式的转换、流量控制、差错控制等。
需要指出的是,在片上网络中,所有这些网络的功能实际上都是由具体的电路来实现的。而片上网络和通信网络的区别也在于此:片上网络具有“片上”属性。对于用于通信网络的仿真器通常只是对于每一层的功能/过程进行仿真,因此只能算是一种“协议仿真器”。对于片上网络的仿真则是需要有“电路仿真器”的特征才可以。在片上网络设计中我们不但需要抽象的“协议分析”,还需要有具体的“电路设计”。只有把网络中每一层的功能都合理的分配和映射到片上网络的具体功能电路中,才能真正的实现有意义的片上网络。
本文原本计划一口气把网络分层到片上网络具体电路的映射都谈完的,但由于篇幅太长加上笔者正在参加中国研究生“创芯”大赛,因此将这部分内容拆分为两个部分(看情况决定是否继续拆分为3个部分)。
最后上一张Intel公司早年发表的论文“SalihundamP , Jain S , Jacob T , et al. A 2 tb/s 64 mesh network for a single-chip cloud computer with dvfsin 45 nm cmos[J]. IEEE Journal of Solid-State Circuits, 2011, 46(4):757-766.”中的一个路由器架构和流水线抽象的图镇楼。下次开篇就先从这张图谈起。
END
知乎:https://zhuanlan.zhihu.com/p/71775965
推荐阅读
更多内容请关注其实我是老莫的网络书场专栏