网络协议是网络上所有设备(网络服务器、计算机及交换机、路由器、防火墙等)之间通信规则的集合,它规定了通信时信息必须采用的格式和这些格式的意义。
现代网络采用分层的体系结构方法,就是将网络按照功能分成一系列的层次,每一层完成一个特定的功能,相邻层中的高层直接使用低层提供的服务来实现本层的功能,同时它又向它的上层提供服务。每一层既建立在它的下层之上,又向它的上一层提供一定的服务,而把如何实现这一服务的细节对上一层加以屏蔽。
网络分层的好处是各层之间相对独立,其功能实现的具体细节对外是不可见的(“透明”),相邻层间的交互通过接口处规定的服务原语(交互时所要交换的一些必要信息)进行,这样每一层的功能易于实现和维护。而当某一层需要改动时,只要不改变它与上、下层的接口规则,其他层次都不受影响,因此具有很大的灵活性。这种思维模式与面向对象的程序设计是一致的,一层就是一个对象,服务实现的细节完全封装在层内,因此,各层之间具有很强的独立性。
国际标准化组织(ISO)提出的开放式系统互联通信(Open System Interconnection,OSI)参考模型将网络系统结构划分为7层,从下到上依次是物理层、数据链路层、网络层、传输层、会话层、表示层和应用层,如图2.1所示。然而实际中,使用的网络协议与这个参考模式都多多少少有些差异,也就是说,这种层次结构并不是严格和必需的,而是视实际需要而定的。例如,主宰互联网的TCP/IP体系就只划分为应用层、传输层、网络层(TCP)和网络接口层(IP),在TCP/IP设计时与具体的物理传输媒体无关,因此在该标准中并没有对最低两层做出规定,这也是TCP/IP协议可以运行于当前几乎所有物理网络之上的原因。
图2.1 开放式系统互联通信参考模型OSI
1.物理层
物理层(Physical Layer)的作用是在物理传输媒体上传输各种数据的比特流,而不管数据的类型和结构如何。这一层除了规定机械、电气、功能、规程等特征外,主要考虑的问题还有以下几点。
(1)传输速率
这里有波特率(每秒传输的码元数)和比特率(每秒传输的二进制位数)之分。如果一个码元只携带一个比特的信息量,则波特率和比特率在数值上相等。
(2)信道容量
信道容量即信道能支持的最大数据传输速率,它由信道的带宽和信噪比决定。
(3)传输媒体
传输媒体也就是传输电信号的物理介质,例如是无线还是有线,是双绞线还是同轴电缆,或是光纤等。
(4)调制/解调
调制/解调就是将一种数据转换成适合在信道上传输的某种电信号形式。例如,把数字信号转换为模拟信号有调幅、调频、调相等方法。数字信号的信道编码方法有单极型脉冲编码和双极型脉冲编码(它们中又有归零码和不归零码之分)以及曼彻斯特编码等。
(5)交换技术
交换技术有三种:电路交换、报文交换和分组交换。
1)电路交换。电路交换要求在通信双方之间建立起一条实际的物理通路,并且在整个通信过程中,这条通路被独占,电话交换系统就是这样。在这种条件下,数据在每个中间环节没有停留。其优点是数据传输可靠、实时效应好;缺点是电路不能共享、资源浪费大,同时电路的建立和撤除时间较长。
2)报文交换。报文交换就是一个报文(长度无限制的数据块)在通过从源站到目的站之间的中间站时采用存储-转发方式(有缓冲区)。这样可以提高线路的利用率,但大报文延迟时间长,出错率高,一般很少采用(这里的报文定义和CAN中不同)。
3)分组交换。分组交换就是将一个大报文分割成一定长度的信息单元(分组),各单元依次编号,以分组为单位进行存储-转发。其优点有线路共享;要求中间环节的缓冲存储区减少,也减少了分组在网络中的延迟时间。由于各分组在网络中可以走不同的路径,这种并行也降低了整个报文的传输时间。分组长度变短,使得出错重发率大为降低(若发现一组出错,重发它所需的时间也就短)。这是目前计算机网络中广泛使用的交换技术。所谓的IP电话,也是以这种方式在计算机网络上传输。
(6)网络拓扑
网络拓扑指网络中节点的互联结构形式,主要有星形、总线型、网型、树形和环形几种。
1)星形拓扑。在星形拓扑中,每个站点通过点-点连接到中央节点,任何两站之间的通信都通过中央节点进行。利用星形拓扑结构的交换方式有电路交换和报文交换,尤以电路交换更为普遍。星形拓扑的一个站点故障只会影响本站,而不会影响到全网,但在这种结构中,通信极大地依赖中央节点,对中央节点的可靠性和容量要求很高;另外,每个站点都要同中央节点连接,耗费大量电缆。
2)总线型拓扑。总线型拓扑采用单一信道作为传输介质,所有站点通过相应硬件接口连接至这个公共信道(总线)上,任何一个站点发送信息,所有其他站点都能接收。因此,总线和后面要提到的树形拓扑的网络称为多点式或广播式。信息也是按组发送,到各达站点后,经过地址识别(滤波),符合的站点将信息复制下来。由于所有节点共享一条公共信道,当多点同时发送信号时,信号会相互碰撞而造成传输失败,这种现象称为冲突。为了避免冲突,每次只能由一个站点发送信号,因此,必须有一种仲裁机制来决定每次由哪个站点使用信道,这是属于数据链路层的任务,总线型网络中通常采用分布式的控制策略,CSMA/CD协议就是常用的规范。总线型拓扑的优点是所需电缆长度短,布线容易;总线仅仅是一个传输信道,没有任何处理功能,从硬件角度看,它属于无源器件,工作可靠性较高,增加和减少站点都很方便。其缺点是系统范围受到限制(由于数据传输速率和传输距离的相互制约关系);总线访问冲突导致的带宽利用率较低;一个站点的故障可能影响整个网络,故障难以定位,故障检测需要在各站点上进行,比较困难。
3)网型拓扑。网型拓扑中,每个站点都有一条或几条链路同其他站点相连。由于站点之间存在多条路径,在传输数据时就可能选择较为空闲线路的路由,因而网络资源可以得到充分利用。同时,网型拓扑也可选择绕开故障点的路由方式,因此单个站点或线路的故障对网络的影响也较小,网络可靠性较高。网型拓扑通常用于广域网中。它的结构复杂、成本较高。
4)树形拓扑。树形拓扑是从总线型拓扑演变而来的,从树根开始,每一个节点下都可以有多个分支。树形拓扑的许多特点与总线拓扑类似,但是它的故障比较容易隔离和检查。
5)环形拓扑。在环形拓扑中,站点和连接站点的点-点链路组成一个闭合环路,每个站点从一条链路上接收数据,然后以同样的速率从另一条链路发送出去,链路大多数是单方向的,即数据沿一个方向在网上环行。环形拓扑也和总线拓扑一样存在冲突问题,必须采用某种机制来决定每个站点在什么时候可以将数据送到环上。环形网络通常也采用分布式控制策略,这里主要包含后面要提到的一种特殊信息帧——“令牌”,拿到“令牌”的节点可以访问网络。环形拓扑的优点是所需介质长度较短;链路都是单方向性的,因而可以采用光纤作为传输介质。其缺点是一个站点的故障会引起全网的故障。
(7)多路复用技术
在通信系统中,传输媒体的传输能力往往是很强的。如果在一条物理信道上只传输一路信号,将是对资源的极大浪费。采用多路复用技术,可以将多路信号组合在一条物理信道上进行传输,到接收端再将各路信号分离开来。
多路复用技术有多种形式,如频分多路复用(FDM)、时分多路复用(TDM)和码分多址(CDMA)等。
1)频分多路复用。频分多路复用就是将信道带宽按频率分割为若干个子信道,采用频谱搬移的策略,每个子信道用来传输一路信号,当信道带宽大于各路信号的总带宽时,信号的频谱在传输过程中不会被改变,在接收端通过一个相应带宽的带通滤波器可将信号完整地恢复出来,有线电视网就是这样。
2)时分多路复用。时分多路复用就是将使用信道的时间分成一个个时间片,按一定规律将这些时间片分配给各路信号,每路信号只能在自己的时间片内独占信道进行传输。当然,各路信号的数据传输率的总和只能小于信道能达到的最大传输率,长途电话系统就是采用这种方式。
3)码分多址(使用扩频技术)。码分多址允许所有站点在同一时间使用整个信道进行数据传输。在CDMA中,每个比特时间又再分成 m 个码片(Chip),每个站点分配一个唯一的 m 比特码系列。当某个站想发送“1”时,就在信道中发送它的码系列;当要发送“0”时,就发送它的码序列的反码。当两个或多个站同时发送时,各路数据在信道中被线性相加。为了从中分离出各路信号,码序列必须具有一些特殊的性质,如果将码序列看成一个向量,那么不同的码序列之间是相互正交的。假设有两个不同的码序列 S 和 T ,用 和 表示各自的码序列的反码,应有下列关系式:
当某个站想要接收站X发送数据时,他首先必须知道X的码序列(设为 S )。假如从信道中收到的信号的和向量为 P ,那么通过计算 S · P 就可提取X发送的数据。这样, S · P =0表示X没有发送数据, S · P =1表示X发送了“1”, S · P =-1表示X发送了“0”。CDMA广泛应用于移动通信系统。
2.数据链路层
在物理线路上,由于噪声干扰、信号衰减、畸变等原因,传输过程中常常出现差错,而物理层只负责透明地传输无结构的原始比特流,不可能进行任何差错控制。因此,当需要在一条线路上传送数据时,除了必须有一条物理线路(链路)外,还必须有一些必要的规程来控制这些数据的传输。把实现这些规程的硬件和软件加到链路上,就构成了数据链路层(Data Link Layer,DLL)。
数据链路层最重要的作用就是通过一系列数据链路层协议,在不可靠的物理链路上实现可靠的数据传输。为此,通常将原始数据分割成一定长度的数据单元(帧),一帧内应包含同步信号(如帧的开始与终止)、差错控制(各类检错码或纠错码,大多数采用检错重发的控制方式)、流量控制(协调发送方和接收方的速率)、控制信息、数据信息、寻址(在信道共享的情况下,保证每一帧都能到达正确的目的站,收方也能知道信息来自何站)等。这里主要介绍帧的结构和差错控制。
(1)组帧与帧同步
在组帧方式中,关键问题是使接收方能够准确地从接收到的比特流中识别出帧的边界并取出帧来,这就是所谓帧同步。这种协议有两大类:一类是面向字符的;另一类是面向比特的。
面向字符的协议在路上所传送的数据都必须由字符集(如ASCII码)中的字符组成,而且在链路上传送的控制信息(包括帧同步)也必须由同一字符集中的字符组成。这个协议的主要缺点是,它只能对数据部分进行差错控制,而对控制部分的差错就无法控制,因此可靠性差,该协议也不易扩展,每增加一项功能就需要设定新的控制字符。
面向比特的协议规程于1974年出现,后来修改为高级数据链路控制(HDLC),它不依赖任何字符编码集,采用比特填充法可以很容易地实现数据的透明传输,且可以传输任意长度的二进制比特串。HDLC采用统一的帧格式来实现数据命令和响应的传输,而且通过改变一帧中控制字段的比特模式来实现各种规定的链路操作功能,非常有利于程序的实现。因此,HDLC被广泛用作数据链路层的控制协议,CAN规范中采用的就类似这个规程,下面简单介绍HDLC的主要内容。
HDLC使用一个特殊的比特模式01111110作为帧的起始与结束标志F。为了防止在传输过程中,帧中其他地方出现与帧标志相同的比特模式,发送方边发送边检查数据,每连续发送5个“1”后,在其后自动插入一个“0”。这样除了帧标志之外,最多只会有5个“1”相连。接收方在收到5个连续的“1”后,将后面紧跟的一个“0”删去,就恢复了原来的数据。这种方法称为比特填充,很容易由硬件实现。采用这种方法组帧,数据传输的基本单位是比特而不是字符,因此可以用来传输任意长度的二进制比特串及任何编码长度的字符,通用性很强。一个HDLC的帧结构如图2.2所示。
图2.2 HDLC的帧结构
在起始和结束标志F之间有:
1)地址字段A:在点-多点线路中,用于指明通信的地址。地址的种类有单地址、组地址、广播地址和无站地址(后面可以看到,这里的地址字段相当于CAN帧中的标识码ID)。
2)控制字段C:用于构成各种命令和响应,以便对链路进行监视和控制。
3)信息字段I:可以是任意的二进制比特串,其长度上限由外FCS字段或站点的缓冲区容量决定(相当于CAN帧中的数据段,其长度最多为8个字节)。
4)帧校验序列字段FCS:使用16位的CRC对两个标志字段之间的内容进行校验,FCS的生成多项式是CRC-CCITT:X 16 +X 12 +X 5 +1。
(2)差错控制
差错控制涉及两个方面的问题:一是如何检测出错误;二是发现错误后,如何纠正错误。要判断一个数据块是否存在错误,发送端必须在数据块中加入一些冗余信息,使数据块中的各比特建立起某种形式的关联,接收端通过验证这种关联是否存在,来判断数据在传输过程中是否出错。在数据块中加入冗余信息的过程称为差错编码。有两种基本的差错编码策略:一种是使码字只具有检错功能,即接收方只能判断数据块有错,但不能确切地知道错误的位置,从而也不能纠错,这种码字称为检错码;另一种是使码字具有一定的纠错功能,即接收方不仅能知道数据块有错,还知道错在什么地方,这时只需将错误位取反即可,这种码字称为纠错码。任何一种检错码或纠错码,其检错或纠错的能力都是有限的,即不能检出所有的错误。一般检错或纠错能力越强,所需冗余信息就越多,编码效率就越低。这里简单介绍几种常见的差错编码。
1)海明码:海明码是由R.Hamming在1950年提出的,是一种可以纠正1bit错误的编码。
2)循环冗余码:在计算机和数据通信领域中使用最广泛的检错码是循环冗余码(Cyclic Redundancy Code,CRC),又称多项式码,其漏检率很低,而且只要用一个简单的电路就可以实现。
3)奇偶校验码:最常见的检错码是最简单的奇偶校验码,只要1bit,但它只能检出奇数个错,漏检率达50%。
4)“校验和”码:这也是常用的检错方式,它是传输的数据块中各字节累加后得到的字节或按字节异或的结果。
(3)信道分配
计算机网络按传输技术可分为“点-点”网和广播网(如总线网、环形网)两大类。在前面“数据链路层”介绍的内容是“点-点”链路协议(两方通信协议),但是在广播网中,所有站点共享一条信道,任意一站点发送的报文能够被所有其他站点收到。可以想象,如果有两个或多个站同时发送数据,则信号在信道中发生碰撞,导致数据发送失败,这种现象被称为冲突。冲突会引起数据传输速率下降,严重的情况下,甚至使通信无法进行下去。因此,在广播网中,需要解决信道共享的技术问题,即如何将单一的信道分配给各个用户。
通信信道又称为介质,网络中采用的传输介质不同或网络拓扑结构不同,所使用的介质访问控制协议就不同。相对而言广域网的介质类型较少,而局域网的介质类型很多。为了不使局域网中的数据链路层过于复杂,将它划分为两个子层。其中一个为介质访问控制子层(Media Access Control Sublayer,MAC),专门解决广播网中信道分配的问题。MAC是数据链路的底层,在“点-点”网中没有这一子层,MAC同局域网的关系密切,因为绝大多数局域网使用的是广播信道。另一个是逻辑链路控制子层(Logical Link Control Sublayer,LLC),它完成通常意义下数据链路层的功能。
信道分配策略可分为静态分配和动态分配,前面讲过的频分复用或时分复用等属于静态分配。在静态分配中,由于各个站点有自己的专用频带或时间片,彼此之间不会产生干扰。当网络站点数目少,且每个站点都有大量数据要发送时,采用静态分配策略不仅控制协议简单,而且传输效率高。
但对于大多数计算机网络来说,站点数多且不固定,同时数据传输具有突发性,如果采用固定分配,既不容易实现,信道利用率也非常低,这时应采用动态分配策略。动态分配又称多点接入或多点访问技术,是指异步时分多路复用,即各站点仅当有数据发送时,才占用信道发送数据。动态分配又有受控访问和随机访问两种。
1)受控访问一般有轮转(轮询)和预约两种策略。轮转是使每个站轮流获得发送的机会,没有数据要发送的站将发送权传给下一站。例如,在环形网络中的“令牌”所起的作用是,在环路中,有一个特殊的帧,叫作令牌或权标(Token),令牌沿环路逐站传播,只有获得令牌的站才有权发送信息;当信息发送完毕后,再将令牌传递给下一个站。而在所谓“一主多从”网络中,采用主机轮流询问各从机的方式。预约是使各站首先声明自己有数据要发送,然后根据预约的顺序依次发送数据。轮转和预约这两种方式都是使发送站首先获得发送权,再发送数据,所以不会出现冲突。当网络负载较重时,采用受控访问可以获得很高的信道利用率。
2)随机访问又称争用,意思就是所有的站点发送前不需要取得发送权,都可以随时发送信息(有数据就发送),发生冲突之后再采取措施解决冲突。随机访问适用于负载较轻的网络,其信道利用率一般不高,但网络延迟时间较短。
解决冲突的争用协议已有多个,一种常用的改进的随机访问协议是带冲突检测的载波监听/多重访问(Carrier Sense Multiple Access with Collision Detection,CSMA/CD),它已成为局域网的标准协议(以太网IEEE 802.3标准)。
以太网采用的CSMA/CD的基本思想是:当一个站要发送数据时,首先监听信道,如果信道忙则等待,同时继续监听直至发现信道空闲;当监听到信道空闲后,立即发送数据,在发送过程中,一旦检测到冲突,就立即停止发送;如果发生冲突,则随机等待一段时间,再重新开始监听。
在CSMA/CD中,当多个站同时发送时产生了冲突,这些站检测到冲突后立即停止发送,于是形成了一个较短的时间片,这种时间片称为竞争时间片。这些站停止发送后,各自随机等待一段时间再监听信道,发现信道空闲又发送数据。当相互竞争的站比较多时,有可能一而再,再而三地发生冲突,结果形成一系列的竞争时间片。经过几轮竞争后,有一个站获得了成功,在此之后,有数据要发送的站又开始了新的竞争。这样,数据传输周期、竞争周期和空闲周期轮流交替,周而复始。
在CSMA/CD算法中有两个重要的问题需要解决:一个是竞争时间片的长度;另一个是检测到冲突后等待多长时间再试。
3.网络层
网络层(Network Layer)向上面的传输层提供面向连接的网络服务和无连接的网络服务(即虚电路服务和数据报服务),根据是否在网络层提供连接服务,分组交换网络可以分为仅在网络层提供连接服务的虚电路(Virtual-Circuit,VC)网络和仅在网络层提供无连接服务的数据报网络(Datagram Network)。所谓“连接”,是指首先在通信双方建立一条虚电路,以后的数据传送都是沿着这条虚电路传送的,在通信结束后,还要把这个“电路”释放掉,这里所谓的虚电路,是指在通信双方之间数据传送的一个固定的路由(“路径”)。无连接是指通信双方的每一组数据都可独立地选择路由(走不同的路线),因此,它不能保证每组数据按顺序交付目的站。
使用虚电路的情况下,每个分组不需要携带完整的目的地,而仅需要有个虚电路号码的标志,因而减少了额外开销。在每个节点机内有一路由表(表内每一个电路号对应一条路径),根据数据组中的虚电路号码查表决定转发哪一个节点,最后就可到达目的地。在使用虚电路的情况下,网络有端到端的差错控制功能,即网络应保证分组按顺序交付,而且不丢失,不重复。
在使用数据报时,每个分组必须携带完整的地址信息,但在采用数据报服务时,每个节点也有一个路由表,它用来根据每个分组所携带的目的地址来决定应沿哪条链路(路径)转发分组。在数据报网络中,无连接的发送方和接收方之间不存在固定的连接(或路径),所以发送的分组和接受的分组次序不一定相同,每个分组被传送的路径也可能不一致。接收方收到分组后要根据相应的协议,对分组重新进行排序,从而生成原始的完整报文,这个任务通常由传输层来完成。如果分组在网络传输的过程中出现了丢失或差错,则数据报网络本身不做处理,可以由通信双方的传输层协议来解决。
网络层除了负责路由选择外,还要进行流量控制。因为网络的资源如路由器缓冲区的容量、线路的数据传输速率等总是有限的,当需求超出资源的可用部分时就会产生拥塞。为了提高资源的利用效率(做到既不使分组因拥塞而丢失,又不使资源过多而浪费),应当采用流量控制,其总目标是在网络中有效动态分配网络资源,它的主要功能是:①防止网络因过载而引起吞吐量下降和时延增加;②避免死锁;③在互相竞争的各用户之间公平地分配资源。
网络层路由的核心是寻址,如公用电话网,一个全球网络层寻址标准是互联系统中大家都必须遵守的一个标准。地址编码方法有两大类:一类是非等级地址;另一类是分级地址,非等级地址空间的特点是每个地址的编号都是平等的且彼此无关,这在全球范围内实际是不可行的。因为这需要一个全球系统的管理机构,同时地址映射表要占用很大空间。
分级的地址编码是采用树形结构,将全球的地址划分为若干子域,子域下又划分更小的子域,就像公用电话号码的划分(国家号、区号、局号),TCP/IP协议中IP地址的分配就是这个方式。这样,每一个地方子域只管理自己直属的那些子域的编号,因而使地址映射表和路由表的编制大为简化,一个网络也只负责自己网内主机的编号,其他网络主机的编号与本网络无关,这就要涉及标识符(地址码)的过滤、子网掩码等概念。
网络层涉及的是将源端发出的分组经各种途径送到目的端,从源端到目的端可能经过许多中间节点。这个功能与数据链路层形成鲜明的对比,数据链路层只负责将数据帧从导线的一端(节)点送到其另一端(节)点。因此,网络层是处理端到端数据传输的最底层。网络的底下一层——数据链路层的主要作用是在互连同一种数据链路的节点之间进行包传递,而一旦跨越多种数据链路,就需要借助网络层。网络层可以跨越不同的数据链路,即使是在不同的数据链路上也能实现两端节点之间的数据包传输。
为了实现网络层的目标,网络层必须知道通信子网的拓扑结构(即所有路由器的位置),并选择通过子网的合适路径。选择路径时要注意,不要使一些通信线路超负荷工作,而另一些通信线路却处于空闲状态。当源端与目的端不处于同一网络中时,应由网络层来处理这些差异,并解决由此而带来的问题。
网络层在其与传输层接口上为传输层提供服务,这一接口相当重要,因为它往往是通信载体与用户的接口,也就是说,它是通信子网的边界。载体网络通常规定了从物理层直到网络层的各种协议和接口,它的工作是传输由其用户提供的分组。
如上所述,网络层的主要功能是将分组从源端机器经选定的路由送到目的端机器。在大多数通信子网中,分组的整个旅途需经过多次转发,路由选择算法及其使用的数据结构是网络层设计的一个主要任务。
IP(IPv4、IPv6)相当于OSI参考模型中的第3层——网络层。网络层的主要作用是“实现终端节点之间的通信”,这种终端节点之间的通信也叫作“点对点通信”,IP大致分为三大作用模块:IP寻址、路由(最终节点为止的转发)以及IP分包与组包。
在计算机通信中,为了识别通信对端,必须要有一个类似于地址的识别码进行标识。在数据链路中的MAC地址正是用来标识同一个链路中不同计算机的一种识别码,作为网络层的IP,也有这种地址信息,一般叫作IP地址。IP地址用于在“连接到网络中的所有主机中识别出进行通信的目标地址”,因此,在TCP/IP通信中所有主机或路由器必须设定自己的IP地址,不论一台主机与哪种数据链路连接,其IP地址的形式都保持不变。
IP地址由网络和主机两部分标识组成,网络标识在数据链路的每个段配置不同的值,网络标识必须保证相互连接的每个段的地址不相重复,而相同段内相连的主机必须有相同的网络地址,IP地址的“主机标识”则不允许在同一个网段内重复出现。由此,可以通过设置网络地址和主机地址,在相互连接的整个网络中保证每台主机的IP地址都不会相互重叠,即IP地址具有了唯一性。
IP包被转发到途中某个路由器时,正是利用目标IP地址的网络标识进行路由,因为即使不看主机标识,只要一见到网络标识就能判断出是否为该网段内的主机。
发送数据包时所使用的地址是网络层的地址,即IP地址。然而仅仅有IP地址还不足以实现将数据包发送到对端目标地址,在数据发送过程中还需要类似于“指明路由器或主机”的信息,以便真正发往目标地址,保存这种信息的就是路由控制表。该路由控制表的形成方式有两种:一种是管理员手动设置;另一种是路由器与其他路由器相互交换信息时自动刷新。前者也叫作静态路由控制,而后者叫作动态路由控制。IP协议始终认为路由表是正确的。然而,IP本身并没有定义制作路由控制表的协议,即IP协议没有制作路由控制表的机制。该表由一个叫作“路由协议”的协议制作而成。
IP地址的网络地址部分用于进行路由控制,路由控制表中记录着网络地址与下一步应该发送至路由器的地址。在发送IP包时,首先要确定IP包首部中的目标地址,再从路由控制表中找到与该地址具有相同网络地址的记录,根据该记录将IP包转发给相应的下一个路由器。如果路由控制表中存在多条相同网络地址的记录,就选择一个最为吻合的网络地址。
IPv6(IP version 6)是为了根本解决IPv4地址耗尽的问题而被标准化的网际协议。IPv4的地址长度为4个8位字节,即32bit,而IPv6的地址长度则是原来的4倍,即128bit,一般写成8个16位字节。
4.传输层
在OSI参考模型中,物理层、数据链路层和网络层是面向网络通信的层次;会话层、表示层和应用层是面向信息处理的层次;而传输层(Transport Layer)位于低三层和高三层之间,无论从其所处的位置还是所起的作用来看,它都是整个协议层次的核心。传输层的任务是为高层从源端机到目的机提供可靠、经济的数据传输服务,而与具体网络无关。为了保证数据传输的可靠性,传输层上必须实现差错控制、流量控制等功能;为了向用户提供经济有效的服务,传输层还提供多路复用和分流的功能。
(1)传输服务
传输层的最终目标是向其用户(一般是指应用层的进程)提供有效、可靠且价格合理的服务,为了达到这一目标,传输层利用了网络层所提供的服务,传输层中完成这一工作的硬件和(或)软件称为传输实体(Transport Entity)。传输实体可能在操作系统内核中,或在一个单独的用户进程内,也可能包含在网络应用的程序库中,或是位于网络接口卡上。
正如存在面向连接的和无连接的两种类型的网络服务一样,传输服务也有相应的两种类型。面向连接的传输服务在很多方面类似于面向连接的网络服务,二者的连接都包括3个阶段,即建立连接、数据传输和释放连接,两者的寻址和流量控制方式也类似。无连接的传输服务与无连接的网络服务也很类似。
既然传输服务与网络层服务如此类似,那为什么还要将它区分为不同的两层呢?因为两者的定位完全不一样。网络层是通信子网的一部分,并且一般是由电信公司来提供服务的(至少广域网是如此),网络层提供的面向连接的服务可能不可靠,如可能频繁地丢失分组、路由器可能不断发生冲突,则会导致分组严重延迟。站在用户角度,无法对子网加以控制来解决网络层服务质量低劣的问题,既不可能通过换用更好的路由器,也不可能增强数据链路层的纠错能力,唯一可行的方法是在网络层上再增加一层以改善服务质量,比如当网络连接中断或网络复位后,两端的传输层可以通过建立起新的网络连接,并在确认了传输中断的位置后,继续被中断了的数据传输,故而传输服务比网络服务更可靠。
因此,传输层的存在使传输服务会远比其低层的网络服务更可靠,分组丢失、数据残缺均会被传输层检测到并采取相应的补救措施。另外,传输服务源语的设计可以独立于网络服务源语,后者随网络不同会有很大差异(如无连接的局域网服务可能与面向连接的广域网服务大相径庭)。传输层起着将子网的技术、设计和各种缺陷与上层相隔离的关键作用。
因此,很多人将OSI的7层模型从下向上划分为两部分:1~4层为一部分;5~7层为另一部分。下面4层可以看作传输服务提供者(Transport Service Provider),上面3层是传输服务用户(Transport Service User)。这一划分对层次设计影响巨大,并且将传输层置于关键的位置,因为传输层为服务提供者和用户之间进行可靠的数据传输服务架起了一座桥梁。
(2)传输协议的要素
传输服务是通过建立连接的两个传输实体之间所用的传输协议来实现的,在某些方面,传输协议类似前面讨论过的数据链路层协议,二者都必须解决差错控制、分组顺序、流量控制及其他问题。
但二者之间也存在着显著的差异,这些差异主要是因为两个协议所运行的环境不同所造成的。在数据链路层,两个节点通过物理通道直接通信,而在传输层,两个物理通道由整个子网所取代,这一差异对协议产生了很多重要的影响。首先,在数据链路层,路由器的每一条输出线将对应唯一的一个路由器,故不必为一个路由器指明它要与哪个路由器通话,而传输层跨越整个通信子网,故需要显式地给出目的端地址;其次,在数据链路层,因为另一端总是存在的(只有在它已崩溃的情况下才不存在),每一方都没有太多的事情要做,故在物理信道上建立数据链路连接的过程很简单,但对传输层而言,初始连接的建立要复杂得多。
数据链路层和传输层之间的另一个区别是子网的存储能力,当源节点发送了一帧时,该帧可能会到达目的地,也可能会丢失。数据链路没有存储能力,但通信子网有存储能力,如果子网内部采用数据报和适应性路由选择策略,那么极有可能将一个分组存储几秒钟,然后再传送,子网的这种存储能力有时可能会产生严重后果,因此需要使用特殊的协议。
数据链路层与传输层的另一个区别表现在数量上(连接的数目及分配给每个连接的缓冲区数目)。在数据链路层,一般为每个连接分配固定数目的缓冲区;而在传输层,由于需要管理很大数目的连接,因此每个连接当前可用缓冲区是动态变化的。
此外,传输层上还必须实现多路复用和分流的功能,这在数据链路层上是没有的。
5.会话层
会话层(Session Layer)最主要的目的是在传输层的基础上增加一些协调对话的功能,它管理不同主机上各进程间的对话。例如,两个会话层用户之间对话连接的建立和清除;在半双工对话时授权哪一方发送数据;当进程间要进行长时间数据传输时,而通信子网故障率又比较高,会话层可以在数据流中插入若干同步点,在每次网络出现故障时,仅需从最近的一个同步点开始重传,不必每次都从头开始。
6.表示层
表示层(Presentation Layer)下面的5层用于将数据比特从源站按顺序传送到目的站,而表示层则要保证经传送后的数据其意义不变。由于各种计算机都可能有自己描述数据的方法,因此不同类计算机之间交换的数据一般要经过一定的数据转换才能保证数据的意义不变。可见表示层的功能是对源站的数据进行编码(信源编码),形成适合于传输的比特流;到了目的站再进行解码,转换成用户所要求的格式(保持数据的意义不变)。因此表示层为上层用户提供数据或信息语法的表示变换,即负责某机器内部的数据表示与抽象数据表示之间的变换(使数据结构的描述与机器无关),以便信息的相互理解。
7.应用层
前面介绍的各个层次,其功能都是为应用层(Application Layer)提供可靠的数据传输服务,但与用户的实际应用没有什么直接联系,直接为用户提供各种应用服务的是应用层。应用层可以包含各种应用程序,有些由于使用非常普遍而实行了标准化,这些标准就形成了应用层上的各种应用协议,如电子邮件(E-mail)、万维网(WWW)、远程登录(TELNET)、文件传输(FTP)等。此外,应用层上还有一些协议支持应用程序的工作,比如各种网络安全协议、域名服务系统、网络管理协议等。
车内网络是一种专用的内部通信网络,是联通每个ECU的通信通道,将车辆内部的组件相互联结起来。车辆控制有其特殊要求,如确保信息传递、非冲突信息、最短传递时间、低成本、冗余路由等,车内网络汽车内部传感器、控制和执行器之间的通信用点对点的连接方式连成复杂的网状结构。
车载网络功能与带宽如图2.3所示。最初CAN总线的出现是为了在较少的控制器范围内共享车上的不同传感器信号数据和参数,如发动机转速、温度等。当车辆上引入防抱死制动系统(ABS)和电子稳定控制系统(ESC)这类监控车辆内部性能和动力学的功能时,如果采用最原始的点对点链接方式,则需要增加链接的数量,安装在车内的ECU数量呈指数上升,为了解决点对点链接方式效率低、成本高的问题,CAN这一总线型的网络开始出现。CAN总线能够满足传统汽车对汽车发动机、行驶、转向、制动等控制信号实时可靠的通信需求,因而至今仍在汽车上得到广泛使用。
传统车辆使用CAN/LIN总线通信技术,由于较低的带宽和较少的载荷传输,已经不能满足对传输载荷带宽和传输延时的要求。随着以智能电动汽车为代表的汽车功能定义的日趋复杂,汽车电子控制系统的需求逐渐由单一功能的发动机控制深入功能复杂的动力、底盘、车身、信息、娱乐等。随着汽车电子传感器和控制器数量的增加,车载通信所需的带宽急剧增加。为了满足带宽需求,FlexRay和MOST总线应运而生。FlexRay最初是为了解决线控底盘的问题,也就是向下的面向控制的问题,后来随着智能座舱的发展,FlexRay开始尝试解决向上的面向信息的问题。MOST的出现是为了解决影音娱乐的通信,也就是面向信息的问题。面向信息的通信对带宽的要求更高,并且允许一定的信息损失,但面向控制的通信传递需要高可靠性和高实时性。
图2.3 车载网络的功能与带宽
但是,随着智能座舱、高级辅助驾驶系统(ADAS)、自动驾驶、高清车载娱乐系统、车联网系统、V2X、云服务、大数据等的发展,需要传输的数据大幅增加,数据达到点云(激光雷达)、像素(摄像头)层面,工程上对车载网络带宽的要求越来越高。例如,对于激光雷达(Lidar)可能要求70Mbit/s带宽,一个摄像头可能要求40Mbit/s的带宽,而导航的数据可能是50kbit/s的数据量,显然CAN总线或CAN FD总线已经不足以支持,FlexRay和MOST总线也不能满足带宽需求。此外,总线型网络的带宽由于竞争机制,信道利用率低,且会随着ECU及报文数量的增加而显著降低,其传输带宽不足的问题凸显。
同时,现在的车载网络有更高的服务质量(Quality of Service,QoS)需求,主要从传输的带宽、传送的时延、数据的丢包率等方面衡量。而提高服务质量主要就是保证传输的带宽,降低传送的时延,降低数据的丢包率以及时延抖动等,因此迫切需求下一代的车载网络技术及架构,车载以太网应运而生。
以太网本身是一种高带宽低成本的网络,已经在计算机互联网上使用多年,技术非常成熟,且成本比FlexRay和MOST低很多,所以将以太网引入车载网络作为面向信息的通信是自然而然的选择。但传统以太网的实时性和可靠性较差,而在将来的中央域架构下,区域按ECU所在位置划分,每个域中的ECU会混杂各种信息,如面向控制的高实时性小容量数据和面向音视频传输的大容量弱实时性数据,如此,作为主干网络,为了使与之通信的控制相关控制器能满足实时性需求,需要以太网具有更高的实时性和可靠性。
车载以太网对互联网领域广为使用的以太网既有继承,也有创新。继承的是物理层以上的协议,但对物理层做了适应性创新,汽车以太网简化了分布式架构的工作模式,通过仅改变物理层技术,就可以扩展支持的数据传输速率;它还能够支持不同的配置选项,以成本最优化的方式应用于不同的车型。
但是汽车以太网的定位也不是对面向分布式控制的传统CAN总线的替代,因为汽车以太网也存在实时性问题和拓扑结构的难以拓展问题。因此,车载网络可能会逐渐形成两层架构:面向机电(动力和底盘的控制)的部分仍使用CAN总线,解决实时性问题和分布性问题,面向信息(自动驾驶、车载娱乐、智能座舱)的部分可能使用车载以太网,解决带宽问题和与互联网的兼容性问题。