今期必中李白属什么:第四章 点对点信道的数据链路层

来源:百度文库 编辑:中财网 时间:2024/04/24 11:54:26

第4章 点对点信道的数据链路层

数据链路层属于计算机网络的低层,它所包含的内容较为丰富,因此,我们将这些内容分散在以下两章来讨论。

使用点对点信道的数据链路层。这是本章的内容。

使用广播信道的数据链路层。这是第5章局域网的内容。

本章重点介绍数据链路层的基本概念和因特网中的数据链路层协议PPP。

4.1 数据链路层的基本概念

4.1.1 数据链路层的简单模型

下面讨论两个主机通过互联网进行通信时数据链路层所处的地位。如图4-1所示。

图4-1(a)表示用户主机H1通过电话线上网,中间经过3个路由器(R1,R2和R3)接入到远程主机H2。所经过的网络可以上多种的,如电话网、局域网和广域网。当主机H1向主机H2发送数据时,从协议的层次上看,数据的流动如图4—1(b)所示。主机H1和主机H2都有完整的五层协议栈,但在互联网的核心部分的路由器的协议栈只有下面的3层。数据进入路由器后要先从物理层E到网络层,在转发表中找到下一跳的地址后,再下到物理转发出去。因此,数据从主机H,传送到主机H2需要在路径中的各结点的协议栈向上和向下流动多次,如图中的双向浅灰色箭头所示。

然而,当我们专门研究数据链路层的问题时,在许多情况下我们只关心在协议栈中水平方向的各数据链路层。于是,当主机H1向主机H2发送数据时,我们可以想像数据就是在数据链路层从左向右沿水平方向传送,如图4.2中从左到右的粗箭头所示,即通过以下这样的链路:

H1的链路层→Rl的链路层→R2的链路层→R3的链路层→H2的链路层

显然,这种表示方法在专门讨论数据链路层问题时往往会比较方便。

下面再讨论一下有关数据链路层的协议数据单元——帧。

数据链路层的任务就是把网络层交下来的数据发送到链路上,以及把接收到的帧中的数据取出并上交给网络层。在因特网中,网络层协议数据单元就是IP数据报(或简称为数据报、分组或包)。

当两个主机进行通信时,应用进程要把数据从应用层逐层往下传,经过运输层再到网络层,组成了IP数据报,再往下传到数据链路层组成帧,然后经物理层形成比特流进入通信网络。数据传输的路径可能有许多路由器。每一个路由器的物理层在收到比特流后,先由数据链路层从比特流中找出帧,再从帧中提取出IP数据报。路由器在转发IP数据报时要查看IP数据报的首部。在找出转发路由后,又再把IP数据报封装成另一个新的帧,然后交给物理层发送给下一个路由器。用这样的方式,经过许多路由器的转发,数据最后到达了目的主机的物理层。以后由目的主机的数据链路层提取出IP数据报,再逐层向上传,最后由应用层交给远程的应用进程。

现在,为了把主要精力放在数据链路层的协议上,可以采用如图4-3(a)所示的3层模型。

在这种3层模型中,不管在哪一段链路上的通信(主机和路由器之间或两个路由器之间),我们都看成是结点和结点的通信(如图中的结点A和结点B),而每个结点只有3层——网络层、数据链路层和物理层。

数据链路层最主要的功能可归结为以下几点。

(1)结点A的数据链路层把网络层交下来的IP数据报封装成帧。

(2)结点A把封装好的帧发送给结点B的数据链路层。

  (3)若结点B的数据链路层收到的帧无差错,则从收到的帧中提取出IP数据报上交给上面的网络层;否则丢弃这个帧。

我们还应注意到,数据链路层不必考虑物理层以下的所有通信细节。这时,我们甚至还可以使用如图4-3(b)所示的更为简单的模型,即设想好像是沿着两个数据链路层之间的水平方向把帧直接发送到对方。使用这种简单的模型有利于我们集中精力讨论数据链路层自身的重要问题。

4.1.2链路和数据链路

我们已多次使用过“链路”和“数据链路”这两个术语。这里要强调下,“链路”和“数据链路”并不是一回事。

所谓链路(1ink)就是从一个结点到相邻结点的一段物理线路,而中间没有任何其他的交换结点。在进行数据通信时,两个计算机之间的通信路径往往要经过许多段这样的链路。可见,链路只是一条路径的组成部分。

数据链路(data link)则是另一个概念。这是因为当需要在…条线路上传送数据时,除了必须有一条物理线路外,还必须有一些必要的通信协议来控制这些数据的传输(这将在后面几节讨论)。若把实现这些协议的硬件和软件加到链路上,就构成了数据链路。现在,最常用的方法是使用网络适配器(拨号上网使用拨号适配器,通过以太网上网使用局域网适配器)来实现这些协议的硬件和软件。一般的适配器都包括了数据链路层和物理层这两层的功能。

也有人采用另外的术语。这就是把链路分为物理链路和逻辑链路。物理链路就是上面所说的链路,而逻辑链路就是上面的数据链路,是物理链路加上必要的通信协议。这两种划分方法实质上是一样的。

早期的数据通信协议曾叫做通信规程(procedure)。因此,在数据链路层,规程和协议是同义语。

下面我们讨论数据链路层的二三个基本问题。

4.2 三个基本问题

数据链路层协议有许多种,但有三个基本问题则是共同的。

1.数据链路层的发送方应当让接收方的数据链路层知道,所发送的帧是从什么地方开始到从什么地方结束。这就是帧定界问题。

2.数据链路层传送的数据的比特组合必须是不受限制的。数据链路层协议不能禁止传送某种特殊的比特组合。这就是透明传输问题。

3.数据链路层必须有差错检测功能。

下面分别讨论这三个基本问题。

 

4.2.1 帧定界

帧定界(framing)就是确定帧的界限。在发送帧时,发送方的数据链路层在帧的前后都各加入事先商定好的标记,使得接收方在收到这个帧后,就能根据这种标记识别帧的开始和结束,以及帧里面装入的数据部分的准确位置。图4—4表示用帧首部和帧尾部进行帧定界的一般概念。网络层的1P数据报传送到数据链路层就成为帧的数据部分。在帧的数据部分的前面和后面分别添加上首部和尾部,构成了一个完整的帧。因此,帧长等于数据部分的长度加上帧首部和帧尾部的长度。首部和尾部的主要作用是进行帧定界,但还可以包括一些其他的控制信息。在发送帧时,是从帧首部开始发送。各种数据链路层协议都要对帧首部和帧尾部的格式有非常明确的规定。显然,为了提高帧传送效率,应当使帧的数据部分长度尽可能地大于首部和尾部的长度。但是,每一种链路层协议都规定了帧的数据部分的长度上限――最大传送单元MTU(Maximum Transfer Unit)。图4.4给出了为帧定界用的首部和尾部的位置,以及帧的数据部分与MTU的关系。

当数据是由可打印的ASCⅡ码组成的文本文件时,帧定界可以使用特殊的帧定界符。我们知道,ASCⅡ码是7位编码,一共可组合成128个不同的ASCII码,其中可打印的有95个,而不可打印的控制字符有33个。如图4.5所示的例子可说明帧定界的概念。控制字符SOH(Start Of Header)放在一帧的最前面,表示帧的首部开始。另一个控制字符EOT (End Of Transmission)表示帧的结束。请注意,SOH和EOT分别是这两个控制字符的名称。字符SOH和字符EOT的十六进制编码分别是01和04。不要误认为SOH(或EOT)是S、O、H(或E、O、T)三个字符。

对帧进行定界是非常必要的。可能有的读者会这样想:既然发送方发送的数据是以帧为单位,那么,在接收方就可以从收到的数据很自然地找出帧的长度范围。但是,我们必须考虑到,数据在物理层的实际传送方式可能是多样的。例如,在物理层常常采用异步传送,即一次只传送一个字符(如使用RS.232接口)。因此,在接收方的物理层是断断续续地接收到单个的数据字符(每个字符之间相隔的时间并不确定),而不是一次就收到一个完整的帧。但有了帧定界的控制字符,接收方就可以准确界定一个帧开始和结束的位置。.

在同步传输的情况下,发送方是连续地发送数据帧。在接收方怎样从连续的比特流中找出每一个帧开始和结束的位置呢 这还要借助于帧定界的特殊标记。

再看一种情况。假定发送方在尚未发送完一个帧时突然出现故障,但随后很快又恢复正常,于是,重新发送刚才未发送完的帧(当然必须从头开始发送)。由于使用了帧定界符,在接收方就知道前面收到的数据是个不完整的帧(只有首部开始符SOH,而没有传输结束符EOT),必须丢弃。而后面收到的数据有明确的帧定界符(SOH和EOT),因此,这是一个完整的帧,应当收下。

 

4.2.2  透明传输

由于帧的开始和结束的标记是使用专门指明的控制字符,因此,所传输的数据中的任何一个字符一定不允许和用做帧定界的控制字符一样,否则就会出现帧定界的错误。

当传送的帧是用文本文件组成的帧时(文本文件中的字符都是从键盘上输入的),其数据部分显然不会出现像SOH或EOT这样的帧定界控制字符。可见,不管从键盘上输入什么字符都可以放在这样的帧中传输过去,因此这样的传输就是透明传输。

但当数据部分是非ASCII码的文本文件时(如二进制代码的计算机程序或图像等),情况就不同了。如果数据中的某个字节的二进制代码恰好和SOH或EOT这种控制字符一样,如图4—6所示,数据链路层就会错误地“找到帧的边界”,把部分帧收下(误认为是个完整的帧),而把剩下的那部分数据丢弃(这部分找不到帧定界控制字符SOH)。

像图4.6所示的帧的传输显然就不是“透明传输”,因为当遇到数据中出现字符“EOT”时就传不过去了,数据中的“EOT”将被接收方错误地解释为“传输结束”的控制字符。但实际上在数据中出现的字符“EOT”并非控制字符而仅仅是数据。

为了解决透明传输问题,就必须设法使数据中可能出现的控制字符“SOH”和“EOT”在接收方不被解释为控制字符。具体的方法是每当在数据中出现字符“SOH”或“EOT”时就将其转换为另一个字符,而这个字符是不会被错误解释为控制字符的。这种方法称为字节插入。例如,可以采用如下的约定(显然可以有多种不同的约定):

上面的控制字符“ESC”叫做转义符(escape character),在标准键盘的左上角,它的十六进制编码是1 B。为什么对数据中出现的“ESC”也必须进行转换呢 本来控制字符ESC并不会和帧定界标记弄混。但由于我们把SOH和EOT都转换为由ESC开始的两个字符,因此,如果不对数据中出现的ESC进行处理,那么,当数据中碰巧出现“ESC x”或“EOT y”这样的两字符组合时,在接收方就会被错误地还原为字符SOH或EOT。把ESC转换为两字符组合ESC z就可以避免出现这样的情况。图4—7表示在数据中碰巧出现了4个控制字符“ESC”、“EOT”、“ESC”和“SOH”。

可以看出,按以上规则转换后所发送的数据已经不再出现对帧定界的控制字符SOH和EOT了。在接收方,只要进行相应的逆变换就可以很方便地还原出原来的数据。使用这种字节插入法就可实现透明传输。

在4. 3. 2节我们还要介绍另一种实现透明传输的方法—比特插入。

 

4.2.3差错检测

现实的通信链路都不会是理想的,这就是说,比特在传输过程中可能会产生差错:1变成了0或0变成了1。在一定的时间内,传输错误的比特占所传输的比特总数的比率称为误码率BER(Bit Error Rate)。例如,误码率为1010时,表示平均每传送1010个比特就会出现一个比特的差错。误码率与信噪比有很大的关系。如果设法提高信噪比,就可以使误码率减小。由于实际的通信链路并非理想的,它不可能使误码率下降到零。因此,为了保证数据传输的可靠性,在计算机网络传输数据时,都必须采用各种差错检测措施。在数据链路层广泛使用了循环冗余检验CRC(cyclic Redundancy check)的检错技术。

下面我们通过一个简单的例子来说明循环冗余检验的原理。

在发送方,设待传送的数据M=101001(共k位,这里k=6)。在数据M的后面添加供差错检测用的n位冗余码一起发送(即一共发送k+n位)。在所要发送的数据后面增加n位的冗余码,虽然增大了数据传输的开销,但却可以进行差错检测。当传输可能出现差错时,付出这种代价是必须的。

这n位冗余码可用以下方法得出。先用二进制的模2运算进行2n乘M的运算,这相当于在M后面添加n个0。得到的(k+n)位的数除以收发双方事先商定的长度为(n+1)位的数P,得出商是p而余数是R(n位)。至于P是怎样选定的,下面还要介绍。在图4—8所示的例子中,设n=3,除数P=1101。经模2除法运算后的结果是:商Q=110101,而余数R=001(n位)。这个余数R就作为冗余码添加在数据M的后面发送出去。这种为了进行检错而添加的冗余码常称为帧检验序列FCS(Frame Check Sequence)。因此,加上FCS后发送的数据是101001001(即2nM+FCS),共有(k+n )位。

顺便说一下,循环冗余检验CRC和帧检验序列FCS并不是同一个概念。CRC是一种检错方法,而FCS是添加在数据后面的冗余码,在检错方法上可以选用CRC,但也可不选用CRC。

 

在接收方对接收到的帧进行CRC检验。把收到的帧除以同样的P(模2运算),得出余数R。如果数据在传输过程中没有差错,则得出的余数显然应为0(读者可自己进行这样的运算。被除数现在是101001001,而除数是P=1101,看余数是否为0)。若数据在传输过程中出现误码,则得不出余数为0的结果。或者更严格地讲,这时得出余数为0的概率极小。实际上只要经过仔细的挑选,并使用位数足够多的除数P,那么,出现CRC检测不到的差错概率就可忽略不计。

总之,在接收方经过CRC检验后,

·若得出的余数R=0,则认为这个帧没有差错,就接受(accept)这个帧。

·若余数R≠0,则认为这个帧有差错(当然无法确定究竟是哪一位或哪几位出现了差错),就丢弃这个帧。

一种较方便的方法是用多项式来表示循环冗余检验过程,就是使用多项式相应的系数来表示上述二进制数字中的1和0。例如,可以用多项式P(X)=X3+X2+X+1来表示上面的除数P=1101(最高位对应于X3,最低位对应于X)。多项式P(X)称为生成多项式。现在广泛使用的生成多项式P(X)有以下几种:

CRC-16= X16+X15+X2+1

CRC-CCITT= X16+X15+X5+1

CRC-32=X32+X26+X23+X22+X16+X12+X11+X10+X8+X7+X5+X4+X2+X+1

在数据链路层,在发送方帧检验序列FCS的生成和在接收方的CRC捡验都是用硬件完成的,处理很迅速,因此并不会延误数据的传输。

最后再强调一下,循环冗余检验CRC差错检测技术只能做到无差错接受,即:“凡是接收方数据链路层接受的帧,我们都能以非常接近于1的概率认为这些帧在传输过程中没有产生差错”(请注意,接收方丢弃的帧虽然曾被暂时接收下来,但最终没有被接受),或更简单些,可以近似地认为:“凡是接收方数据链路层接受的帧均无传输差错”。

请注意,采用CRC差错检测技术后,我们并没有使数据链路层变成具有“可靠传输”的功能。所谓“可靠传输”就是发送方发送什么,接收方就收到什么。也就是说,接收方接受的帧应当是无差错、无丢失、无重复,同时还按发送的顺序接收。例如,发送方发送了100个帧。到达接收方后,能通过CRC检查的只有一个。那么,接收方就只接受这一个传输正确的帧。这仍然是“无差错接受”,但远远不是“可靠传输”,因为有99个帧由于出现差错而被接收方丢弃了。

那么,我们应不应当把数据链路层做成是可靠传输的 以前OSI的观点是必须把数据链路层做成是可靠传输的。因此,他们在有CRC检错的基础上,增加了确认和重传机制。意思是收到正确的帧要向发送方发送一个确认。发送方在一定的期限内若没有收到确认,就认为出现了差错,就重传这个帧,直到收到确认为止。这种方法在历史上曾经起到好的作用。但现在的通信线路的质量已经大大提高了,通信链路质量不好引起差错的概率已经大大降低。因此,因特网广泛使用的数据链路层协议都不使用确认和重传机制,即不把数据链路层做成具有可靠传输的功能(因为这要付出相当大的代价)。如果在数据链路层传输数据时出现了差错,并且需要进行改正的话,那么,改正差错的任务就由运输层的TCP协议来完成。实践证明,这样做可以使整个通信效率大大提高。

在本教材的第一版中采用了以前OSI的思路,也就是在数据链路层增加确认和重传机制(例如停止等待协议和滑动窗口机制)。但现在看来这已是多余的,因此,我们把确认和重传机制改为在运输层的TCP中讨论。这样做比较符合因特网的实际情况。

 

4.3 因特网的点对点协议PPP

4.3.1 PPP协议的特点

对于点对点的链路,点对点协议PPP协议是目前使用得最广泛的数据链路层协议。我们知道,用户接入因特网有多种途径,如通过电话线拨号入网或各种宽带入网,但不管怎样,总是要通过某个因特网服务提供者ISP才能接入到因特网。从用户计算机到ISP的链路所使用的数据链路层协议就是PPP协议,如图4-9所示。

 

每一个ISP都已经从因特网的管理机构或从一个更大的ISP申请到一批IP地址。ISP还有与因特网通过高速通信专线相连的路由器。大的ISP拥有属于自己通信线路,而小的ISP则向电信公司租用通信线路。用户在某一个ISP缴费登记后(有的ISP是出售上网卡),就可用自己的计算机通过调制解调器。、电话线接入到该ISP。用户在接通ISP后,ISP就分配给该用户一个临时的IP地址(IP地址将在第7章中详细讨论)。用户计算机在获得了临时的IP地址后,就成为连接在因特网上的主机,因而就可使用因特网所提供的各种服务。当用户结束通信并断开连接后,ISP就把刚才分配给该用户的IP地址收回,以便再分配给后面拨号入网的其他用户使用。

PPP协议是IETF在1992年制定的。经过1993年和1994年的修订,现在的PPP协议已成为因特网的正式标准[RFC 1661]。

 

1. PPP协议应满足的需求

IETF认为,在设计PPP协议时必须考虑以下的多方面需求[RFC 1547]。

(1) 简单 经过非常慎重的考虑,IETF在设计因特网体系结构时已把其中最复杂的部分放在TCP协议中,而网际协议IP则相对比较简单,它提供的是不可靠的数据报服务。在这种情况下,数据链路层没有必要提供比IP更多的功能。因此,对数据链路层的帧,不需要纠错,不需要序号,也不需要流量控制。如果添加这些功能,就会和运输层的某些功能重复,因而降低了通信效率。当然,在误码率较高的无线链路上可能会需要更为复杂的链路层协议。因此,IETF把“简单”作为首要的需求。

简单的设计还可使协议不容易出错,因而使得不同厂商对_办议的不同实现的互操作性提高了。我们知道,协议标准化的一个主要目的就是提高协议的互操作性。

(2)封装成帧 PPP协议必须能够正确和有效地把网络层交下来的分组(即IP数据报)封装成数据链路层的帧,再发送出去。接收方在收到帧后,必须能够准确地找出帧的开始和结束位置,以及帧中所封装的数据(即IP分组)的开始和结束位置。为此,PPP协议必须规定特殊的字符作为帧定界符(即标志一个帧的开始和结束的字符)。帧定界是指接收方从收到的比特流中应当能准确地找出一帧的开始和结束在什么地方。

(3)透明性 PPP协议必须保证数据传输的透明性。这就是既,不能限制网络层交下来的分组中不许出现某种比特组合。只要不出现传输差错,所有的数据(包括高层协议的首部)都必须原封不动地传送到相邻结点。如果数据中碰巧出现了和帧定界符一样的比特组合时,就要采取有效的措施来解决这个问题(见4.2. 2节关于透明传输的讨论)。

(4)多种网络层协议 PPP协议必须能够在在同一条物理链路上同时支持多种网络层协议(如IP和IPX等)的运行。当点对点链路所连接的是局域网或路由器时,PPP协议必须同时支持在链路所连接的局域网或路由器上运行的所有协议。虽然在因特网的环境下IP是网络层的主流协议,但链路层的PPP协议仍需支持其他的网络层协议。

(5)多种类型链路 除了要支持多种网络层的协议外,PPP还必须能够在多种类型的链路上运行。例如,串行的(一次只发送一个比特)或并行的(一次并行地发送多个比特),同步的或异步的,低速的或高速的,电的或光的,交换的或非交换的。

这里特别要提到的是在1999年公布的在以太网上运行的PPP,即PPP over Ethernet,简称为PPPoE[RFC 2516],这就是PPP协议能够适应多种类型链路的一个例子。PPPoE是为宽带上网的主机使用的链路层协议。宽带上网时由于数据传输速率较高,因此,可以让多个用户共享一条宽带链路。例如,一个具有20个人工作的实验室,他们使用的计算机都连接在一个以太网。这时,可以向ISP只申请一条宽带上网线路,而大家都使用,PPPoE!数据链路层协议。通过连接到ISP的共享宽带链路下载的文件,会按照每个计算机不同的硬件地址(见5.3.1节)而传送到相应的计算机。如果所有的用户都正好在同一时刻下载文件,那么,每一个用户分配到的数据传输速率当然也就下降了。

(6)差错检测(error detection)PPP协议必须能够对接收方收到的帧进行检测,并立即丢弃有差错的帧。虽然TCP协议有能保证端到端可靠交付的差错控制机制,但若在数据链路层不进行差错检测,那么,已出现差错的帧(这种出错的帧已无用处)就还要在网络中继续向前转发,因而白白浪费了许多网络的资源。因此,在数据链路层对收到的帧进行检错并不是多余的。然而,在数据链路层一般没有必要去纠错。纠错是不仅发现差错,而且还把差错改正过来。在数据链路层进行纠错的代价太高,通常是得不偿失的。

(7)连接的活跃度 PPP协议必须具有一种机制来自动检测出链路上连接的活跃度(liveness),也就是说,必须能够及时(不超过几分钟)检测出一条链路是处于正常工作状态,还是已经出了故障。当出了故障的链路隔了…段时间后又重新恢复正常工作时,这种及时检测功能特别有用。

(8)最大传送单元 PPP协议必须对每一种类型的点对点链路设置最大传送单元MTU的标准默认值。这样做是为了促进各种实现之间的互操作性。如果高层协议发送的分组过长并超过MTU的数值,PPP就要丢弃这样的帧,并返回差错。为了有效地传送以太网的帧,MTU的默认值至少是1500字节。再强调一下,MTU是数据链路层的帧可以载荷的数据部分的最大长度,而不是帧的总长度。在RFC 1661中,MTU被称为最大接收单元MRU(Maximum Receive Unit)。

(9)网络层地址协商 PPP协议必须提供一种机制使通信的两个网络层(例如,两个IP层)能够通过协商知道或配置彼此的网络层地址。协商的算法应当尽可能简单,并且能够在所有的情况下都能得出协商结果。这对拨号连接的链路特别重要,因为仅仅在链路层建立了连接而不知道对方网络层地址时,还不能够保证网络层能够传送分组。

(10)数据压缩协商PPP协议必须提供一种方法来协商使用数据压缩算法。但PPP协议并不要求将数据压缩算法进行标准化。

2.1lPP协议不需要的功能

在RFC 1547中还明确了PPP协议不需要的功能。

(1)纠错(error correction) 在TCP/IP族中,可靠传输由运输层的TCP协议负责,而数据链路层的PPP协议则没有纠错的责任。这就是说,PPP协议是不可靠传输协议。虽然当链路的误码率较高时,增加纠错功能可阱提高链路的性能,但对.PPP协议的基本实现,则不要求有纠错这一机制。

(2)流量控制 我们知道,发送方发送数据的速率必须使接收方来得及接收。当接收方来不及接收时,到达接收方缓存的帧就要排队等候处理。当队列溢出时就发生帧的丢失。因此,接收方应对发送方发送数据的速率进行流量控制。在TCP/IP族中,端到端的流量控铷由TCP负责,因而链路级的PPP协议就不需要再重复进行流量控制。这样做符合前面讲的PPP协议的第一个需求―――“简单”。

(3)序号 PPP协议不需要序号。许多流行的数据链路层协议,如停止等待协议或连续ARQ{协议都是使用序号的。但为了使协议简单,PPP协议并不试图使协议向后兼容。在噪声较大的环境下,如无线网络,则可以使用有编号的工作方式,这样就可以提供可靠传输服务。这种工作方式定义在RFC 1663中,这里不再讨论。

(4)多点线路 PPP协议不支持多点线路(即一个发送站轮流和链路上的多个接收站进行通信)。PPP协议只支持一个发送方和一个接收方的链路通信。

(5)半双工或单工链路 PPP协议不支持半双工或单工链路(因为这两种链路目前已很少使用),而只支持全双工链路。

3.PPP协议的组成

PPP协议有三个组成部分。

(1)一个将IP数据报封装到串行链路的方法。PPP既支持异步链路(无奇偶检验的8比特数据),也支持面向比特的同步链路。IP数据报在PPP帧中就是其信息部分。这个信息部分的长度受最大传送单元MTU的限制。

(2)一个用来建立、配置和测试数据链路连接的链路控制协议LCP (Link control Protocol)。通信的双方可协商一些选项。在RFC 166l中定义了11种类型的LCP分组。

(3)一套网络控制协议NCP(Network control Protocol),其中的每一个协议支持不同的网络层协议,如IP、OSI的网络层、DECnet、以及AppleTalk等。

4.3.2 PPP协议的帧格式

1.各字段的意义

PPP的帧格式如图4.10所示。PPP帧的首部和尾部分别为四个和两个字段。

首部的第一个字段和尾部的第二个字段都是标志字段F(Flag),规定为0x7E(符号“0x”表示它后面的字符是用十六进制表示的。十六进制的7E的二进制表示是01111110)。标志字段表示一个帧的开始或结束。因此,标志字段就是PPP帧的定界符。连续两帧之间只需要用一个标志字段。如果出现连续两个标志字段,就表示这是一个空帧,应当丢弃。

首部中的地址字段A规定为0xtiF(即11111111),控制字段c规定为0x03(即00000011)。最初曾考虑以后再对这两个字段的值进行其他定义,但至今也没有给出。可见,这两个字段实际上并没有携带PPP帧的信息。

PPP首部的第四个字段是2字节的协议字段。当协议字段为0x0021时,PPP帧的信息字段就是IP数据报。若为0xC021,则信息字段是PPP链路控制协议LCP的数据,而0x8021表示这是网络层的控制数据。。

信息字段的长度是可变的,不超过1500字节。

尾部中的第一个字段(2字节)是使用CRC的帧检验序列FCS。

2.字节填充

当信息字段中出现和标志字段一样的比特(Ox7E)组合时,就必须采取一些措施使这种形式上和标志字段一样的比特组合不出现在信息字段中。

当PPP使用异步传输时,它把转义符定义为0x7D,并使用字节填充,具体做法如下。

(1)把信息字段中出现的每一个0x7E字节转变成为2字节序列(0x713,0x5E)。

(2)若信息字段中出现一个0x7D的字节(即出现了和转义字符一样的比特组合),则把0x7D转变成为2字节序列(0x7D,0x5D)。

(3)若信息字段中出现ASCⅡ码的控制字符(即数值小于0x20的字符),则在该字符前面要加入一个0x7D字节,同时将该字符的编码加以改变。例如,0如3(在控制字符中是“传输结束”ETX)就要变为0x31。这些在RFC 1662中都有详细的规定。这样做的目的是防止这些表面上的ASCII码控制符(在被传输的数据中当然已不是控制符了)被错误地解释为控制符。

由于在发送方进行了字节填充,因此,在链路上传送的信息字节数就超过了原来的信息字节数。但接收方在收到数据后再进行与发送方字节填充相反的逆变换,因而可以正确地恢复出原来的信息。

3,零比特填充

PPP协议用在SONET/SDH链路时,是使用同步传输(一连串的比特连续传送)而不是异步传输(逐个字符地传送)。在这种情况下,PPP协议采用零比特填充方法来实现透明传输。

零比特填充的具体做法是在发送方,先扫描整个信息字段(通常是用硬件实现,但也可用软件实现,只是会慢些)。只要发现有5个连续1,则立即填入一个0。因此,经过这种零比特填充后的数据,就可以保证在信息字段中不会出现6个连续1。接牧方在收到一个帧时,先找到标志字段F以确定一个帧的边界,接着再用硬件对其中的比特流进行扫描。每当发现5个连续1后的一个0删除,以还原成原来的信息比特流,如图4,11所示。这样就保证了透明传输:在所传送的数据比特流中可以传送任意组合的比特流,而不会引起对帧定界的判断错误。

 

4.3.3  PPP协议的工作状态

上一节我们通过PPP帧的格式讨论了PPP帧是怎样组成的。但PPP链路一开始是怎样被初始化的t当用户拨号接入ISP眉,就建立了一条物理连接。这时,用户PC机向ISP发送一系列的LCP分组(封装成多个PPP帧)。这些分组及其确应选择了将要使用的一些PPP参数。接着就进行网络层配置,NCP给新接入的用户PC机分配一个临时的IP地址。这样,用户PC机就成为因特网上的一个主机了。

当用户通信完毕时,NCP释放网络层连接,收回原来分配出去的IP地址。接着,LCP释放数据链路层连接。最后释放的是物理层的连接。

上述过程可用图4.12的状态图来描述。

PPP链路的起始和终止状态永远是图4-12中的“静止状态”,这时并不存在物理层的连接。当检测到调制解调器的载波信号,并建立物理层连接后,PPP就进入链路的“建立状态”。这时LCP开始协商…些配置选项,即发送LCP的配置请求帧(configure-request)。这是个PPP帧,其协议字段配置为LCP对应的代码,而信息字段包含特定的配置请求。链路的另一端可以发送以下几种响应。

(1)配置确认帧(configure-ack):所有选项都接受。

(2)配置否认帧(configure-nac):所有选项都理解但不能接受。

(3)配置拒绝帧(configure-reject):选项有的无法识别或不能接受,需要协商。

LCP配置选项包括链路上的最大帧长、所使用的鉴别协议(authentication protocol)的规约(如果有的话),以及不使用PPP帧中的地址和控制字段(因为这两个字段的值是固定的,没有任何信息量,可以在PPP帧的首部中省略这两个字节)。

协商结束后就进入“鉴别状态”。若通信的双方鉴别身份成功,则进入“网络状态”。这就是PPP链路的两端互相交换网络层特定的网络控制分组。如果在PPP链路上运行的是IP,则使用IP控制协议IPCP(IP Control Protocol)来对PPP链路的每一端配置IP模块(如分配IP地址)。和LCP分组封装成PPP一样,IPCP分组也封装成PPP帧(其中的协议字段为0x8201)在PPP链路上传送。当网络层配置完毕后,链路就进入可进行数据通信的“打开状态”。两个PPP端点还可发送回送请求LCP分组(echo-request)和回送回答LCP分组(echo-reply)以检查链路的状态。数据传输结束后,链路的一端发出终止请求LCP分组(terminate-request)请求终止链路连接,而当收到对方发来的终止确认LCP分组(terminate-ack)后,就转到“终止状态”。当载波停止后则回到“静止状态”。

4.4 HDLC协议

下面简单介绍一下在历史上曾起到重要作用的数据链路层协议HDLC。然而,目前HDLC协议已经很少使用了。

1974年,IBM公司推出了著名的体系结构SNA。在SNA的数据链路层规程采用了面向比特的规程SDLC(Synchronous Data Link Control)。所谓“面向比特”就是帧首部中的控制信息不是由几种不同的控制字符组成,而是由首部中各比特的值来决定。由于比特的组合可以是多种多样的,因此,首部中的控制信息可以得出很多4i同的功能,这就使得SDLC协议能够满足各种用户的不同需求。此外,SDLC还使用同步传输,效率比异步传输有了很大的提高。后来,ISO把SDLC修改后称为HDLC(High-level Data Link Control),译为高级数据链路控制,作为国际标准ISO 3309。我国的相应国家标准是GB 7496。

原CCITT则将HDLC再修改后称为链路接入规程LAP (Link Access Procedure、),并作为X.25建议书的一部分(即有关数据链路层协议的部分)。不久,HDLC的新版本又把LAP修改为LAPB,“B”表示平衡型(Balanced),所以LAPB叫做链路接入规程(平衡型)。

下面简单介绍一下HDLC的帧格式,如图4.13所示。从网络层交下来的分组,变成数据链路层的数据。这就是图4.13中的信息字段。信息字段的长度没有具体规定。数据链路层在信息字段的头尾各加上3字节的控制信息,这样就构成了一个完整的HDLC帧。

HDLC规定了在帧的开头(即首部中的第一个字节)和结尾(即尾部中的最后一个字节)各放入一个标志字段,作为一个帧的边界。标志字段是6个连续1加上两边各一个0共8位。在接收方,只要找到标志字段,就可以很容易地确定一个帧的位置。

HDLC采用零比特填充法实现透明传输。实际上,PPP协议的首部格式和零比特插入都是来源于HDLC(从历史上看,是先有HDLC,后有PPP)。

地址字段是8位。全l地址是广播方式,而全O地址是无效地址。冈此,有效的地址共有254个。因此,HDLC可用于一点对多点的通信(但PPP协议没有这种功能)。

控制字段共8位,是最复杂的字段。HDLC的许多重要功能都靠控制字段来实现。根据其最前面两位的取值,可把HDLC帧划分为3大类,即信息帧、监督帧和无编号帧。在控制字段中有几位用于帧的编号(传送数据的信息帧和确认帧都带有编号),因此,HDLC可用于连续AR()协议或选择重传AR()协议,因而实现可靠传输。

帧检验序列字段共16位。它采用的生成多项式是CRC-CCITT。所检验的范围是从地址字段的第一位起,到信息字段的最后一位为止。

随着技术的进步,目前通信信道的可靠性比过去已经有了非常大的改进。我们已经没有必要在数据链路层使用很复杂的协议(包括编号、检错重传等技术)来实现数据的可靠传输。因此,不可靠的传输协议PPP现已成为数据链路层的主流协议,而可靠传输的责任落到了运输层的TCP协议身上。

习 题

1. 数据链路(即逻辑链路)与链路(即物理链路)有何区别 “电路接通了”与“数据链路接通了”的区别何在?

2.数据链路层中的链路控制包括哪些功能

3.考察停止等待协议算法。在接收结点,当执行步骤(4)时,若将“否则转到(7)”改为“否则转到(8)”,将产生什么结果

4.在停止等待协议算法中,若对出差错的帧不发送否认帧,该算法应作何改动

5.在停止等待协议算法中,若不使用帧的序号会出现什么后果

6.信道速率为4Kbit/s,采用停止等待协议。传播时延tp=20 ms。确认帧长度和处理时间均可忽略。问帧长为多少才能使信道利用率达到至少50%

7.在停止等待协议中,确认帧是否需要序号 请说明理由。

8.试写出连续ARQ协议的算法。

9.试证明:当用n个比特进行编号时,若接收窗口的大小为1,则只有在发送窗口的大小Wt<=2n-1时,连续ARQ协议才能正确运行。

10.试证明:对于选择重传ARQ协议,若用n比特进行编号,则接收窗口的最大值受公式(4-8)的约束。

11.在选择重传ARQ协议中,设编号用3 bit。再设发送窗口W7=6而接收窗口Wr=3,试找出—种情况,使得在此情况下协议不能正确工作。

12.在连续ARQ协议中,设编号用3 bit,而发送窗口Wt=8。试找出一种情况,使得在此情况下协议不能正确工作。

13.在什么条件下,选择重传ARQ协议和连续ARQ协议在效果上完全一致

14.在连续ARQ协议中,若Wt=7,则发送端在开始时可连续发送7个数据帧。因此,在每一帧发出后,都要置一个超时计时器。现在计算机里只有一个硬时钟。设这7个数据帧发出的时间分别为t0,t1,…,t6,且tout都一样大。试问如何实现这7个超时计时器(这叫软时钟法)

15.卫星信道的数据率为1M Bit/s。数据帧长为2000bit。忽略确认帧长和处理时间,并设卫星信道传播时延为0.25秒。若忽略可能出现的传输差错,试计算下列情况下的信道利用率:

(1)停止等待协议。

(2)连续ARQ协议,Wt=7。

(3)连续ARQ协议,Wt=127。

(4)连续ARQ协议,Wt=255。

16.试简述HDLC帧各字段的意义。HDLC用什么方法保证数据的透明传输?

17.HDLC帧可分为哪几个大类 试简述各类帧的作用。

18.HDLC规定,接收序号N(R)表示序号为N(R)(mod 8)的帧以及在这以前的各帧都己正确无误地收妥了。为什么不定义“N(R)表示序号为N(R)(mod 8)的帧以及在这以前的各帧都已正确无误地收妥了 ”

19.PPP协议的主要特点是什么 它适用在什么情况下

 

 

物理信道是_______,而数据链路是__________,它是物理信道加上________后构成的 数据链路层的封装和解封装的原理 数据链路层的封装和解封装的原理 以太网的帧格式和数据链路层有关吗? 计算机网络的数据链路层,物理层各自作用是? 能用于数据链路层的网络设备有什么设备? 数据链路层传输效率的问题,如何才能达到100%? 传输层的流控和数据链路层的流控区别在哪 比较一下数据链路层和传输层的滑动窗口协议 局域网参考模型中数据链路层的LLC子层,MAC子层各是什末含义 网络层、数据链路层和物理层传输的数据相关内容 有谁知道计算机网络原理中在数据链路层的连续ARQ协议的算法?谢谢! 有关计算机网络 数据链路层的帧封装协议 的程序 0数据链路层的功能与物理层实现的功能有何不同? 数据链路层的功能与物理层的功能有何不同? 数据链路层的三种服务的分别解释下 OSI模型的数据链路层在流控制上有哪几种技术啊 局域网的体系结构中___和_____相当于数据链路层. 【网络试题 选择题】_______是数据链路层的通信设备之一.(选项在里边) 【网络试题 选择题】_______是数据链路层的通信设备之一.(选项在里边) 【网络试题 选择题】_______是数据链路层的通信设备之一.(选项在里边) 在数据链路层设备用来提高网络性能的是什么? 数据链路层主要把传送的数据封装成() 下面( )设备工作在OSI参考模型的数据链路层