• 计算机网络链路层的相关知识


    参看书本:计算机网络,谢希仁等
    参考网站:https://blog.csdn.net/hhthwx/article/details/78272023

                       **  数据链路层**
    

    数据链路层
    简称:链路层。在两个相邻结点之间传输数据时,数据链路层将网络层交下来的IP数据报组装成帧,在两个相邻结点间的链路上传送帧。每一帧包括数据必要的控制信息(如同步信息,地址信息,差错控制)
    路由器在转发分组时只是用下面的三层

    数据链路层的三个基本问题:

    1. 封装成帧
      网络层的IP数据报必须向下传送到数据链路层,成为帧的数据部分,同时它的前面和后面分别加上首部和尾部。,然后封装成为一个完整的帧。帧的长度等于帧的数据部分的长度加上帧首部和帧尾部的长度。首部和尾部的主要作用是进行帧界定,同时也包括必要的控制信息。在发送帧时,是从帧首部开始发送的在数据传输中出现差错,帧界定符的作用更加明显。

    2.透明传输
    透明传输是指不管所传输数据是什么样的比特组合,都应当能够在链路上传输。当传输数据中的比特组合恰巧与某一个控制信息完全一样时,就必须采取适当的措施,是接收方不会将这样的数据误认为是某种控制信息。这样才能保证数据链路层的传输是透明的。
    为了解决透明传输问题,就是必须设法使数据中可能出现的控制字符在接收端不被解释为控制字符。具体方法:发送端的数据链路层在数据中出现控制字符的前面插入一个专一字符“ESC”。而在接收端的数据链路层在将数据送往网络层之前删除这个插入的转义字符。这种方法称为字节填充或字符填充。如果专一字符也出现在数据中,那么解决问题的方法相同。

    3.差错检验
    村为了保证数据传输的可靠性,在计算机网络传输数据时,必须采用各种差错检测措施。目前,在数据链路层广泛使用CRC校验

    数据链路层的可靠传输
    我们需要数据链路层向上面的网络层提供“可靠传输”的服务,即做到:数据链路层的发送端发送什么,在对应的接收端就接收什么。
    如果出现了传输差错,只用CRC校验是无法实现可靠的数据传输。
    停止等待协议。(超时计时器,超时重传)。停止等待协议会是数据传输效率降低,尽量不采用。

    点对点协议PPP
    PPP协议的特点:
    1.简单 :每接收到一个帧就会进行CRC校验。如果CRC校验正确,就收下这个帧,反之就丢弃这个帧,其他什么都不做。使用PPP协议的数据链路层向上不提供可靠的数据传输服务。如果要可靠的传输,则由运输层来完成。
    2.封装成帧:PPP协议规定了特殊字符作为帧界定符。
    3.透明性:PPP协议能够保证数据传输的透明性。
    4.多种网络层协议和多种类型链路,PPP协议能够在同一条物理链路上同时支持多种网络层协议(如IP,IPX)的运行,以及能够在多种类型的链路上运行。例如:串行的或并行的,同步的或异步的,低速的或高速的,电的或光的点对点链路 。
    5.差错检验。对接收端接收的帧进行检测(但不进行纠错),并立即丢弃有差错的帧。
    6.检测链接状态:PPP协议具有一种机制能够及时自动检测出链路是否处于正常工作状态。
    7.最大传送单元:PPP协议对每一种类型的点对点链路设置最大传送单元MTU。如果高层协议发送的分组过长并超过MTU的数值,PPP就要丢弃这样的帧,并返回差错。

    PPP协议的三个组成部分
    (一):一个将IP数据报 封装到串行链路的方法。PPP既支持异步链路(无奇偶校验的8比特数据),也支持面向比特的同步链路。IP数据报在PPP帧中就是其信息部分
    (二):一个用来建立,配置和测试数据链路连接的链路控制协议LCP
    (三):一套网络控制协议NCP,其中每个协议支持不同的网络层协议。

    PPP协议的帧格式
    PPP帧的格式

    1.1 PPP帧的首部
    首部中的标志字段F(Flag),规定为0x7E(符号0x表示它后面的字符是用十六进制表示的。十六进制的7E的二进制表示是01111110),标志字段表示一个帧的开始。
    首部中的地址字段A规定为0xFF(即11111111)。
    首部中的控制字段C规定为0x03(即00000011)。
    首部中的2字节的协议字段:
    (1)当协议字段为0x0021时,PPP帧的信息字段就是IP数据报。
    (2)当协议字段为0xC021时,PPP帧的信息字段就是PPP链路控制协议LCP的数据。
    (3)当协议字段为0x8021时,PPP帧的信息字段就是网络层的控制数据。

    1.2 PPP帧的信息字段部分
    信息字段的长度是可变的,不超过1500字节。

    1.3 PPP帧的尾部
    尾部中的第一个字段(2个字节)是使用CRC的帧检验序列FCS。
    尾部中的标志字段F(Flag),规定为0x7E(符号0x表示它后面的字符是用十六进制表示的。十六进制的7E的二进制表示是01111110),标志字段表示一个帧的结束。
    注:标志字段就是PPP帧的定界符。连续两帧之间只需要用一个标志字段。如果连续出现两个标志字段,就表示这是一个空帧,应当丢弃。
    2. 透明传输的实现方式

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

    2.1 字节填充——PPP使用异步传输
    当PPP使用异步传输时,它把转移符定义为0x7D,并使用字节填充。
    RFC1662规定了如下填充方法:
    (1)把信息字段中出现的每一个0x7E字节转变为2字节序列(0x7D,0x5E)。
    (2)若信息字段中出现一个0x7D的字节(即出现了和转义字符一样的比特组合),则把转义字符0x7D转变为2字节序列(0x7D,0x5D)。
    (3)若信息字段中出现ASCII码的控制字符(即数值小于0x20的字符),则在该字符前面要加入一个0x7D字节,同时将该字符的编码加以改变。例如,出现0x03(在控制字符中是“传输结束”ETX)就要把它转变为2字节序列的(0x7D,0x31)。
    由于在发送端进行了字节填充,因此在链路上传送的信息字节数就超过了原来的信息字节数。但接收端在接收到数据后再进行与发送端字节填充相反的变换,就可以正确地恢复出原来的信息。

    2.2 零比特填充——PPP使用同步传输
    当PPP使用同步传输时,使用零比特填充。
    零比特填充的具体方法:
    (1)在发送端先扫描整个信息字段(通常使用硬件实现,但也可以用软件实现,但是会慢一些)。
    (2)只要发现有5个连续的1,则立即填入一个0。
    (3)接收端在收到一个帧时,先找到标志字段F以确定帧的边界,接着再用硬件对其中的比特流进行扫描,每当发现5个连续1时,就把5个连续1后的一个0删除,以还原成原来的信息比特流。

  • 相关阅读:
    小程序swiper组件实现间距轮播
    小程序form静态页面跳转
    批量添加Iconfont图标库图标
    Vant Weapp 有赞小程序UI库 ICON 组件的本地图标路径支持
    $rootScope、$apply、$watch
    EF code first 数据模型创建数据库
    angularjs directive2
    angularjs directive
    angularjs service
    angular repeat
  • 原文地址:https://www.cnblogs.com/131415-520/p/13488536.html
Copyright © 2020-2023  润新知