第三章 数据链路层(一)

      序言

        我是一只菜鸟,又来了。开始今天数据链路层的学习吧。

                                                                                  ---WZY

一、数据链路层基本概念及基本问题

      基本概念  和 三个基本问题 的讲解

 

     1、基本概念

        先来看一张图,理解一下:数据链路层之间的运输、数据链路层之间的信道。 说的是什么意思?

            看图中的注释,我们应该注意的就是这里说的数据链路层之间的信道等语句,是不考虑物理层中运输的问题。直接考虑链路层这一层。要注意这个事情,不然

                

              

 

        链路:一条点到点的物理线路段,中间没有任何其他的交换结点,通俗的将,就是一根线,其中不经过任何东西,这样的就是链路,一条链路只是一条通路的一个组成部分

        数据链路:除了物理线路外,还必须有通信协议来控制这些数据的传输。若把实现这些协议的硬件和软件加到链路上,就构成了数据链路。 通俗讲,就是经过了一些交换机呀,什么的,最终到达目的地,所有路段就是数据链路,而数据链路中就包含了多段链路。  

        适配器:也就是网卡,就是用来实现数据链路上一些协议。

        :数据链路层上传送的就是帧,

            

    2、三个基本问题    

       封装成帧、透明传输、差错控制

        讲解如何封装帧,封装完后帧的传输问题、传输到达目的地,如何检验该段帧是否完整, 就是这三个问题。

      1、封装成帧

        看图就理解了。数据链路层就是在ip数据报的前面后末尾加了一个首部和尾部来代表ip数据包的开始和结束,首部和尾部都市由8位二进制数表示的,可以一样也可以不一样

            

      2、透明传输

         就是为了解决一个问题, 在ip数据包中如果有一个跟帧尾部一样的8位二进制数,则会提前结束接受数据包,这样数据就被破坏了。出现了如下图这样的问题

              

         解决办法:

              看图:通过在特殊字符前面增加一个转义字符 ESC, 就可以解决上面所遇到的问题,在接收端,将数据包中所有ESC的字符删除,遇到两个ESC的,就删除第一个,这样一开始传输的时候有ESC转义字符,接受完就没了,所以说的是透明传输

               

          

      3、差错检测

          问题:

            传输过程中可能会产生比特差错:1 可能会变成 0 而 0 也可能变成 1。在一段时间内,传输错误的比特占所传输比特总数的比率称为误码率 BER (Bit Error Rate)。

            为了检测传送的帧中ip数据包是否完整,是否没有被损坏,所以需要差错检测

          解决:循环冗余检测CRC,截个图,把概念性的文字截下来,看到这个人都晕了,其实很简单,

                  

            按照下图中的7步走,理解一下,然后再看上面的文字,就理解了。

                  

                检测:

                    若得出的余数 R = 0,则判定这个帧没有差错,就接受(accept)。

                    若余数 R ≠ 0,则判定这个帧有差错,就丢弃。

 

           生成多项式:也很简单,例如上面的除数1101  就用P(X)=X3+X2+1 (X3是x的三次方的意思)  最高位是2的三次方,就是x的三次方这样算,例如,101101 P(X)=X5+X3+X2+1     

      

           这种冗余差错校验的特点:

                1这种检测方法并不能确定究竟是哪一个或哪几个比特出现了差错

                2只要经过严格的挑选,并使用位数足够多的除数 P,那么出现检测不到的差错的概率就很小很小。

                3只能是无差错接受:凡是接受的帧(即不包括丢弃的帧),我们都能以非常接近于 1 的概率认为这些帧在传输过程中没有产生差错”。也就是说:“凡是接收端数据链路层接受的帧都没有传输差错”(有差错的帧就丢弃而不接受)

                4这是”不可靠“的,是无比特差错,而不是无传输差错的检测机制,要做到可靠的 还要加上确认和重传机制。即考虑帧重复、帧丢失、帧乱序的情况

                

 

3、可靠传输

      在有些情况下,我们需要数据链路层向上的网络层提供“可靠传输”的服务,就是发送端发送什么,在对应的接收端就收到什么, 前面的CRC只能检测出位数的差错,不能正确的检测出更精准的错误。

      1、停止等待协议

          停止等待就是每发送完一个分组就停止发送,等待对方的确认。在收到确认后再发送下一个分组,详细的可以看书上的文字性描述,很简单,        

        超时重传:解决上面如果数据分组或确认分组丢失时,发送方将会一直等待接收方的确认分组的问题,设置一个超时计时器,弱到了超时计时器所设置的重传时间,而发送方仍收不到接收方的任何确认分组,则会重传原来的分组。

        重复分组:如果只使用超时重传来解决,不用发送确认分组,那么会出现重复分组的问题,就是当接收方收到分组后,发回确认分组时,确认分组丢失,那么会触发超时重传,则接收方会收到两个重复的分组,这里需要注意的是,是确认分组丢失。第一次发送的分组已经正确接收了。

 

     2、停止等待协议的算法

          因为手写实在太麻烦,所以截图过来看一下这个算法的具体步骤

        

          

        通过画图分析了一下正确的过程,其他依葫芦画瓢

      

 

    

     3、回退N步协议

         其实跟停止等待协议差不多,只是使用的是流水线传输方式,发送方不间断的发送分组,每次发送的分组大小有限制,如果不限制,可能会使接收方或网络来不及处理这些分组,导致分组的丢失,所以每次发送的分组大小可能是5,6或者更多。这种限制就是回退N步协议。

         回退N步协议:利用发送窗口来限制发送方连续发送分组的个数。要是发送窗口为1就是我们上面所讨论的停止等待协议。

      分析如何工作的

          

        这个就是回退N步协议,根据这个原理图,也能看出,为什么叫回退N步协议了,在哪里出错了,就必须回退到哪里全部重传,为了解决这个,又有了选择重传协议

 

    

      4、选择重传协议

         也就是改进回退N布协议,  方式都是一样, 在接受方必须逐一确认, 但是出现错误,只需要重传出现错误的那一个分组,不用全部重传,这里的全部,指的是在出现错误的分组之后的所有分组,前提是在同一个发送窗口中。

 

      5、总结可靠传输

          不可靠的链路上,通过各种协议,就能达到可靠传输,来保证数据的准确性。

 

posted @ 2016-11-14 13:33  有梦想的老王  阅读(2252)  评论(0编辑  收藏  举报