计网笔记(3) 数据链路层

使用校验和重发的方法,使得物理线路相对可靠

1. 帧

是数据链路层发送数据的单位,在数据链路层中,帧的封装需要在一段数据前后添加首部和尾部
显然,增加帧的数据占比可以提高传输效率,但每一种数据链路协议规定了帧的数据部分的长度上限:最大传输单元(Maximum Transfer Unit,MTU)。

帧应当有特殊的格式,用于区分数据流和噪音,有以下的若干种方法:

  1. Character Count
    最前面的是包括它在内的帧长度(每一个方块的单位都是byte,也就是character),后面是帧数据。但是当帧长度字节错误时,就会一直错下去,所以这种方法很少单独使用
    计网笔记(3) 数据链路层

  2. Start&ending character with character stuffing
    使用flag byte(或character),置于帧的开始和结束位置。这样即使接收端失去同步,也可以找到连续2个FLAG的地方来确定帧的结束位置
    但是,当flag byte出现在数据中时,正常情况下这样的结构解析就会被干扰。一种方法是当在数据段中检测到flag时,在它前面加一个ESC(escape byte),从而表示这是数据而跳过flag的解析,并在传输给网络层时去掉这个ESC,这样的方法就叫 byte stuffing(数据中心出现ESC也可以被ESC掉)
    计网笔记(3) 数据链路层

  3. Start&ending flags with bit stuffing
    01111110/0x7E作为帧的起始和结束的字符串,如果出现这样的数据,就使用bit转义,在发送数据时,5个1发出去后强制发出1个0

很多数据链路写往往使用以上三种方法的组合。以太网常用的是让帧以preamble(序言,共72bit)为起始,之后是长度域来确定帧的结尾。

2. 错误控制与改正

确保传输的帧的内容和顺序正确,帧可能错误一部分,也可能部分或全部丢失
方法大概如下:

2.1 Error Correcting Code

所有的方法都会为信息带来冗余

  1. Hamming Code 海明码 & Hamming distance

把每一个字符转换为ascii码(7bit)插入了四个校验比特,此时认为4个bit中最多有一个错
计网笔记(3) 数据链路层
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+TframeNTframe
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,

HDLC