数据链路层 Datalink

3.1数据链路层的设计问题 Design Issues

数据链路层的功能:

  1. 向网络层定义一个好的服务接口
  2. 处理传输错误
  3. 调节数据流,确保慢速的接收方不会被快速的发送方淹没。

数据链路层【帧头】+【有效荷载(用于存放数据包)】+【帧尾】,将数据包封装起来。

1.提供给网络层的服务 Service Interface

//负责发现物理层传输的错误 ?单一信号无法纠正,对信号流进行检测

  1. 无确认的无连接
  2. 有确认的无连接
  3. 有确认的有连接

2.成帧Framing (PDU)

1.Character Count字节计数法(不好)

很容易产生连续错误

2.Starting and ending character, with character stuffing字节填充的标志字节法

3.Starting and ending flags, with bit stuffing比特填充的标志比特法

4.Physical layer coding violations物理层编码违禁法

3.差错控制 Error Control

计时器、序号

 

4.流量控制 Flow Control

机器流量差过大会导致数据丢失。

基于反馈的流量控制

基于速率的流量控制

 

3.2 差错检测和纠正

1.单个错误 Single Error //随机分布的错误

2.突发性错误 Burst Error //集中时间段,集中同一区域

3.海明距离 Hamming Distance

检测d比特的错误,需要d+1的距离(正确的编码和错误编码的距离)

奇偶校验位可以检测出1比特的错误,但是不知道是哪一比特的错误

修正d比特的错误,需要2d+1的距离

4.Parity Check

5.Hamming Code

6.CRC 循环冗余校验

校验算法的除数:

CRC-12 = X12 + X11 + X3 + X2 + X1 + 1

CRC-16 = X16 + X15 + X2 + 1

CRC-CCITT = X16 + X12 + X5 + 1

 

3.基本数据链路层协议

1.Stop-and-Wait停等式协议ARQ

存在错误的情况(请求重发request):

Data->

<-NAK

Data(Retransmission)->

<-ACK

Data next->

数据丢失的情况(自动重发auto)://开始标记被破坏了

Data->

—-Time Out—-(接收方无响应/在定时器范围后重发)

Data(Retransmission)->

<-ACK

Data next->

ACK丢失的情况(自动重发)

Data->

<-ACK

—-Time Out—-

Data(Retransmission)->//发送的数据必须有序号比较

—-Discard this Data—-//重发的数据不交给网络层

<-ACK

Data next->

Utlization of Stop-and-wait 利用率

Tframe = FramSize / Bitrate

Tprop = Distance / Speed of Signal

Utlization = Tframe / (2Tprop + Tframe

2.滑动窗口协议 Sliding Window Protocols

Utlization = N*Tframe / (2Tprop + Tframe

  • Sender Window 提前发送多少个窗口
  • Piggybacking 将确认帧打包/封装到数据中

变式:

Go-back-N ARQ(Data Error)//只改A,不改B

Data 1-> ACK 1

Data 2-> Discard 2

Data 3-> Discard 3

<- ACK 1

Data 4 -> Discard 4

Resend Data 2 -> ACK 2

Resend Data 3 -> ACK 3

<- ACK 2

<- ACK 3

Receive Window Size = 1

Send Window Size <= MAX_SEQ – 1 (0,…,N)

正确的情况:

Data 01234567 ->

<- ACK 7

Data 0(new) ->Send to Network layer

错误的情况

Data 01234567 ->

<- ACK 7 ( lost )

—-Time Out—-

Data 0(old) -> ????

变式2:

Selective Repeat ARQ

  • Send Window Size <= (Max_SEQ+1)/2
  • Receive Window Size = Send Window Size
  • Receive Buffer Number = Window Size

0 条评论

发表评论

Avatar placeholder