计算机网络 - 数据链路层(Data Link Layer)

目录

一、位置,作用 与 服务

Position

Function

Services

Packets vs Frames

Adapter communication 

Services Provided to  Network Layer

二、成帧 (Framing)

成帧的要求符合如下

方法实现

        字符填充法(character count)

       字节/字符填充法(Byte(Character Stuffing))

        比特填充法(Bit Stuffing)

        物理层编码违例法(Physical Layer Coding Violations)

三、错误检测与纠错(Error Detection and Correction)

      差错控制(Error Control)

        纠错码(Error-Correcting Codes)

        检错码(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)

        所以一共有2^{m}个有效的消息数。其中每个消息长度为n,即有n个不合法的码字与它距离为1,所以一共就有(n+1)2^{m}个码字,所以有不等式:

                                (n+1)2^{m} <= 2^{n}

                                (m+r +1)<= 2^{r}

检错码(Error-Detecting Codes)(EDC)

在一些可靠的信道内,信息出错的可能性比较小,用检错码可以携带比较少的检验码,当发现错误,重新传送该数据。

在一些容易出现错误的无线连接中,最好加入足够的冗余信息让接收方发现并改正错误,使用纠错码更合适。

  •         parity-checking(偶校验)
  •         Parity Check for Blocks(交错检验)
  •         Polynomial Code(多项式编码)

     CRC(Cyclic Redundancy Check,循环冗余校验码),FCS(Frame Check Sequence帧校验序列)

        M(x):比特序列  110001=> x^{5}+x^{4}+x^{0}

        G(x):生成多项式

        注意:多项式的加减法相当于 异或XOR 操作

        [M (x) * x^{r}] / G(x) 的余数为 R(x)

        所以发送方(Sender): T(x)=M(x)* x^{r} + 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)

允许发送多帧,发送窗口大小为2^{n}-1,接收窗口大小为1。

回退N步:如果接收方检测到帧的错误,将会舍弃它,或者帧丢失了未接收到,并且之后发过来的所有帧都不会接收,直到计时器超时,回退后重传该帧。

如下图:

        一、正常情况:

           

        二、帧丢失(包括帧出现错误)

        一定需要回退N帧重传实现。

           

        三、ACK丢失:

        假设ACK(i)丢失(1)如果在计时器超时前,ACK(i+n)能顺利到达,不需要重传。(2)如果计时器超时了,必须重传。

          

回退N帧的信道利用率较高,甚至能达到100%,但有时需要回退将后面所有的重传一遍,导致效率不高。

四、发送窗口的最大大小

        

Wt + Wr <=2^{n}

Go Back N:Wr =1、Wt <= 2^{n}-1

Protocol 6: Selective Repeat ARQ (SR)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值