文章目录
数据链路层基本概述
链路:从一个结点到相邻结点的一段物理线路,而中间没有任何其他的交换结点。
数据链路:是指把实现通信协议的硬件和软件加到链路上,就构成了数据链路。
数据链路层以帧为单位传输和处理数据。
数据链路层的三个重要问题:
封装成帧,差错检测,可靠传输
封装成帧
两台主机都会对传输的数据包进行五个层次封装或解封,发送方将发送的数据通过应用层封装成为应用层协议数据单元,然后交付给运输层,运输层为其添加运输层协议首部,使之成为运输层协议数据单元,然后交付给网络层,运输层为其添加网络层协议首部,使之成为网络层协议数据单元,然后交付给数据链路层,数据链路层为其添加数据链路层协议首部,即帧头,还要添加一个帧尾,即封装成帧。
差错检测
发送方将封装好的帧通过物理层发送到传输媒体,帧再传输过程中遭遇干扰后可能会出现误码,此时检错码可以让接收方主机判断是否出现误码,检错码是发送方再发送数据之前基于待发送的数据和检错算法计算出检错码,检错码被封装在帧尾。
可靠传输
尽管误码是不能完全避免的,但若能实现发送方发送什么,接收方就能收到什么,就称为可靠传输。
封装成帧
---封装成帧是指数据链路层给上层交付的协议数据单元添加帧头和帧尾使之成为帧。
-----帧头和帧尾中包含有重要的控制信息
-----帧头和帧尾的作用之一就是帧定界
例:
在PPP帧的格式中各包含长度为一个字节的标志字段。就有帧定界的作用。
注:并不是每一种数据链路层都包含有帧定界标志。
例:
以太网V2的MAC帧(最大长度为1518字节) |
6字节 | 6字节 | 2字节 | 46-1500字节 | 4字节 |
目的地址 | 源地址 | 类型 | 数据载荷 | FCS |
帧头 | 上层交付的协议数据单元 | 帧尾 |
那么在以太网V2的MAC帧中,接收方又是如何从物理层交付的比特流中提取出一个个帧呢。实际上,以太网的数据链路层封装好MAC帧后,将其交付给物理层,物理层会在MAC帧前面加上一段前导码(8字节)
前导码:
最后1字节 | 前7字节 |
帧开始定界符 | 前同步码(使接收方时钟同步) |
另外,以太网还规定了96比特的发送时间的帧间间隔。即MAC帧并不需要帧结束定界符。
透明传输
---透明传输是指数据链路层对上层交付的传输数据没有任何限制,好像数据链路层不存在一样。
例:
flag | flag | flag |
flag:帧定界标志(一个特定数值)
ESC:转义字符为一种特殊的控制字符,十进制值为27
如果在上层交付的协议数据单元中也存在这个特定数值,结果就是接收方无法正确接收该帧。在传输到第二个flag时会误认为帧结束了,如果数据链路层不采取其他措施来避免对帧是否结束的误判,就不能称为透明传输
例如,可以在发送帧之前,对帧的数据进行扫描,每出现一个帧定界符,就在其前面插入一个转义字符,接收方数据链路层在物理层交付的比特流中提取帧,遇到第一个帧定界符时,认为这是帧的开始,当遇到ESC时,其后面的一字节内容是数据不是帧定界符,剔除转义字符后,将其后面的数据继续提取。
flag | flag | ESC | flag |
但是会出现在上层交付的协议数据单元中也包含转义字符的情况。
flag | flag | ESC | flag |
方法任然可以类似于上面
flag | flag | ESC | ESC | ESC | flag |
-----面向字节的物理链路使用字节填充(或字符填充)的方法实现透明传输。
-----面向比特的物理链路使用比特填充的方法实现透明传输。
---为了提高帧的传输效率,应当使帧的数据部分的长度尽可能大些。
---考虑到差错控制等多种因素,每一种数据链路层协议都规定了帧的数据部分的长度上限,即最大传送单元MTU。
差错检测
计算机太卷了,感觉最近过得太不积极了,再不支楞起来以后毕业没活干了。