**数据链路层使用的信道主要有以下两类:
(1)点对点信道:使用一对一的点对点通信方式。
(2)广播信道:使用一对多的广播通信方式。广播信道上连接的主机很多,因此必须使用专用的共享信道协议来协调这些主机的数据发送。
3.1使用点对点信道的数据链路层
**链路:就是从一个结点到相邻结点的一段物理线路(有线或无线),而中间没有任何其他的交换结点。链路只是一条路径的组成部分。
**数据链路:当需要在一条线路上传送数据时,除了必须有一条物理线路外,还必须有一些必要的通信协议来控制这些数据的传输。若把实现这些协议的硬件和软件加到链路上,就构成了数据链路。现在最常用的方法是使用网络适配器(既有硬件,也包括软件)来实现这些协议。
(1)协议数据单元--帧
**数据链路层把网络层交下来的数据构成帧发送到链路上,以及把接收到的帧中的数据取出并交给网络层。
**三层模型:每个结点(主机和路由器之间或两个路由器之间)只有下三层--网络层,数据链路层,物理层。
**点对点信道的数据链路层在进行通信时的主要步骤:
①结点A的数据链路层把网络层交下来的IP数据报添加到首部和尾部封装成帧。
②结点A把封装好的帧发送给点B的数据链路层。
③若结点B的数据链路层收到的帧无差错,则从收到的帧中提取出IP数据报上交给上面的网络层;否则丢弃这个帧。
3.2 三个基本问题
(1)封装成帧:
**封装成帧就是在一段数据的前后分别添加首部和尾部,这样就构成了一个帧。接收端在收到物理层上交的比特流后,就能根据首部和尾部的标记,从收到的比特流中识别帧的开始和结束。
**一个帧的帧长就等于帧的数据部分加上帧首部和帧尾部的长度。
**首部和尾部一个重要作用就是进行帧定界(即确定帧的界限)。
**每一种链路层协议都规定了所能传送的帧的数据部分长度上限--最大传送单元MTU。
**帧定界可以使用特殊的帧定界符,SOH(帧开始符)和EOT(帧结束符),它们的十六进制编码分别是01和04。
(2)透明传输:
**透明:某一个实际存在的事物看起来却是好像不存在一样。
**在数据链路层透明传送数据:表示无论什么样的比特组合的数据都能够通过这个数据链路层。因此,对所传送的数据来说,这些数据就“看不见”数据链路层有什么妨碍数据传输的东西。
**字节填充(字符填充):为了解决透明传输的问题,就必须设法使数据中可能出现的控制字符“SOH”和“EOT”在接收端不被解释为控制字符。发送端的数据链路层在数据中出现控制字符“SOH”和“EOT”的前面插入一个转义字符“ESC”,而在接收端的数据链路层在把数据送往网络层之前删除这个插入的转义字符。
(3)差错控制:
**比特差错:比特在传输过程中可能会产生差错:1可能变成0,而0也可能变成1。
**误码率BER:在一段时间内,传输错误的比特占传输比特总数的比率。设法提高信噪比,就可以使误码率减小。
①循环冗余检验CRC:
**CRC运算就是在数据M的后面添加供差错检测用的n位冗余码,然后构成一个帧发送出去,一共发送(k+n)位。
**这n位冗余码可用以下方法得出:用二进制的模2运算进行2的n次方乘M的运算,这相当于在M后面添加n个0。得到的(k+n)位的数除以收发双方事先商定的长度为(n+1)位的除数P,得出商是Q而余数是R(n位,比P少一位)。这个余数R就是拼接在数据M后面发出去的冗余码。
**多项式P(X)的生成:
P(X)=X3+X2+1表示的P=1101
②帧检验序列FCS:
**为了进行检错而添加的冗余码。
③循环冗余检验CRC和帧检验序列FCS并不是同一个概念:
**CRC是一种检错方法;
**FCS是添加在数据后面的冗余码,在检错方法上可以选用CRC,也可以不选用CRC。
④在接收端对收到的数据进行差错检验方法:
**若得出的余数R=0,则判断这个帧没有差错,就接受。
**若余数R不等于0,则判定这个帧没有差错(但无法确定究竟是哪一位出了差错),就丢弃。
⑤在数据链路层若仅仅使用循环冗余检验CRC差错检测技术,则只能做到对帧的无差错接受,即:凡是接收端数据链路层接受的帧,我们都能以非常接近1的概率认为这些帧在传输过程中没有产生差错。以上所述可以近似的表述为:"凡是接收端数据链路层接受的帧均无差错"。
⑥我们现在并没有要求数据链路层向网络层提供“可靠传输”的服务;
**所谓“可靠传输”:数据链路层的发送端发送什么,在接收端就收到什么。
**传输差错可分为两大类:比特差错;收到的帧并没有出现差错,但却出现了帧丢失,帧重复或帧失序。
**无比特差错不等于无传输差错。在数据链路层使用CRC检验,能够实现无比特差错的传输,但这还不是可靠传输。