计算机网络-数据链路层笔记
数据链路层的位置、功能和服务
为什么需要数据链路层?
- 物理层传输可能出现误码:差错控制 Error Control
- 接收方要防止数据来的太快太多:流量控制 Flow Control
- 广播信道中传输信息,需要寻址(Addressing)和介质访问控制(Media access control)
数据链路层的位置和功能
- 数据链路层负责将数据以可靠、高效的方式从一个节点传送到链路上相邻的另一个节点
- 数据单位:帧 frame
- 功能:
功能 | 封装成帧(Packetizing) | 寻址(Addressing) | 差错控制(Error control) | 流量控制(Flow control) | 介质访问控制(Media access control) |
---|---|---|---|---|---|
目的 | 从物理层收到的比特流中分离出帧 | 确保收到的数据与发出的一致 | 不能让慢速的接收方被快速的发送方淹没 |
分组(包)和帧 Packets vs. Frames
逐跳通信
hop-to-hop communication 两设备之间没有其他数据链路层及以上的设备,只有传输介质和物理接口
适配器通信 Adapters Communicating
- 发送方:将packet封装成帧;加检错码,实现可靠传输;流量控制
- 接收方:寻找错误,检查是否可靠传输;流量控制;将帧还原成packet,传送到上一层
- 数据链路层功能在网卡(NIC)中实现:
提供给网络层的服务
- 数据传输
- 无连接的服务:Connectionless services
服务类型 | 无确认无连接的服务 Unacknowledged connectionless service | 有确认无连接的服务 Acknowledged connectionless service |
---|---|---|
服务特点 | 没有确认(ACK)和逻辑连接 | 对收到的每一帧都由确认(ACK) |
适用场景 | 多数LAN提供这种服务 | 在不可靠信道上使用 |
具体应用 | 信道质量极好如光纤,还有近距离通信,还有对实时性要求很高的服务,如VOIP, 视频直播 | 无线系统 |
- 有确认面向连接的服务 Acknowledged connection-oriented service
服务类型 | 有确认面向连接的服务 |
---|---|
服务特点 | 预先建立一个连接,每个帧都被编号,确保可靠传输 |
适用情景 | 可靠性要求高且有一定可分配资源的情景 |
具体应用 | ATM |
成帧 Framing
- 在点到点链路上从A节点向B节点发送遗传比特给主机B
- B节点必须能够准确识别哪些比特组成一帧(一帧从哪里开始,到哪里结束)
- 要求:拆分比特流
- 约束条件(拆分结果需要满足):简单(接收方容易实现)、独立于代码(与传输的消息内容无关)、高效(使用的信道带宽尽量少)、健壮性(不易出错,出错后易重新同步)
- 方法:字符计数法(Character count)、字符填充法(Flag byte with byte stuffing)、比特填充法(Starting and ending flags, with bit stuffing)、物理层编码违例法(Physical layer coding violations)
字符计数法
- 在帧的头部用一个字段(field)来说明帧内的字符个数
- 传输差错可能导致数值被篡改
字符填充法(透明传输)
- 用一个标志字节(flag)来标记帧的开始和结束
- 和所用的8位字符集相关
- 如果数据中包含和标志(flag)相同的字节,则在该字节前加转义字符ESC
比特填充法
- 帧中包含的比特数是任意的(不需要是8的整数倍)
- 起始/结束标记(flag):0111,1110
- 比Byte stuffing效率高
- 在原始数据连续5个1后加0
- 在HDLC中应用
- 容易遇到的问题
Tips:1比特误码最多影响2帧,容易恢复
物理层编码违例法
- 在编码方案由冗余时,可以采用物理层编码违例法(效率较高,但对物理层编码有要求)
- 例如LAN使用的曼彻斯特编码
- 每个有效的二进制位在信号中间都有跳变
- 信号中间没有跳变的编码,如高-高和低-低,用于标记帧的开始和结束
差错控制 Error control
差错类型
- 帧丢失:发送端传出的帧没有到达接受端(噪声影响或在队列中被丢弃)
- 帧损坏:某些比特出错
单比特差错与突发差错 Single-bit Error and Burst Error
差错检测方法
- 奇偶校验 Parity check:能检测出单比特错误;单个奇偶校验位性能:可检出奇数个比特反转错误,其他情况漏检率50%
- 交错检验 Parity Check for Blocks
编码(n个校验位):每个数据块是一个 k × n k\times{n} k×n矩阵;一次发送一行;对每一列计算一个奇偶校验位
性能:可检测出长度为n的突发差错;对于长度为n+1的突发差错,如果恰好第一个和最后一个比特被翻转,而中间的比特都正确,这种无法检测出来;如果发生更长的突发差错,无法检测出的概率为 2 − n 2^{-n} 2−n - 循环冗余校验 Cyclic Redundancy Check(CRC):可以检测出一些突发错误
- 校验和 Checksum
循环冗余校验CRC
发送方:
- 除法原理
- M ( x ) M(x) M(x)被除数,将比特串看作多项式系数,例如 1101 = x 3 + x 2 + x 0 1101=x^3+x^2+x^0 1101=x3+x2+x0
- G ( x ) G(x) G(x)除数,最少两位
- 做除法,得到的余数为校验码,校验码的长度一定小于除数
- 计算校验位的算法如下:
1.将 M ( x ) M(x) M(x)左移 r r r位( r r r是 G ( x ) G(x) G(x)的最高次幂)
2.用构成的比特串除以 G ( x ) G(x) G(x)
3.从比特串中减去余数,得到 T ( x ) T(x) T(x)
接收方:验证校验位 - 如果出现传输差错,到达的不是 T ( x ) T(x) T(x),而是 T ( x ) + E ( x ) T(x)+E(x) T(x)+E(x)
- 接收方计算 [ T ( x ) + E ( x ) ] G ( x ) \frac{[T(x)+E(x)]}{G(x)} G(x)[T(x)+E(x)],由于 T ( x ) G ( x ) = 0 \frac{T(x)}{G(x)}=0 G(x)T(x)=0,结果取决于 E ( x ) G ( x ) \frac{E(x)}{G(x)} G(x)E(x)
- 如果差错 E ( x ) E(x) E(x)恰好对应于包含 G ( x ) G(x) G(x)因子的多项式,将无法检测出来;其他差错都能被检测出来
CRC检错能力分析: - r r r个校验位能检测出长度小于等于 r r r的全部突发差错
- 能够检测出两个独立的单比特差错
- 能够检测出所有奇数个翻转差错
- 对于其他长度大于 r r r的突发差错,无法检测出坏帧的概率为 2 − r 2^{-r} 2−r
差错纠正方法
- 前向纠错 Forward Error Correction(FEC)
- 重传纠错 Automatic Repeat reQuest(ARQ)一般在可靠介质使用
纠错码:汉明距离 Hamming Distance
ECC(Error Correcting Code)将冗余信息加入到待发送的信息中
- 汉明距离 Hamming Distance:两个码字中对应比特的值不同的数目,例如1000 1001和1011 0001,汉明距离为3
- 要检测出 t t t比特差错,编码的汉明距离至少为 t + 1 t+1 t+1
- 要纠正 t t t比特差错,编码的汉明距离至少是 2 t + 1 2t+1 2t+1
- 校验位的个数,例:要纠正单比特差错,需要几个校验位?
设 m m m为消息位的位数, r r