计算机网络笔记:Data Link Layer
date
slug
status
summary
type
tags
协议栈帧同步FramingStuffing差错控制Automatic Repeat Request(ARQ)Multiplexing常用协议Point-to-Point Protocol(PPP)High-Level Data Link Control (HDLC)
- 基本作用:将网络层下发的数据包封装成帧数据,发送给下一跳地址。
- 主要功能
- 帧同步
- 差错控制
- 流量控制
- Multiplexing
- 安全性管理
协议栈
- 子层:
- 逻辑链路层
- MAC
帧同步
Framing
- 帧内容:ASCII传输,HEX值≤20的内容不会被打印。
- 帧边界:
- STX(start of text)=0x02
- ETX(end of text)=0x03
- 其他控制字符:
- DLE(data link escape)=0x10
- PPP协议的帧结构
- 和HDLC相同的结构,但是使用byte stuffing
- flags一致
Stuffing
Byte-stuffing (e.g. PPP)
- 0x7E → flag
- 0x7D → ctrl escape
- 如果帧内部出现 flag 或 ctrl escape,那么把对应位置的字节替换成 0x7D + 原始octet XOR 0x20。
Bit-stuffing (e.g.HDLC)
- 发送:帧内部每出现5个连续的1就插入一个0。最后在两头加上完整的0x7E as flag。
- 接收:检查所有连续5个1的位置
- 下一个bit是0,则移除
- 下两个bit是10,说明是flag
- 下两个bit是11,说明出错了
差错控制
- DL层的帧都是按顺序到达的,但是可能损坏或丢失。这是这一层的差错控制的基础。
- error checking & retransmission
Automatic Repeat Request(ARQ)
- 保证一个信息序列按顺序抵达,无差错、无重复、无丢失。
Stop-and-Wait ARQ
- 发送方收到当前帧的ACK以后才发送下一帧。适用于恶劣网络情况。
- 可能有两种情况:
- 帧丢失。timeout没有ACK,那么重新发送即可。
- ACK丢失。对于sender还是timeout自动重发。注意在header里要加入帧编号,这样receiver知道自己收了两次。ACK的header也要加入帧编号。
- 序号只需要0和1(1-bit ),但是必须有
- 流程:
- 无差错传输效率:
- 有差错传输效率:
- 主要关注BDP的部分
Go-Back-N ARQ
- 保持信道占满,更加高效。
- sender和receiver各自维护一个数据帧序列,称为窗口。发送方的窗口大小由接收方确定,防止overflow。
- 传输过程
- 如果最旧一帧的ACK在window用完之前回来了,那么继续下一帧的传输
- 如果window用完了,回到最早几帧重新开始传输(或者也用timeout机制)
- Window大小
- Sender有窗口大小,Receiver就是1
- 无差错传输效率:
- 有差错传输效率:
Selective-and-Repeat ARQ
- 在没有收到 ACK 的情况下只返回那一帧
- sender 和 receiver 各自维护一个窗口和,ACK 到达的时候 sender 窗口前移;帧正确收到的时候 receiver 窗口前移。
- 必须满足。否则假定 sender 没收到所有 ACK,那么还在发送,此时 receiver 窗口已经滑到了,如果 太大,已经滑到下一组编号 0 的位置了,就会误接受旧的 为新的。
- 无差错传输效率:
- 有差错传输效率:
Multiplexing
- Delay
常用协议
Point-to-Point Protocol(PPP)
- 帧格式
名称 | 字节数 | 描述 |
标记 | 1 | 标记出帧的头或尾 |
地址 | 1 | 广播地址 |
控制 | 1 | 控制字 |
协议 | 2 | 数据报文中所使用的协议 |
信息 | 不定长(0或更多) | 数据报文 |
冗余填充 | 不定长(0或更多) | 可选的冗余填充 |
帧校验序列 (FCS) | 2(或4) | 错误校验 |
- 支持很多协议:LCP, NCP, IP, OSI CLNP, IPX...
High-Level Data Link Control (HDLC)
- 帧格式
- 控制:
名称 | 字节数 | 描述 |
标记 | 1 | 标记出帧的头或尾 |
地址 | 1 or more | 广播地址 |
控制 | 1 or 2 | 控制字 |
信息 | 不定长(0或更多) | 数据报文 |
冗余填充 | 不定长(0或更多) | 可选的冗余填充 |
帧校验序列 (FCS) | 2(或4) | 错误校验 |