3.1 使用点对点信道的数据链路层

1 数据链路和帧

  “链路”和“数据链路”不是一回事。

  链路:从一个结点到相邻结点的一短物理线路(有线或无线),而中间没有任何的其他交换结点。

  数据链路:数据链路在链路的基础上,还必须要有一些必要的规程来控制数据的传输。因此,数据链路比链路多了实现通信规程所需要的硬件和软件。最常用的是使用网络适配器。

  帧:一种协议数据单元。

2 三个基本问题

  1.封装成帧:就是在一段数据的前后分别添加首部和尾部,然后就构成了一个帧。首部和尾部就是起到帧定界的作用。我们用SOH这一控制字符表示一帧的最前面,用EOT这一控制字符表示一帧的最后面。

  2.透明传输:由于在帧的有效数据当中,可能出现和帧定界的控制字符一样的字符,为了防止将这些字符当成帧定界的字符,错误的处理帧,我们需要采取某种方法使得数据当中可能出现的控制字符SOH”和“EOT”在接收端不被解释为控制字符。方法就是在数据中出现控制字符SOH”或“EOT”的前面插入一个转义字符“ESC”。如果转义字符“ESC”也出现在数据当中,那么解决的方法仍然是在转义字符的前面插入一个转义字符,所以,当接受到连续的两个转义字符的时候,就去删除其中前面的一个。 我们把这种方法叫做字节填充法

  3.差错检测:比特在传输过程当中可能会产生差错,1可能会变成00可能会变成1.这就是比特差错。而这种差错对于我们来说是不希望发生的,所以为了保证数据传输的可靠性,在计算机网络传输数据时,必须采用差错检测措施。目前广泛运用的是循环冗余检验CRC,其原理是:

    1. 将这个数据的比特除以另外的一个二进制数。得到的余数作为帧检验序列FCS附加到原数据后面。
    2. 接收端把接收到的数据以帧为单位进行CRC检验:把收到的每一个帧都除以刚才的二进制数,然后检查得到的余数R,看R是否为0,为0则这个帧没有错误,否则这个帧有差错,将其丢弃。

  还有一种方法是用多项式来表示循环冗余检验过程。现在常用的几种多项式有:

  CRC8=X8+X5+X4+X0

  CRC-CCITT=X16+X12+X5+X0

  CRC16=X16+X15+X2+X0

  CRC12=X12+X11+X3+X2+X0

  CRC32=X32+X26+X23+X22+X16+X12+X11+X10+X8+X7+X5+X4+X2+X1+X0

  最后需要说一下,数据链路层如果仅仅使用CRC循环冗余检验,则只能对帧做到无差错接受,但是,当数据链路层向网络层提供传输的时候,这个时候就不一定是可靠的传输了,可能出现帧丢失、帧重复、帧失序,数据链路层不确保这个。所以数据链路层协议不适用确认和重传机制,不向上层提供可靠传输的服务。所以保证可靠传输就需要让上层协议(TCP)来做了。这样的目的,也是为了更好的提升通信的效率。

posted @ 2018-09-15 13:10  世界辣么大  阅读(313)  评论(0编辑  收藏  举报