数据链路层概述
# 数据链路层概述
# 体系结构
# 链路、数据链路和帧
链路(Link)是指从一个节点到相邻节点的一段物理线路(有线或无线),而中间没有任何其他的交换节点。
数据链路(Data Link)是基于链路的。当在一条链路上传送数据时,除需要链路本身,还需要一些必要的通信协议来控制这些数据的传输,把实现这些协议的硬件和软件加到链路上,就构成了数据链路。
帧(Frame)是数据链路层对等实体之间在水平方向进行逻辑通信的协议数据单元PDU。
# 封装成帧和透明传输
# 封装成帧
封装成帧就是在一段数据的前后分别添加首部和尾部,然后构成一个帧。
首部和尾部的一个重要作用就是帧定界。
- 为了提高数据链路层传输帧的效率,应当使帧的数据载荷的长度尽可能地大于首部和尾部的长度
- 考虑到对缓存空间的需求以及差错控制等诸多因素,每一种数据链路层协议都规定了帧的数据载荷的长度上限,即最大传送单元(Maximum Transfer Unit,MTU)。
# 透明传输
透明传输是指数据链路层对上层交付的传输数据没有任何限制,好像数据链路层不存在一样。帧界定标志也就是个特定数据值,如果在上层交付的协议数据单元中, 恰好也包含这个特定数值,接收方就不能正确接收。所以,数据链路层应该对上层交付的数据有限制,其内容不能包含帧定界符的值。
# 差错检测
# 误码的相关概念
实际的通信链路都不是理想的,比特在传输过程中可能会产生差错(称为比特差错):
- 比特1可能变成比特0
- 比特0可能变成比特1
在一段时间内,传输错误的比特数量占所传输比特总数的比率称为误码率(Bit Error Rate,BER)。
提高链路的信噪比,可以降低误码率。但在实际的通信链路上,不可能使误码率下降为零。
使用差错检测技术来检测数据在传输过程中是否产生了比特差错,是数据链路层所要解决的重要问题之一。
# 奇偶校验
- 奇校验是在待发送的数据后面添加1个校验位,使得添加该校验位后的整个数据中比特1的个数为奇数。
- 偶校验是在待发送的数据后面添加1个校验位,使得添加该校验位后的整个数据中比特1的个数为偶数。
# 循环冗余校验
- 收发双方约定好了一个生成多项式
- 发送方基于待发送的数据和生成多项式G(X),计算出差错检测码(冗余码),将冗余码添加到待发送数据的后面一起传输。
- 接收方收到数据和冗余码后,通过生成多项式G(X)来计算收到的数据和冗余码是否产生了误码。
检错码只能检测出帧在传输过程中出现了差错,但并不能定位错误,因此无法纠正错误。
# 可靠传输
# 可靠传输相关基本概念
# 误码
接收方主机收到有误码的帧后,是不会接受该帧的,会将它丢弃。
如果数据链路层向其上层提供的是不可靠服务,那么丢弃就丢弃了,不会再有更多措施。
如果数据链路层向其上层提供的是可靠服务,那就还需要其他措施,来确保接收方主机还可以重新收到被丢弃的这个帧的正确副本。
有线链路的误码率比较低。为了减小开销,并不要求数据链路层向其上层提供可靠传输服务。即使出现了误码,可靠传输的问题由其上层处理。
无线链路易受干扰,误码率比较高,因此要求数据链路层必须向其上层提供可靠传输服务。
# 分组丢失
路由器输入队列快满了,主动丢弃收到的分组。
# 分组失序
数据并未按照发送顺序依次到达接收端。
# 分组重复
由于某些原因,有些分组在网络中滞留了,没有及时到达接收端,这可能会造成发送端对该分组的重发,重发的分组到达接收端,但一段时间后,滞留在网络的分组也到达了接收端,这就造成分组重复的传输差错
# 其他层的可靠传输
# 停止-等待协议
针对分组丢失
接收方收不到数据分组,就不会发送相应的ACK和NAK,如果不采取措施,发送方就会一直处于等待接收方ACK或NAK的状态,为解决上述问题,发送方可在每发送完一个数据分组时就启动一个超时计时器(Timeout Timer)。若到了超时计时器所设置的超时重传时间(Retransmission Time-Out,RTO),但发送方仍未收到接收方的ACK或NAK,就重传之前已发送过的数据分组。
针对分组重复
为了避免分组重复这种传输错误,必须给每个分组带上序号。对于停止-等待协议,由于每发送一个数据分组就停止等待,只要保证每发送一个新的数据分组,其序号与上次发送的数据分组的序号不同就可以了,因此用一个比特来编号就够了,序号有0和1这两个。
停止-等待协议的信道利用率
# 回退N帧协议
对于𝑹𝑻𝑻≫𝑻_𝑫,例如使用同步卫星链路,信道利用率很低,这时候就不能去采用停止-等待协议,而应该采用流水线传输。
回退N帧协议的接收方采用累积确认方式
- 接收方不必对收到的每一个数据分组都发送一个确认分组,而是可以在收到几个序号连续的数据分组后,对按序到达的最后一个数据分组发送确认分组。
- 接收方何时发送累积确认分组,由具体实现决定。
- 确认分组ACKn表明序号为n及之前的所有数据分组都已正确接收。
# 选择重传协议
# 点对点协议
# 点对点协议PPP概述
点对点协议(Point-to-Point Protocol,PPP)是目前使用最广泛的点对点数据链路层协议。
# PPP的帧格式
# PPP帧的透明传输
面向字节:
面向比特:
# PPP帧的差错检测
# 网络适配器和MAC地址
# 网络适配器
要将计算机连接到以太网,需要使用相应的网络适配器(Adapter),网络适配器一般简称为“网卡”。在计算机内部,网卡与CPU之间的通信,一般是通过计算机主板上的I/O总线以并行传输方式进行。
网卡除要实现物理层和数据链路层功能,其另外一个重要功能就是要进行并行传输和串行传输的转换。由于网络的传输速率和计算机内部总线上的传输速率并不相同,因此在网卡的核心芯片中都会包含用于缓存数据的存储器。
# MAC地址
当多个主机连接在同一个广播信道上,要想实现两个主机之间的通信,则每个主机都必须有一个唯一 的标识,即一个数据链路层地址。
在每个主机发送的帧的首部中,都携带有发送主机(源主机)和接收主机(目的主机)的数据链路层地址。由于这类地址是用于媒体接入控制(Medium Access Control,MAC)的,因此被称为MAC地址。
# 总结
# 参考
https://github.com/BloothOfYouth/Computer-Network-Notes
https://www.bilibili.com/video/BV1c4411d7jb/