3 数据链路层
3.1 数据链路层的共同问题
-
数据链路 data link:实现必要的通信协议(数据链路层的通信协议曾称为通信规程)的硬件和软件 + 物理链路。
即数据链路分为 物理链路 和 逻辑链路。
-
帧 frame:点对点信道的数据链路层协议数据单元。
(网络层的协议数据单元:IP数据报,简称为数据报、分组、包。)
-
点对点信道在数据链路层通信时的主要步骤:
- 一个节点A的数据链路层把网络层交下来的IP数据报添加首部和尾部,封装成帧。
- 节点A 把帧发给 节点B的数据链路层。(暂时忽略物理层)
- 若节点B收到的帧无差错,则从收到的帧中提取IP数据报交给 它上面的网络层;否则,丢弃这个帧。
-
三个共同的基本问题
-
封装成帧 framing
-
含义:在一段数据的前后分别添加首部和尾部。
-
相关概念:
帧长:帧的数据部分长度 + 帧首部和尾部的长度。
最大传送单元 MTU (Maximum Transfer Unit) :帧长的数据部分长度上限。
-
首部和尾部的作用:
① 帧定界(确定帧的界限)
当数据部分是 可打印的 ASCII码 组成的文本文件时,帧定界可以使用特殊的帧定界符:SOH(0x01, Start of Header)和EOT(0x04, End Of Transmission)。
② 必要的控制信息
-
-
透明传输
-
含义:无论什么样的比特组合的数据,都可以按照原样没有差错地通过数据链路层。
-
解决透明传输问题,要求所传输的数据中的 任何8比特的组合 一定**不允许和用作 **帧定界的控制字符的比特编码 。
-
对于文本文件的解决方法:字节填充(byte stuffing)/字符填充(character stuffing)。如果发送端在数据链路层的数据中出现了 SOH 或 EOT,则在其前加入转义字符 ESC(0x1B)。对转义字符本身也进行这种操作。(类似于C中的转义字符)
在接收端接收时删去即可。
-
-
-
差错检测
-
传输差错的类型:
比特差错;
帧丢失、帧重复、帧失序。
-
比特差错:比特在传输过程中可能会产生差错:1变为0 或 0变为1。传输差错之一。
-
误码率 BER(Bit Error Rate):在一段时间内,传输错误的比特所占传输比特总数的比率。
-
应对措施:循环冗余检验CRC (Cyclic Redundancy Check) P76
-
在发送端,把数据M分成组,每组 k 比特。CRC运算在数据M的后面添加用于差错检测的n位冗余码。之后发送出去,一共发送 (k + m) 位。
-
n 位冗余码的计算:
二进制的模2运算(加法不进位) 计算 2 n M 2^n M 2nM。(相当于在M的后面加n个0)
得到的(k + n)位数 除以 收发双方事先商定的长度为 (n + 1)位的除数P,得出商Q(没啥用)和余数R(R就是冗余码)
为了进行检错而添加的冗余码称为 帧检验序列(FCS, Frame Check Sequence)。
-
在接收端,把接收到的数据以帧为单位进行 CRC检验:把收到的每一个帧都除以相同的除数P(模2运算),检查的达到的余数R。
-
如果R = 0,则这个帧没有差错,接受accept。
否则,帧出现差错,丢弃。(不能确定哪一位或几位出现了差错)
-
可以用多项式来表示循环冗余检验CRC的过程。P77
-
-
帧检验序列FCS的生成,循环冗余检验CRC都是用硬件完成的,不会延误数据的传输。
-
只使用CRC技术,只能做到对帧的无差别接受。接受端丢弃的帧虽然被收到,但因有差错而被丢弃,并没有被接受。
可以近似认为,凡是接收端数据链路层接受的帧均无差错。
但不能无比特错误的传输还不是可靠传输(还可能存在其他传输错误)。
-
-
-
区别对待的方法
- 对于通信质量良好的有线传输链路,数据链路层的协议不使用确认和重传机制(即不向上层提供可靠传输服务,传输中出现的差错由上层来改正处理,如运输层的TCP协议)。
- 对于通信质量较差的无线传输链路,使用确认和重传机制,并向上层提供可靠传输服务。
3.2 点对点协议PPP (Point to Point Protocol)
- HDLC (High-level Data Link Control) 高级数据链路控制。可实现可靠传输,但如今已很少使用。
3.2.1 PPP协议的特点
-
PPP协议满足的需求
-
简单;提供不可靠的数据报服务,无需纠错,无需序号,无需流量控制。进行CRC检验。
-
封装成帧;
-
透明性;
-
多种网络层协议;在同一网络链路上支持多种网络层协议(如IP/ IPX)
-
多种类型链路;能在多种类型的链路上运行。(串、并行;同步、异步;低速、高速;电、光;交换或非交换的)
如PPPoE(PPP over Ethernet, 运行在以太网上的PPP协议)
-
差错检测;
-
检测连接状态;
-
最大传送单元 MTU;
-
网络层地址协商;提供一种机制使通信的两个网络层的实体可以通过协商 知道或可以配置 彼此的网络层地址。
-
数据压缩协商。必须提供一种,但不要求标准化。
-
-
特点:
- 不支持多点线路段,只支持点对点的链路通信。
- 只支持全双工链路。
-
组成(3):
- 一个将IP数据报封装到串行链路的方法。
- 一个用来建立、配置和测试数据链路连接的链路控制协议 LCP(Link Control Protocol)。
- 一套网络控制协议 NCP(Network Control Protocol),其中的每一个协议支持不同的网络层协议。
3.2.2 PPP帧的格式
F(0x7E):Flag。标志字段,帧定界符。1字节
地址字段A(0xFF)、控制字段C(0x03):预定义字段。没有携带PPP帧的信息。各1字节
协议字段:如图。
FCS:帧检验序列。
-
字节填充
当信息字段中出现帧定界符(0x7E)时,使用字节填充,转义符为0x7D。
RFC1662 规定的填充方法:
- 信息字段中出现的0x7E => 2字节序列 (0x7D, 0x5E)。
- 出现的 0x7D => 2字节序列(0x7D, 0x5D)。
- 出现的 ASCII控制字符(小于0x20的) ,在其前加一个 0x7D,同时将该字符的编码加以改变。
-
零比特填充
在发送端,先扫描整个信息字段,只要发现有5个连续的1,就立即填入一个0。