3. 数据链路层
程序员文章站
2022-05-15 14:33:25
...
文章目录
一、 概述
1. 数据链路层使用的信道
数据链路层使用的信道主要有以下两种类型:
- 点对点信道。 这种信道使用一对一的点对点通信方式。
- 广播信道。 这种信道使用一对多的广播通信 方式,因此过程比较复杂。广播信道上连接的主机很多,因此必须使用专门的共享信道协议来协调这些主机的数据发送。
2. 数据链路层的简单模型
二、 使用点对点通信的数据链路层
1. 数据链路和帧
1. 基本概念
-
链路(link) : 一条无源的点到点的物理线路段,中间没有任何其他交换结点。
注: 一条链路只是一条通路的一个组成部分。 -
数据链路( data link) : 除物理线路外,还必须有通信协议来控制这些数据的传输。若把加实现这些协议的硬件和软件到链路上,就构成了数据链路。
- 现在最常用的方法是使用适配器(即网卡) 来实现这些协议的硬件和软件。
- 一般的适配器都包括了数据链路层和物理层这两层的功能。
-
也有另外的术语:将链路分为物理链路和逻辑链路
- 物理链路就是上面说的链路
- 逻辑链路就是上面的数据链路,是物理链路加上必要的通信协议。
-
早期的数据通信协议曾叫做通信规程
2. 数据链路层传输帧
数据链路层不必考虑物理层如何实现比特传输的细节。甚至还可以更简单的设想好像是沿着两个数据链路层之间的水平方向把帧直接发送到对方。
2. 三个基本问题
数据链路层协议有许多中,但是有三个基本问题是共同的。这三个基本问题是:
- 封装成帧
- 透明传输
- 差错控制
1. 封装成帧
封装成帧就是在一段数据的前后分别添加首部和尾部,然后就构成了一个帧。
-
首部和尾部的一个重要作用就是进行帧定界。
2. 透明传输
1. 概念
- 当数据是由可打印的ASCII码组成的文本文件时,帧定界 可以使用特殊的帧定界符
-
控制字符SOH(Start Of Header) 放在一帧的最前面,表示帧的首部开始。另一个控制字符EOT(End Of Transmission) 表示帧的结束
如果数据中的某个字节的二进制代码恰好和SOH或者EOT一样,数据链路层就会错误的找到帧的边界
2. 解决透明传输问题
- 解决方法:字节填充(byte stuffing)或字符填充(chaacter stuffing)(两者意思一样)。
- 发送端的数据链路层在数据中出现控制字符 SOH或EOT 的前面插入一个转义字符ESC(其十六进制编码是1B)
- 接收端的数据链路层在将数据送往网络层之前删除插入的转义字符。
- 如果转义字符也出现在数据当中,那么应在转义字符前面插入一个转义字符ESC。当接收端收到连续两个转义字符时,就删除前面的一个。
3. 差错检测
1. 概念
- 在传输过程中可能会产生比特差错: 1可能会变成0,0可能会变成1
- 在一段时间内,传输错误的比特占所传比特总数的比率称为误码率BER(Bit Error Rate)。
- 误码率与信噪比有很大的关系。
- 为了保证数据传输的可靠性,在计算机网络传输数据时,必须采用各种差错检测措施。
2. 循环冗余检验的原理
- 在数据链路层传送的帧中,广泛使用了循环冗余检验CRC 的检错技术。
- 在发送端 ,先把数据划分为组。假定每组K个比特。
- 假设带传送的一组数据M = 101001(当前K=6) .我们在M的后面再添加供差错检测用的n位冗余码一起发送。
3. 冗余码的计算
1. 在M后面添加n个数字0
2. 得到的(K+n)位的数除以事先选定好的长度为(n+1)位的除数P,得到的商是Q,而余数是R,余数R比除数P少一位,即R是n位。
接收端对收到的每一帧进行CRC检验:
- 若得出的余数R = 0,则判断这个帧没有差错,就接受。
- 若余数R != 0,则判定这个帧有差错,就丢弃。
只要经过严格的挑选,并使用位数足够多的除数P,那么检测不到差错的概率就会小很多。
三、点对点协议PPP
1. 概念
- 对于点对点的链路,目前使用最广泛的数据链路层协议是点对点协议PPP(Point-to-Point Protocol) .
- 用户使用拨号电话线接入互联网时,用户计算机和ISP进行通信时所使用的数据链路层协议就是PPP协议。
- PPP协议在1994年就称为互联网的正式标准。
2. PPP协议应满足的需求
- 简单:首要要求。
- 封装成帧:规定特殊的字符作为帧定界符。
- 透明性:保证传输数据的透明性。
- 多种网络层协议:能够在同一层物理链路上同时支持多种网络层协议。
- 多种类型链路:能够在多种类型的链路上运行。
- 差错检测:能够对接受端收到的帧进行检测,并立即丢弃有差错的帧。
- 检测连接状态:能够及时自动检测出链路是否处于正常工作状态。
- 最大传送单元:必须对每一种类型的点对点链路设置最大传输单元MTU的标准默认值,促进各种实现之间的互操作性。
- 网络层地址协商:必须提供一种机制使通信的两个网络层地址实体能够通过协商知道或能够配置彼此的网络层地址。
- 数据压缩协商:必须提供一种方法来协商使用数据压缩算法。
3. PPP协议的组成
- 一个将IP数据报封装到串行链路的方法。PPP即支持异步链路(无奇偶校验的8比特数据),也支持面向比特的同步链路。IP数据报在PPP帧中就是其信息部分。这个信息部分的长度受最大传送单元MTU的限制。
- 一个用来建立、配置和测试数据链路连接的链路控制协议LCP(Link Control Protocol)
- 一套网络控制协议NCP(Network Control Protocol),其中的每一个协议支持不同的网络层协议。
4. PPP协议的帧格式
-
PPP帧的首部和尾部分别为4字段和2字段。
- 标志字段(定界符):首部的第一个字段和尾部的第二个字段都是标志字段F(Flag),规定为0x7E(符号0x表示16进制,7E用二进制表示为01111110).标志字段表示一个帧的开始或结束。
- 首部中的地址字段A规定为0xFF(即11111111),控制字段C规定为0x03(即00000011).
- 首部的第四个字段是2字节的协议字段。当协议字段为0x0021时,PPP的帧信息字段就是IP数据报;若为0xC021,则信息字段就是PPP链路控制协议LCP的数据;而0x8021表示这是网络层的控制数据。
- 信息字段的长度是可变的,不超过1500字节。
- 尾部中的第一个字段是使用CRC的帧检验序列FCS
5. 透明传输问题
1. 方法
- 当PPP用在同步传输链路时,协议规定采用硬件来完成比特填充(和HDLC做法一样)
- 当PPP用在异步传输时,就使用一种特殊的字符填充法。
2. 字符填充
- 将信息字段中出现的每一个0x7E字节(定界符)转变为2字节序列(0x7D,0x5E)。
- 若信息字段中出现一个0x7D的字节,则将其转变称为2字节序列(0x7D,0x5D)。
3. 零比特填充
PPP协议用在SONET/SDH链路时,使用同步传输(一连串的比特连续传送)。这时PPP协议采用零比特填充 方法来实现透明传输。
- 在发送端,只要发现有5个连续的1,则立即填充入一个0.
- 接收端对帧的比特流进行扫描。每当发现5个连续的1时,就把这5个连续1后的一个0删除。
6、 PPP协议的工作状态
上一篇: mysql允许远程连接的配置方法
下一篇: pwnable.kr input