TCP/IP协议之数据链路层

时间:2024-03-27 21:58:37

读完本篇文章将会了解以下问题

1. 数据链路层概述

2. 数据链路层的三个问题

3. 可靠传输

---------------------------------------------------------------------------------------------------------------------------

一、数据链路层概述

       数据链路层是TCP/IP五层参考模型的第二层,介与物理层和网络层之间,它定义了在单个连路上如何传输数据。数据链路层在物理层提供的服务的基础上向网络层提供服务,其最基本的服务是将源自网络层的数据可靠地传输到相邻节点的目标机网络层。数据链路层特点

  1. 将数据组合成数据块,在数据链路层中称这种数据块为帧(frame),帧是数据链路层的传送单位。
  2. 控制帧在物理信道上的传输,包括处理传输差错、调借发送速率以使与接收方相匹配。
  3. 在两个网络实体之间提供数据链路通道的建立、维持和释放的管理。

TCP/IP协议之数据链路层

                                                                                      数据链路层间的通信

链路、数据链路、适配器、帧的概念:

  1. 链路:一条点到点的物理线路段,中间没有任何其他的交换结点,一条链路只是一条通路的一个组成部分 。
  2. 数据链路:除了物理线路外,还必须有通信协议来控制这些数据的传输。若把实现这些协议的硬件和软件加到链路上,就构成了数据链路。 
  3. 适配器:也就是网卡,就是用来实现数据链路上一些协议。
  4. 帧:数据链路层上传送的就是帧

二、数据链路层的三个问题

2.1、封装成帧

  数据链路层就是在ip数据报的前面和末尾加了一个首部和尾部来代表ip数据包的开始和结束,首部和尾部都是由8位二进制数表示的,可以一样也可以不一样。

TCP/IP协议之数据链路层

2.2、透明传输

  有一个这样的问题, 在ip数据包中如果有一个跟帧尾部一样的8位二进制数,则会提前结束接受数据包,这样数据就被破坏了。出现了如下图这样的问题:

TCP/IP协议之数据链路层

       解决方案:通过在特殊字符前面增加一个转义字符 ESC,在接收端,将数据包中所有ESC的字符删除,遇到两个ESC的,就删除第一个,遇到该转义字符,后面一个字符不管是什么都作为数据包的一部分。

TCP/IP协议之数据链路层

2.3、差错检测

  问题:传输过程中可能会产生比特差错:1 可能会变成 0 而 0 也可能变成 1。在一段时间内,传输错误的比特占所传输比特总数的比率称为误码率 BER (Bit Error Rate)。为了检测传送的帧中ip数据包是否完整,是否没有被损坏,所以需要差错检测

  解决:

  1. 奇偶检验法
  2. 循环冗余检测CRC

2.3.1奇偶检验法

TCP/IP协议之数据链路层

       如上图(偶检验):数据总共为d位,后面一位是校验位;采用偶(奇)校验的时候我们要在校验位添加0/1使得总共的1的位数为偶(奇)数;接收方也使用确认1的位数来检 测是否发生了错误,如果发生了错了则丢弃这个数据帧或者说包;

奇偶检验检验是最简单但是也是最没有保障的。其一:是因为奇偶检验有“自盲性”,因为偶检验不能识别偶数个位的bit错误的发生;而奇校验不能识别奇数个位的bit错误(1位除外,1位错误奇偶都可以识别);其二:因为奇偶校验能发现错误但是不能纠正错误;

2.3.2循环冗余检测CRC

TCP/IP协议之数据链路层

TCP/IP协议之数据链路层

检测:

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

    若余数 R ≠ 0,则判定这个帧有差错,就丢弃

  生成多项式:也很简单,例如上面的除数1101  就用P(X)=X3+X2+1 (X3是x的三次方的意思)  最高位是2的三次方,就是x的三次方这样算,例如,101101 P(X)=X5+X3+X2+1。

三、可靠传输

       在有些情况下,我们需要数据链路层向上的网络层提供“可靠传输”的服务,就是发送端发送什么,在对应的接收端就收到什么, 前面的CRC只能检测出位数的差错,不能正确的检测出更精准的错误。

3.1、停止等待协议

  停止等待就是每发送完一个分组就停止发送,等待对方的确认。在收到确认后再发送下一个分组。       

  超时重传:解决上面如果数据分组或确认分组丢失时,发送方将会一直等待接收方的确认分组的问题,设置一个超时计时器,若到了超时计时器所设置的重传时间,而发送方仍收不到接收方的任何确认分组,则会重传原来的分组。

  重复分组:如果只使用超时重传来解决,不用发送确认分组,那么会出现重复分组的问题,就是当接收方收到分组后,发回确认分组时,确认分组丢失,那么会触发超时重传,则接收方会收到两个重复的分组,这里需要注意的是,是确认分组丢失。第一次发送的分组已经正确接收了。

3.2、退回N步协议

  其实跟停止等待协议差不多,只是使用的是流水线传输方式,发送方不间断的发送分组,每次发送的分组大小有限制,如果不限制,可能会使接收方或网络来不及处理这些分组,导致分组的丢失,所以每次发送的分组大小可能是5,6或者更多。这种限制就是回退N步协议。

        回退N步协议:利用发送窗口来限制发送方连续发送分组的个数。要是发送窗口为1就是我们上面所讨论的停止等待协议。

3.3、选择重传协议

  改进回退N布协议,  方式都是一样, 在接受方必须逐一确认, 但是出现错误,只需要重传出现错误的那一个分组,不用全部重传,这里的全部,指的是在出现错误的分组之后的所有分组,前提是在同一个发送窗口中。

 

        借鉴博文:https://www.cnblogs.com/zhangyinhua/p/7608173.html