计算机网络笔记整理(三):数据链路层

数据链路层使用的信道主要有以下两种类型:
(1) 点对点信道:使用一对一的点对点通信方式,常用的协议有PPP。
(2) 广播信道:使用一对多的广播通信方式。广播信道上连接的主机很多,所以1必须使用专用的共享信道协议来协调这些主机的数据发送,常用的协议有CSMA/CD协议。
两个主机通信的过程是由不连续的一段段链路层通信组成,不同段的链路层可能采用不同的数据链路层协议。

一、使用点对点信道的数据链路层

  1. 一些概念
    链路(link)/物理链路:从一个结点到相邻结点的一段物理线路,中间没有任何其他的交换结点。链路是一条路径的组成部分。
    数据链路(data link)/逻辑链路:当需要再跳线路上传送数据时,还需要有一些必要的通信协议来控制数据的传输,把实现这些协议的硬件和软件加到链路上,就构成了数据链路。
    :点对点信道的数据链路层的协议数据单元,数据链路层把网络层交下来的数据构成帧发送到链路上。
  2. 通信步骤
    (1) 结点A的数据链路层给网络层交下来的IP数据报添加首部和尾部封装成帧。
    (2) 结点A把封装好的帧发送给结点B的数据链路层。
    (3) 若结点B的数据链路层收到的帧无差错,则从收到的帧中提取出IP数据报上交给上面的网络层,否则丢弃这个帧。
  3. 三个基本问题
    数据链路层协议有许多,但是有三个共同的基本问题:封装成帧、透明传输和差错检测。
    • 封装成帧
      在一段数据的前后分别添加首部和尾部就构成了一个帧(framing)。接收端在收到物理层上交的比特流后,就能根据首部和尾部的标记,从收到的比特流中识别帧的开始和结束。
      帧的首部和尾部的一个重要作用就是进行帧定界(即确定帧的界限),此外还有许多的必要的控制信息。各种数据链路层协议都要对帧首部和帧尾部的格式进行明确的规定。为了提高帧的传输速率,应当使帧的数据部分长度尽可能大于首部和尾部的长度。但是,每一种链路层协议都规定了帧的数据部分的长度上限——最大传送单元MTU(Maximum Transfer Unit)
      当数据是由可打印的ASCII码组成的文本文件时,帧定界可以使用特殊的帧定界符。而ASCII码中有33个不可打印的控制字符可以用于表示帧的开始和结束。比如控制字符SOH(Start Of Header,二进制编码为0000 0001)放在一帧的最前面表示帧首部开始;控制字符EOT(End Of Transmission,二进制编码为0000 0100)放在一帧的最后表示帧的结束。
      当数据在传输中出现差错时,帧定界符的作用非常显著。比如发送端尚未发送完一个帧时突然出现故障,中断了发送,但随后又恢复了正常,所以重新从头发送刚才未发送完的帧。由于使用帧定界符,接收端就知道前面接收到的数据是个不完整的帧(只有SOH而没有EOT),必须丢弃。
    • 透明传输
      由于帧使用了专门指明的控制字符作为帧的开始和结束的标记,所以传输的数据中任何8 bit的组合一定不允许和用作帧定界的控制字符的比特编码一样,否则会出现帧定界错误。
      当传送的帧是用文本文件组成的帧时(文本文件中的字符都是从键盘上输入的),数据部分显然不会出现SOH或EOT之类的控制字符。可见不管从键盘上输入什么字符都可以放在这样的帧中传输过去,这样的传输就是透明传输。
      对于数据部分是非ASCII码的文本文件(如二进制代码的计算机程序或图像等)时,数据中的某个字节的二进制代码就可能恰好和SOH和EOT这种控制字符一样,数据链路层就会错误地“找到帧的边界”。收下部分帧(误认为是个完整的帧),而把剩下的那部分数据丢弃。显然这样的传输就不是“透明传输”
      为了解决透明传输问题,发送端的数据链路层在数据中出现控制字符“SOH”或“EOT”的前面插入一个转义字符“ESC”(其16进制编码是1B);而接收端在将数据送往网络层之前删除插入的转义字符。这种方法成为字节填充(byte stuffing)字符填充(character stuffing)。同样如果数据中出现转义字符也是在前面插入一个转义字符。
    • 错检测
      比特差错:现实的通信链路都是不理想的,比特在传输过程之中可能会产生差错,1可能变成0,0可能变成1。
      误码率BER(Bit Error Rate):在一段时间内,传输错误的比特占所传输比特总数的比率。
      误码率与信噪比有很大的关系,为了保证数据传输的可靠性,在计算机网络传输数据时,必须采用各种差错检测措施,目前在数据链路层广泛使用了循环冗余检验CRC(Cyclic Redundancy Check)的检错技术。其原理如下:
      在发送端,先把数据划分为组,假定每组k个比特,现假定传送的数据M=101001(k=6)。CRC运算就是在数据M的后面添加供差错检测的n位冗余码,虽然增大了数据传输的开销,但是却可以进行差错检测。
      n位冗余码的计算过程如下:在M后面添加n个0,得到(k+n)位的数除以收发双方事先商定的长度为(n+1)位的除数P,得出商是Q而余数是R(n位,比P少一位)。余数R就是冗余码。具体计算过程如图1所示(注意用模2运算进行加法时不进位,例如1111+1010=0101,减法和加法一致):
      FCS计算
      为了进行检错而添加的冗余码常称为帧检验序列FCS(Frame Check Sequence)
      在接收端把接收到的数据以帧为单位进行CRC检验,把收到的每一个帧都除以同样的除数P(模2运算),然后检查得到的余数R,若传输过程中无差错,那么经过CRC检验后得出的余数R肯定是0。
      若是在数据链路层仅仅使用循环冗余检验CRC差错检验技术,则只能做到对帧的无差错接受,即凡是接收端数据链路层接受的帧,我们都能以非常接近于1的概率认为这些帧在传输过程中没有产生差错。
      只使用CRC差错检验的数据链路层协议并没有向网络层提供“可靠传输”的服务,而OSI的观点是数据链路层必须是可靠传输的。传输差错可分为两大类:一类是前面所提到的最基本的比特差错,而另一类传输差错则更加复杂,就是收到的帧没有出现比特差错,但却出现了帧丢失、帧重复、帧失序。因此在CRC检错的基础上,增加了帧编号、确认和重传机制。收到正确的帧就要向发送端发送确认,发送端在一定的期限内若若没有收到对方的确认,就认为出现了差错,因而就进行重传,直到收到对方的确认为止,但是由于现在的通信线路的质量已经大大提高了,因此因特网广泛使用的数据链路层协议都不使用确认和重传机制,即不要求数据链路层向上提供可靠传输的服务(代价太高)。若在数据链路层传输数据时出现了差错并且需要进行改正,那么改正差错的任务由上层协议(如运输层的TCP协议)来完成,时间证明这样做提高了通信效率。

二、点对点协议PPP

历史上,在通信线路质量较差的时候,在数据链路层使用可靠传输协议是主流的,比如能够实现可靠传输的高级数据链路控制HDLC(High-level Data Link Control)。目前使用得最广泛的数据链路层协议时点对点协议PPP。

  1. PPP协议的特点
    PPP协议是用户计算机和ISP进行通信时所使用的数据链路层协议。在1994,PPP协议就已经成为因特网的正式标准。

    • PPP协议应该满足的需求
      (1) 简单:IETF在设计因特网体系结构时把其中最复杂的部分放在TCP协议中,而网际协议IP则相对比较简单,提供不可靠的数据报服务。这种情况下,数据链路层没有必要提供比IP协议更多的功能。因此,对数据链路层的帧,不需要纠错、序号或者流量控制。在误码率较高的无线链路上可能会需要更为复杂的链路层协议。因此IETF把“简单”作为首要的需求
      简单的设计使得协议在实现时不容易出错,因而使得不同厂商对协议的不同实现的互操作性提高了,这也是协议标准化的一个主要目的。
      (2) 封装成帧:必须规定特殊的字符作为帧定界符。
      (3) 透明性:必须保证数据传输的透明性。如果数据中碰巧出现了和帧定界符一样的比特组合,就要采用有效的措施来解决这个问题。
      (4) 多种网络层协议:能够在同一物理链路上同时支持多种网络层协议(如IP和IPX等)的运行。
      (5) 多种类型链路:能够在多种类型的链路上运行,如串行的(一次只发送一个比特)或并行的(一次并行地发送多个比特),同步的或异步的,低速的或高速的……点对点链路。
      (6) 差错检测(error detection):能够对接收端收到的帧进行检测,并立即丢弃有差错的帧
      (7) 检测连接状态:拥有一种机制能够及时(不超过几分钟)自动检测出链路是否处于正常工作状态。
      (8) 最大传送单元:必须对每一种类型的点对点链路设置最大传送单元MTU的标准默认值。促进各种实现之间的互操作性,若高层协议发送的分组过长并超过MTU的数值,PPP就要丢弃这样的帧。
      (9) 网络层地址协商:提供一种机制使通信的两个网络层(如两个IP层)的实体能够通过协商知道或能够配置彼此的网路层地址。只有知道对方网络层地址时,才能够保证网络层能够传送分组。
      (10) 数据压缩协商:提供一种方法来协商使用数据压缩算法。但是PPP协议并不要求将数据压缩算法进行标准化。

    • PPP协议不需要的功能
      在RFC 1547中明确了PPP协议不需要的功能。
      (1) 纠错(error correction):可靠传输由运输层的TCP协议负责,而PPP协议只进行检错PPP协议是不可靠传输协议
      (2) 流量控制:端到端的流量控制由TCP负责。
      (3) 序号:PPP不是可靠传输协议,因此不需要使用帧的序号。
      (4) 多点线路:PPP协议不支持多点线路(即一个主站轮流和链路上的多个从站进行通信),而只支持点对点的链路通信。
      (5) 单向通信和双向交替通信:PPP协议只支持双向同时通信。
      1.3 PPP协议的组成
      (1) 一个将IP数据报封装到串行链路的方法。PPP既支持异步链路(无奇偶校验的8比特数据),也支持面向比特的同步链路。IP数据报作为PPP帧中的信息部分,其长度受到最大传送单元MTU的限制。
      (2) 一个用来建立、配置和测试数据链路连接的链路控制协议LCP(Link Control Protocol)。通信的双方可协商一些选项。
      (3) 一套网络控制协议NCP(Network Control Protocol),其中的每一个协议支持不同的网络层协议,如IP、OSI的网络层、DECnet以及AppleTalk等。

  2. PPP协议的帧格式

    • 字段的意义
      PPP的帧格式如图2所示,PPP帧的首部和尾部分别为四个字段和两个字段。首部的第一个字段和尾部的第二个字段都是标志字段F(Flag),规定为0x7E,标志字段表示一个帧的开始或结束。因此标志字段就是PPP帧的定界符。连续两帧之间只需要一个标志字段。若出现连续两个标志字段,就表示这是一个空帧,应当丢弃。
      首部中的地址字段A规定为0xFF(即1111 1111),控制字段C规定为0x03(即0000 0011)。这两个字段实际上并没有携带PPP帧的信息。PPP首部的第四个字段是2字节的协议字段。当协议字段为0x0021时,PPP帧的信息字段就是IP数据报。尾部中的第一个字段(2字节)是使用CRC的帧检验序列FCS。
      PPP的帧格式
    • 字节填充
      当信息字段中出现和标志字段中一样的比特组合(0x7E)时,就必须采用一些措施使这种形式上和标志字段一样的比特组合不出现在信息字段中。
      PPP使用异步传输时,定义转义字符为0x7D,则使用字节填充,将信息字段中出现的标志字段0x7E转变成2字节序列(0x7D,0x7E),转义字符0x7D和ASCII码的控制字符(即数值小于0x20的字符)也需要转换。
    • 零比特填充
      PPP协议用在SONET/SDH链路时,是使用同步传输(一连串的比特连续传送)而不是异步传输(逐个字符传送)。
      先扫描整个信息字段(通常是硬件实现),只要发现有5个连续1,则立即填入一个0.接收端在收到一个帧时,先找到标志字段F以确定一个帧的边界,接着再用硬件对其中的比特流扫描,每当发现5个连续1时,就把这5个连续1后的一个0删除,还原成原来的信息比特流,这就实现了透明传输。
      零比特填充
  3. PPP协议的工作状态
    PPP链路的初始化:当用户拨号接入ISP后,就建立了一条从用户PC机到ISP的物理连接。
    这时用户PC机向ISP发送了一系列的LCP分组(封装成多个PPP帧),以便建立LCP连接。这些分组及其响应选择了将要使用的一些PPP参数。
    接着进行网络层配置,NCP给新接入的用户PC机分配一个临时的IP地址。这样,用户PC机就成为因特网上的一个有IP地址的主机。
    PPP链路终止:当用户通信完毕时,NCP释放网络层连接,收回原来分配出去的IP地址。接着,LCP释放数据链路层连接。最后释放的是物理层的连接。
    以上过程可由图4的状态图来描述:
    PPP协议的状态图
    可见PPP协议已经不是纯粹的数据链路层的协议,它还包含了物理层和网络层的内容。

三、使用广播信道的数据链路层

  1. 局域网的数据链路层
    局域网最主要的特点是:网络为一个单位所拥有,且地理范围和站点数目均有限
    局域网具有如下一些优点:
    (1) 具有广播功能,从一个站点可很方便地访问全网。局域网上的主机可共享连接在局域网上的各种硬件和软件资源。
    (2) 便于系统的扩展和逐渐地演变,各设备的位置可灵活调整和改变。
    (3) 提高了系统的可靠性(reliability)、可用性(availability)和生存性(survivability)。
    按照网络拓扑进行分类,有星形网、令牌环形网、总线网、树形网等等。
    共享信道要着重考虑的一个问题就是如何使众多的用户能够合理而方便地共享通信媒体资源,这在技术上有两种方法:
    (1) 静态划分信道。如前一篇介绍过的频分复用、时分复用、波分复用和码分复用等等。用户只要分配到了信道就不会和其他用户发生冲突。但这种划分信道的方法代价较高,不适合于局域网使用。
    (2) 动态媒体接入控制,又称为多点接入(multiple access)。其特点是信道并非在用户通信时固定分配给用户。这里又分为两类:
    • 随机接入:随机接入的特点是所有的用户可随机地发送信息,但如果恰巧有两个或更多的用户在同一时刻发送信息,那么共享媒体上就要产生碰撞(即发生了冲突),使得这些用户的发送都失败。因此,必须有解决碰撞的网络协议。
    • 受控接入(比较少用):受控接入的特点是用户不能随机地发送信息而必须服从一定的控制。这类的典型代表有分散控制的令牌环局域网和集中控制的多点线路轮询(polling)。
  2. CSMA/CD协议

    • 应用环境
      最早的以太网是将许多计算机都连接到一根总线上。当一台计算机发送数据时,总线上的所有计算机都能检测到这个数据,这种就是广播通信方式,可以实现一对多的广播通信。每一台计算机的适配器都有一个独一无二的地址,当且仅当数据帧中的目的地址与适配器ROM中存放的硬件地址一致时,该适配器才接受这个数据帧,对于不是发送给自己的数据帧就丢弃,这样在总线上实现一对一的通信。
      为了通信的简便,以太网采取了两种措施:(1) 采用较为灵活的无连接的工作方式,即不必先建立连接就可以直接发送数据。适配器对发送的数据帧不进行编号,也不要求对方发回确认以太网提供的服务是不可靠的交付,即尽最大努力的交付。(2) 以太网发送的数据都使用曼彻斯特(Manchester)编码的信号(把每一个码元再分成两个相等的间隔。码元1是在前一个间隔为低电压而后一个间隔为高电压,码元0正好相反,从高电压变到低电压。如图5所示,也可以采用相反的规定)。这种编码方式的缺点就是它所占的频带宽度比原始的基带信号增加了一倍。
      曼彻斯特编码
      总线的传输资源是有限的,同一时间只能允许一台计算机发送信息,否则各计算机之间就会互相干扰,结果大家都无法正常发送数据。
      以太网采用的协调方法是使用一种特殊的协议CSMA/CD(Carrier Sense Multiple Access with Collision Detection)。
    • CSMA/CD协议的要点
      a. 多点接入:说明是总线型网络,许多计算机以多点接入的方式连接在一根总线上。协议的实质是载波监听和碰撞检测。
      b. 载波监听:发送前先监听。即在每一个站发送数据之前要先检测总线上是否有其他站在发送数据,等到信道空闲时再发送数据。
      c. 碰撞检测(冲突检测):边发送边监听。即适配器便发送数据边检测信道上的信号电压的变化情况,以便判断自己在发送数据时,其他站是否也在发送数据。当几个站同时在总线上发送数据时,总线上的信号电压变化幅度会增大(互相叠加)。
    • CSMA/CD协议执行步骤
      a. 适配器从网络层1获得一个分组,加上以太网的首部和尾部,组成以太网帧,放入适配器的缓存中,准备发送。
      b. 若适配器检测到信道空闲(即在96比特时间内没有检测到信道上有信号),就发送这个帧,若检测到信道忙,则继续检测并等待信道转为空闲(加上96比特时间),然后发送这个帧。
      c. 在发送过程中继续检测信道,若一直未检测到碰撞,就顺利的把这个帧成功发送完毕。若检测到碰撞,则中止数据的发送,并发送人为干扰信号。
      d. 在中止发送后,适配器执行指数退避算法,等待一段时间后返回步骤b。

    在使用CSMA/CD协议的以太网不可能进行双向同时通信(全双通信工),而只能进行双向交替通信(半双工通信)。此外以太网还采取一种强化碰撞的措施,就是当发送数据的站一旦发现发生了碰撞时,除了立即停止发送数据外,还要再继续发送32比特或48比特的人为干扰信号(jamming signal),以便让所有用户都知道现在已经发生了碰撞。以太网号规定了帧间最小间隔为9.6μs,相当于96比特时间,这样使得刚刚收到数据帧1的站接收缓存来得及清理,做好接收下一帧的准备。

四、参考文献

[1] 谢希仁. 计算机网络(第五版)

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值