计网笔记(3) 数据链路层
使用校验和重发的方法,使得物理线路相对可靠
1. 帧
是数据链路层发送数据的单位,在数据链路层中,帧的封装需要在一段数据前后添加首部和尾部
显然,增加帧的数据占比可以提高传输效率,但每一种数据链路协议规定了帧的数据部分的长度上限:最大传输单元(Maximum Transfer Unit,MTU)。
帧应当有特殊的格式,用于区分数据流和噪音,有以下的若干种方法:
-
Character Count
最前面的是包括它在内的帧长度(每一个方块的单位都是byte,也就是character),后面是帧数据。但是当帧长度字节错误时,就会一直错下去,所以这种方法很少单独使用 -
Start&ending character with character stuffing
使用flag byte(或character),置于帧的开始和结束位置。这样即使接收端失去同步,也可以找到连续2个FLAG的地方来确定帧的结束位置
但是,当flag byte出现在数据中时,正常情况下这样的结构解析就会被干扰。一种方法是当在数据段中检测到flag时,在它前面加一个ESC(escape byte),从而表示这是数据而跳过flag的解析,并在传输给网络层时去掉这个ESC,这样的方法就叫 byte stuffing(数据中心出现ESC也可以被ESC掉) -
Start&ending flags with bit stuffing
01111110/0x7E
作为帧的起始和结束的字符串,如果出现这样的数据,就使用bit转义,在发送数据时,5个1发出去后强制发出1个0
很多数据链路写往往使用以上三种方法的组合。以太网常用的是让帧以preamble(序言,共72bit)为起始,之后是长度域来确定帧的结尾。
2. 错误控制与改正
确保传输的帧的内容和顺序正确,帧可能错误一部分,也可能部分或全部丢失
方法大概如下:
2.1 Error Correcting Code
所有的方法都会为信息带来冗余
- Hamming Code 海明码 & Hamming distance
把每一个字符转换为ascii码(7bit)插入了四个校验比特,此时认为4个bit中最多有一个错
detect d bit error, need d+1 distance coding
correct d bit error, need 2d+1 distance coding
Error Detecting,With Retransmission
Error Correcting Code
- Cyclic Redundancy Check (循环冗余校验法)
- Stop and wait
确认发ACK帧,不确认发NAK帧
数据发出一定时间后没有回复,数据就会重传,知道接到ACK/NAK为止
ACK可能也会丢失,此时需要丢弃重发的数据帧
一些关键的参数:
T f r a m e : 从 一 次 发 送 的 第 一 个 数 据 帧 发 送 到 最 后 一 个 数 据 帧 发 送 的 时 间 T_{frame}:从一次发送的第一个数据帧发送到最后一个数据帧发送的时间 Tframe:从一次发送的第一个数据帧发送到最后一个数据帧发送的时间
T p r o p : 从 一 个 数 据 帧 发 送 到 它 被 接 受 的 时 间 , = D i s t a n c e S p e e d o f S i g n a l T_{prop}:从一个数据帧发送到它被接受的时间,= \frac{Distance}{Speed\ of\ Signal} Tprop:从一个数据帧发送到它被接受的时间,=Speed of SignalDistance
U t i l i z a t i o n = T f r a m e 2 T p r o p + T f r a m e Utilization\ =\ \frac{T_{frame}}{2T_{prop}+T_{frame}} Utilization = 2Tprop+TframeTframe,第2个prop指的是ACK的传输时间
如果令 α = T p r o p T f r a m e , 则 U t i l i z a t i o n = 1 2 α + 1 \alpha=\frac{T_{prop}}{T_{frame}},则Utilization\ =\ \frac{1}{2\alpha+1} α=TframeTprop,则Utilization = 2α+11
Sliding Window Protocols
提前发,如果一个帧错了,后面提前发的帧都需要重新发,,这项的协议被称为Go-back-N
U
t
i
l
i
z
a
t
i
o
n
=
N
∗
T
f
r
a
m
e
2
T
p
r
o
p
+
T
f
r
a
m
e
Utilization\ =\ \frac{N*T_{frame}}{2T_{prop}+T_{frame}}
Utilization = 2Tprop+TframeN∗Tframe
U
t
i
l
i
z
a
t
i
o
n
=
{
N
/
(
2
α
+
1
)
,
需
要
修
改
1
,
需
要
修
改
Utilization=\begin{cases} N/(2\alpha+1),\quad &需要修改 \\ 1, &需要修改 \end{cases}
Utilization={N/(2α+1),1,需要修改需要修改