zoukankan      html  css  js  c++  java
  • 《深入理解计算机网络》读后小记 5、数据链路层

    一、数据链路层基础

      1、定义:数据链路层是真正用于数据传输的逻辑通道。

      2、划分数据链路层的必要性:

        (1)、由于物理层传输介质的多样性和通信规程的各不相同,所以需要从逻辑意义上构建一条性能稳定、不受传输介质类型影响的逻辑数据传输通道。

        (2)、物理层的数据是按位传输的,效率低下、易出差错,而数据链路层是按“帧”传输的,一帧有数千个比特位,传输效率高、不易出错。

      3、数据链路层结构:

        (1)、各层的SAP(Service Access Point,服务访问点),它是上层访问下层所提供服务的点。

        (2)、MAC(Medium Access Control,介质访问控制)子层,它 的基本功能就是如何控制不同用户数据对物理层传输介质的访问,包括介质访问时的寻址和介质访问冲突等,与各种传输介质访问有关的问题都放在MAC子层解决,如:数据帧的封装/卸装,帧的寻址和识别,帧的接受和发送,帧的差错控制,介质访问冲突控制等。

        (3)、LLC(逻辑链路控制,Logical Link Control)子层,负责数据链路层中逻辑链路的控制,包括逻辑链路的建立和释放,控制信号交换、数据流量控制,解释上层通信协议传来的命令并且产生响应,以及克服数据在传送的过程中所可能发生的种种问题,如数据发生错误、重复收到相同的数据、接受数据的顺序与传送的顺序不一致等。解决的都是与与传输介质访问无关的问题。

    二、数据链路层的主要功能及实现原理

      1、数据链路层的一项基本功能是想网络层提供透明、可靠的数据传输服务。“透明”是指在数据链路层上所传输的数据在内容、格式及编码上都没有限制,也就是可以传输一些特殊用途的控制字符。

      2、数据链路是由数据链路层中的LLC子层通过相应的通信规程(协议)建立并管理的。

      3、数据链路层是为上层提供服务,服务分为以下三类:

        (1)、有确认的面向连接服务。包括两层含义:一是在提供服务时,必须先建立好双方通信连接;二是在提供服务时,必须要求对方确认后才进行。

        (2)、有确认的无连接服务。接收端在接收到每一帧数据时都向发送端确认,但在进行数据传输前是不需要建立专门的数据链路的。其主要用途就是用于一些不可靠信道中的数据传输,如各种无线通信系统。

        (3)无确认的无连接服务。不需要在传输数据前建立专门的通信连接,不要求接收端对接收到的每一帧数据进行确认。

      4、数据链路层的成帧功能就包括:一是将来自网络层的数据分组封装成数据帧;二是将来自物理层的一个个比特流组装成数据帧。

      5、数据链路层的帧封装原理:数据包到达数据链路层后加上数据链路层的协议头和协议尾构成一个数据帧。在每个数据帧的首位加上帧头部和帧尾部,构成一个完整帧。

      6、比特流的帧组装和透明传输原理:

        (1)、字节计数法:以一个特殊字符代表一个帧的开始,并以一个专门的字段来标识当前帧内字节数。

        (2)、字符填充的首尾定界符法:用一些特殊的控制字符来定界一个帧的起始和结束。

        (3)、比特填充的首位定界符法:通过在帧头和帧尾各插入一个特定的比特串来标识一个数据帧的起始和结束,此比特串称为帧标识符。

        (4)、在物理层采用特定的比特编码方法时采用,借用一些违法编码序列来定界帧的起始和终止。

        

    三、差错控制方案

      1、差错控制分为差错检测和差错纠正。差错检测是通过在数据帧中添加冗余码来检测数据在传输过程中是否出现差错,如PCC(奇偶校验码检测)、CRC(循环冗余校验),都不具备纠错功能。差错纠正方面主要有反馈检测法和自动请求重发法(如空闲请求重发法,连续请求重发法),也有一些具有自动纠错功能的编码,如海明纠错码。

      2、奇偶校验码检错方案:通过在数据帧的末尾添加一位校验码,使得最终数据帧中“1”的个数为奇数或者偶数,来达到校验的目的。ASCII中高7为是信息码,最后1位就是奇偶校验码。

      3、循环冗余校验检错方案:选定一个K位二进制数(或者由协议指定),再在数据帧后添加k-1个0构成一个新帧,再用新帧除以那个k位二进制数,得到一个k-1位的余数(不足的前面用0补充),用这个余数替换新帧后面的k-1个0,然后发送到接收端,接收端就能验证数据是否出错了!

      4、反馈检测法:接收端收到数据帧后,再把数据帧发送回发送端,由发送端来判断接收端是否正确接受了。使用计时器是为了避免数据帧在传输过程中完全丢失的问题。使用“帧编号”是为了防止因网络延迟而导致发送端一直发送数据帧的问题,因为有了“帧编号”,接收端可以选择性的接受了。

      5、空闲重发请求方案:又称“停-等法”,发送端发送数据帧后,开始等待,接收端接受数据帧后会给发送端一个确认消息发送端根据这个确认消息来决定是要重发这个数据帧还是发送下一个数据帧。

      6、连续重发请求方案:发送端连续发送一系列“数据帧”(发送的数量要视缓存空间大小而定),在这个发送过程中可以接收来自接收端的响应信息,并作出是否重发的判断。回退N帧策略是指发送端收到错误响应消息,就从该错误帧开始,后面的数据帧全部重发。选择重发策略是发送端根据错误帧序号选择数据帧,插入到发送帧队列前面,给予重发。

      7、海明纠错码:(1)用公式确定校验码位数;(2)校验码的位置必须是在2的n次方的位置,如1、2、4、8等;(3)确定校验码的原则是:第i位校验码从当前位置连续校验i位,跳过i位,再连续校验i位,再跳过i位,依次类推,得出所有校验码。海明校验码的原理就是当校验码出错了,影响的只是此校验码的校验结果,而如果是某一个数据位出错了,那么会有几个校验码校验的结果不对,并且可以确定出这个出错数据位的位置。所以海明纠错码只能检测一位错误。

    四、流量控制

      1、“流量控制”包含两方面的含义:一是发送端的数据发送速度要与接收端的接收速度相匹配,避免数据丢失;二是发送端的数据发送速度要与线路的承载速率相匹配,避免数据丢失。

      2、基于反馈的流量控制方案:XON/XOFF(继续传输/停止传输)流量控制方案,其基本思想是当接收端认为不能再接受数据时(接收端缓存空间满了或者接近满时)接收端会向发送端发送一个XOFF控制字符,发送端接收到后就停止发送;当接收端认为可以再接受数据时,向发送端发送一个XON控制字符,发送端收到后就恢复发送数据。

      3、基于速率的流量控制方案:滑动窗口机制,“窗口”指发送端和接收端的缓存空间大小;“滑动”的意思指缓存空间中存放的未处理帧数是变化的,发送端在收到确认帧后会删除保存在缓存中的待重发帧,而接收端向网络层提交一个帧后也会删除原来保存在缓存中的帧。

    五、几种传输协议

      1、面向字符的BSC协议(也称“字符填充的首位界定符法”),数据帧中的数据都被看做字符序列,所有的控制信息都是字符形式,用一个或多个SYN标记数据块的开始,用字符ETX标记数据块的结束。其透明传输原理是在同步传输协议中设置转义字符DLE(Data Link Escape,数据链路封装)。

      2、面向比特的SDLC和HDLC协议,其头尾都用一个特殊的比特序列(如01111110)来标记,HDLC的链路结构、操作方式,以及帧结构等概念见原书206页。

      3、面向字符的PPP(Point-to-Point Protocol,点对点协议)同步传输协议:是一种应用非常广泛的广域网数据链路层协议,其简介、帧结构、链路建立、使用和拆除流程,身份认证等概念见原书212页。

    六、数据链路层的主要网络设备

      1、计算机网卡:也叫网络适配器,用来连接计算机网络的,具体分类见原书218页。

      2、网桥,被比喻成聪明的中继器(Repeater),因为中继器的主要作用是扩展网络的物理连接范围,而网桥不仅可以扩展网络的物理连接范围,还可以对MAC地址分区,隔离不同物理网段之间的碰撞(也就是隔离“冲突域”)。

      3、网桥的两种特性:一是可基于物理网段的MAC地址进行学习;二是可以隔离冲突域。

      4、交换机(Switch)可以说是集线器和网桥的升级替换产品,因为交换机不但具备集线器的集中连接功能,还具备网桥的数据交换功能。它的主要特性有三点:一是具有多个交换端口;二是数据转发效率更高;三是更强的MAC地址学习能力。

      5、MAC地址表也就是常说的CAM(Content Addressable Memory,内容可寻址存储器)表,保存的是MAC地址主机与所连接的交换端口的映射。

      6、二层交换原理:当数据帧发送到交换机上时,交换机查看CAM表,来确定是将数据帧发送到对应端口上的主机还是交换机。

  • 相关阅读:
    大型网站的可伸缩性架构如何设计?
    前端路由跳转基本原理
    强大的CSS:用纯css模拟下雪的效果
    package.json 和 package-lock.json 文件说明
    CSS 继承深度解析
    EJS-初识
    百度前端学院-基础学院-第20到21天之setTimeOut与setInterval
    百度前端学院-基础学院-第20到21天
    es6字符串方法
    字符串方法之padStart和padEnd
  • 原文地址:https://www.cnblogs.com/gaojiang/p/3963920.html
Copyright © 2011-2022 走看看