【计算机网络】数据链路层

【计算机网络】数据链路层


数据链路层简介

数据链路层的作用

将网络层的数据进行封装,并保证数据在物理层之间可以准确的传输。注意:这里的准确传输指的是所接受的数据一定是正确的,而出错的数据,直接丢弃。通俗点将,就是保质不保量

基本概念

链路:指的是物理线路,例如:双绞线,光纤等

数据链路:指的是逻辑线路,这里是一些必要的通信协议,保证了数据传输的可靠性

帧:把网路层数据打成的包,是数据链路层之间传输的基本数据单元

数据链路层最大传送单元(MTU):指的是数据链路层中,一个帧中所能承载的最大的数据部分的长度

三个基本问题

数据链路层存在着很多种协议,但是所有协议都解决了三个基本问题:封装成帧,透明传输,差错校验。

封装成帧

将网络层传下来的分组添加首部和尾部,用于标记帧的开始和结束。

透明传输

这里的透明传输并不是说让数据变得“透明”,而是让帧的首部和尾部变得“透明”。

帧使用首部和尾部进行定界,如果帧的数据部分含有和首部尾部相同的内容,那么帧的开始和结束位置就会被错误的判定。需要在数据部分出现首部尾部相同的内容前面插入转义字符。如果数据部分出现转义字符,那么就在转义字符前面再加个转义字符。在接收端进行处理之后可以还原出原始数据。这个过程透明传输的内容是转义字符,用户察觉不到转义字符的存在。

差错检测

检测传输的数据是否有错误,CRC是数据链路层广泛使用的一种检错技术。

循环冗余检验CRC得到FCS,可以通过FCS判断是否出错;如果出错,并不能改正,而是直接丢掉。

点对点链路的PPP协议

对于点对点的链路,应用最广泛地就是PPP协议

PPP协议的帧格式

  • F字段:标志着帧的开始和结束,默认为0X7E
  • A字段:预留字段,默认为FF
  • C字段:预留字段,默认为03
  • 协议:
    • 当协议字段为0x0021时,表示信息部分为IP数据报
    • 字段为0xc021时,表示信息部分为LCP数据
    • 0x8021表示为网络层的控制数据
  • FCS:是使用CRC的帧检验序列

PPP协议实现透明传输

为了避免信息部分也出现7E,FF,03等字段,PPP协议提供了两种解决方案

字节填充

  • 当信息字段中出现0x7E时,将每一个0x7E字节转变成2字节序列(0x7D,0x5E)

  • 若信息字段中出现一个0x7D的字节,则将其转变成2字节序列(0x7D,0x5D)

  • 若信息字段中出现ASCII码的控制字符(即数值小于0X20的字符),则该字符前面需要加入一个0x7D字节,同时将该字符的编码加以改变(+20)。例如,出现0x03,就要把它转为2字节序列(0x7D,0x23)

这里举例说明:如果一个帧的信息部分,想要传递0x7E,那么PPP协议会将其变为0x7D0x5E进行传输。

零比特填充

有些时候,数据链路层传输的不是字符,而是比特位(bit),这时就要使用零比特填充法。

原理类似,都是为了避免特殊字段被信息部分影响。

7E用二进制表示,是0111 1110,这里以7E为例,其他特殊标识类似

具体做法为:在发送端扫描整个信息字段,当有5个1连续出现时,立即填入一个0,保证信息字段中不会出现6个连续1。

广播链路的CSMA/CD协议

广播链路是一种总线的结构,也就是说,当一台计算机发送数据时,总线上的所有计算机都能检测到这个数据。

但是,有时候我们并不想让所有计算机都接受,而是想指明特定计算机发送数据。为了在总线上实现一对一的通信,我们可以利用MAC地址来标识不同的计算机。

广播链路上一对一通信的原理我们理清楚了,但是还有一个问题,怎么保证链路总线上只有一种信号在传输?

也许你会想到利用各种编码方式,使信道可以复用,但是这些编码有一个缺点,那就是所占的频带宽度比原始的基带信号增加了一倍。

所以我们可以换一种思路,如何保证同一时刻只有一个信号正在传输?这样正是CSMA/CD协议解决的主要问题

CSMA/CD协议的要点如下:

  • 多点接入
  • 载波监听
  • 碰撞检测

τ=总线长度/电磁波传输速度

最短帧长:希望检测到碰撞时,帧还没有发送结束,以太网中小于64的都是无效帧


Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×