目录
Services Provided to Network Layer
字节/字符填充法(Byte(Character Stuffing))
物理层编码违例法(Physical Layer Coding Violations)
三、错误检测与纠错(Error Detection and Correction)
检错码(Error-Detecting Codes)(EDC)
CRC(Cyclic Redundancy Check,循环冗余校验码),FCS(Frame Check Sequence帧校验序列)
一、位置,作用 与 服务
Position
位于物理层的上层,接收来自物理层的服务;网络层的下方,为上层提供服务
Function
Packetizing 成帧
error control 错误控制
flow control 流量控制
Broadcast : addressing 、 media access control
Services
为网络层(Network layer)提供服务
Packets vs Frames
网络层的数据封装为 Packet ,传到数据链路层时经过头尾的信息的添加,成为Frame
Adapter communication
发送方:将网络层的Packet 封装成 Frame ,主要添加了 错误检验码,可靠传输、流量控制等等信息。
接收方:检查错误、可靠传输、流量控制等等,将Frame拆解为Packet传递给接收节点
注意:数据链路层主要是在 适配器(adapter)里执行
Services Provided to Network Layer
无线连接服务(Connectionless Services):
无确认的无连接服务(Unacknowledged connectionless service):大多数的局域网(LAN)使用这种服务。
确认的无连接服务(Acknowledged connectionless service): 每一帧都要确认,用于无不可靠的信道,比如无线系统。
确认的面向连接的服务(Acknowledged connection-oriented service)
注意:没有无确认的面向连接的服务,不符合实际需求。
二、成帧 (Framing)
节点B必须识别哪一串比特构成一帧,也就意味着必须知道帧的开始和结束。
拆分比特流,识别出帧
成帧的要求符合如下
- Simple
- code independence —— 与传输的消息内容无关
- efficient ——使用的信道带宽尽量少
- robustness——不易出错
方法实现
字符填充法(character count)
在每一帧的前面用一个字符填充,该字符为包括自身一起的帧的总字节数。
如图所示,每一帧的开头用字符计数。
但是,当出现错误时,尤其当填充的字符发生错误时,会导致字符表示的数字发生改变,会导致之后的比特串都有严重的接收时的错误。
字节/字符填充法(Byte(Character Stuffing))
使用FLAG字节(8bits)来标记帧的开头和结尾
Byte Stuffing: transparent transmission(透明传输)
如果帧的中间数据payload部分也出现了和FLAG相同字节的比特串,我们会使用ESC(0x18)插入到FLAG来表示该FLAG不是结束和开始的标志,而是中间的数据。
如果帧的中间数据payload部分出现了和ESC相同字节的比特串,我们会在其前面再插入一个ESC来表示该ESC是数据内容,不是标志符号。
还有其他的一些情况,如下图所示。
比特填充法(Bit Stuffing)
在帧的开头和结尾用8个固定的比特串表示开头和结尾,即 0111,1110
当数据中出现了有连续六个 1 的比特流时,我们在第五个1后面插入0,防止被接收端误认为是标志符号。
物理层编码违例法(Physical Layer Coding Violations)
三、错误检测与纠错(Error Detection and Correction)
差错控制(Error Control)
提供反馈信号(ACK,NAK)来告诉发送方是否接收到消息,或者消息是否出错。
硬件的问题可能导致帧的完全丢失,如果接收方一直没有收到消息,会超过时钟(timer)设定的时间,会反馈给接收方重传。
Type of Errors: Lost frames(帧丢失) , Damaged frames(比特错误)
Error Detection: Parity check , Cyclic Redundancy Check(CRC) , Checksum(检验和)
Error Correction: Forward Error Correction (FEC,前向纠错) , Retransmission (ARQ)
纠错码(Error-Correcting Codes)(ECC)
海明距离(Hamming Distance)
如果要检测 t 比特的错误,海明距离至少为 t+1
如果要纠正 t 比特的错误,海明距离至少为 2t+1
The number of Check Bits
m: 消息串的比特数
r:检验码比特数
n:码字长度(n=m+r)
所以一共有个有效的消息数。其中每个消息长度为n,即有n个不合法的码字与它距离为1,所以一共就有(n+1)个码字,所以有不等式:
(n+1) <=
(m+r +1)<=
检错码(Error-Detecting Codes)(EDC)
在一些可靠的信道内,信息出错的可能性比较小,用检错码可以携带比较少的检验码,当发现错误,重新传送该数据。
在一些容易出现错误的无线连接中,最好加入足够的冗余信息让接收方发现并改正错误,使用纠错码更合适。
- parity-checking(偶校验)
- Parity Check for Blocks(交错检验)
- Polynomial Code(多项式编码)
CRC(Cyclic Redundancy Check,循环冗余校验码),FCS(Frame Check Sequence帧校验序列)
M(x):比特序列 110001=>
G(x):生成多项式
注意:多项式的加减法相当于 异或XOR 操作
[M (x) * ] / G(x) 的余数为 R(x)
所以发送方(Sender): T(x)=M(x)* + R(x)
接收方(Receiver): T(x) / G(x)
检查是否有余数,如果没有,正常接受,如果有,则数据出错。
四、流量控制(Flow Control)
确保发送的信息量不会超过所能接受的信息量,(i.e 防止缓冲溢出)
停止等待(Stop-and-Wait)
Protocol 1:Utopian Simplex Protocol
假设:单工信道,无差错,接收方有足够的缓冲区。
不需要错误控制和流量控制,发送方传一个Frame,接收方就仅仅接收它。
Protocol 2:Simplex Stop-and-Wait Protocol for an Error-Free Channel
假设:单工信道,无差错,接收方缓冲区有限。
不需要错误控制,但需要流量控制,即 Stop-and-Wait。发送方发送一个Frame后等待,接收方收到后发一个确认信号(ACK,应答),发送方收到ACK后,发送下一个Frame。
Protocol 3: Positive ACK with Retransmission(PAR)
假设:单工信道,有差错,接收方缓冲区有限。
如果信道不可靠:
1、帧遭到破坏。 接收方通过CRC检测丢弃该帧,等待计时器超时重传。
2、帧丢失:(1)Data Frame 丢失,超时重传 (2)ACK Frame 丢失,超时重传。
注意:当ACK丢失后重传Data Frame后被接收时,接收方会接收两次相同的帧,导致错误。
解决方法:为了区别Data Frame帧,需要在帧的头部添加序号。在数据链路层,序号只需1Bit,因为接收方只需要区别两个相邻的帧不同即可,所以只需要1Bit来表示两个数。在传输层,需要更大的空间比如16Bit , ARQ(Automatic Repeat ReQuest)
3、Delayed ACK Frame(ACK延时)
当接收方发送的ACK因为带宽而延迟,使得发送方在收到ACK之前计时器超时重传帧Frame0,当发送方收到ACK时,再发送Frame1,当发送方再次接受到确认Frame0的ACK,会误以为是Frame1的ACK,进而发送下一帧,导致发送方不知道Frame1是否真的被接收。
解决方法:与ACK 丢失一致,给ACK添加序号
关于计时器:计时器的设定时间如果太短,将会重传一些不必要的帧;计时器的设定时间如果太长,会导致效率太低。一般计时器设定时间要大于帧的发送时延和两倍的传播时延。
关于NAK: NAK能加快重传。不必等待计时器超时。
滑动窗口(Sliding Window)
捎带应答(Piggybacking):
全双工。当帧到达时,接收方不会立即发送ACK,而是等待网络层传下来的包,与ACK一起发送。
优点:能更好的利用信道带宽,接受方处理负载更轻。
ACK timer vs frame timer: 通过设定一个ACK timer来确定数据链路层应等待包的到来进行捎带应答的时间。
Protocol 4:Sliding Window of Size 1
滑动窗口大小为1(sending window Wt=1、receiving window Wr=1),全双工,序列数为1。
缺陷:效率过低。
Protocol 5: Go Back N (GBN)
允许发送多帧,发送窗口大小为-1,接收窗口大小为1。
回退N步:如果接收方检测到帧的错误,将会舍弃它,或者帧丢失了未接收到,并且之后发过来的所有帧都不会接收,直到计时器超时,回退后重传该帧。
如下图:
一、正常情况:
二、帧丢失(包括帧出现错误)
一定需要回退N帧重传实现。
三、ACK丢失:
假设ACK(i)丢失(1)如果在计时器超时前,ACK(i+n)能顺利到达,不需要重传。(2)如果计时器超时了,必须重传。
回退N帧的信道利用率较高,甚至能达到100%,但有时需要回退将后面所有的重传一遍,导致效率不高。
四、发送窗口的最大大小
Wt + Wr <=
Go Back N:Wr =1、Wt <=