(1)点对点通信:这种信道使用一对一的点对点通信方式
(2)广播通信:这种信道使用一对多的广播通信方式。
- 链路:从一个结点到相邻结点的一段物理线路,中间没有任何其他的交换结点。
- 数据链路:传送数据的时候,除了必须要有一条物理线路外,还必须有一些必要的通信协议来控制这些数据的传输。
早期的数据通信协议也曾叫做通信规程
- ��Ǹ,��Ǹ
- 帧:点对点信道的数据链路层的协议数据单元
网络层协议单元就是IP数据报(或简称为数据报、分组或包)
点对点信道的数据链路层在进行通信时的主要步骤如下:
(1)结点A的数据链路层把网络层叫下来的IP数据报添加到首部和尾部封装成帧
(2)结点A把封装好的帧发送给结点B的数据链路层
(3)若结点B的数据链路层收到的帧无差错,则从收到的帧中提取出IP数据报交上网络层,否则丢弃这个帧。
数据链路层不必考虑物理层如何实现比特传输的细节。
数据链路层三个基本问题:
- 封装成帧
- 透明传输
- 差错检测
**(1)封装成帧:**就是在数据的前后分别添加首部和尾部,这样就可以构成一个帧。接收端在收到物理层上交的比特流后,就能根据首部和尾部的标记,从收到的比特流中识别帧的开始和结束。
首部和尾部重要作用就是进行帧定界(即确定帧的界限)。
每一种链路层协议都规定了所能传输的帧的数据部分长度上线——最大传输单元MTU
用控制字符进行帧界定的方法举例:
SOH和EOT都是控制字符的名称,十六进制码分别是01H和04H
(2)透明传输:不管是什么字符都可以放进传送的帧里面而不出错。
如果传输过程中传送的字符里面包含SOH或EOT,则需要对其进行转义。
一种方法是在SOH或EOT前面插入转义字符ESC(十六进制码是1B),这种方法叫字节填充或字符填充。
用字节填充法解决透明传输的问题。
(3)差错检测:
比特差错:比特在传输过程中可能会出现错误,如1变成0,0变成1。传输错误的比特占所传输比特总数的比率称为误码率BER,检测方式就是循环冗余检测CRC。
现把数据划分为组,每组k个比特。现假定待传送的数据M=101001 (k=6),
CRC运算就是在数据M的后面添加n位冗余码,然后构成一个帧发送出去,一共发送(k+n)位。
这里n位冗余码由以下方法得出:
用二进制的模2运算进行2^n 乘M的运算,这相当于在M后面添加n个0。得到的(k+n)位的数除以收发双方事先商定的长度为(n+1)位的除数P,得出的商是Q而余数是R(n位,比P少一位)。
实例:
M=101001,一共6位,所以k=6,因为要2^n > k
即2^n>6,则n最小是3,所以要在M后面加3个0。
因为n=3,则除数P的位数为n+1位,假设除数为1101,运算过程如下:
余数R为001,最终发送的数据为M拼接上R(即发送101001001)
在接收端,对每一帧经过CRC检验后,有两种情况:
1️⃣若得出的余数R=0,判定这个帧没有错
2️⃣若R≠0这个帧有错(但不懂是哪位错了),丢弃。
数据链路层若仅仅使用循环冗余检测CRC差错技术,则只能做到对帧的无差错接受,即凡是接收端数据链路层接受的帧,我们都能以非常接近于1的概率认为这些帧在传输过程中没有产生差错。
所以可以近似认为“凡是接收端数据链路层接受的帧均无差错”。
数据链路层没有向网络层提供“可靠传输”的服务,因为传送的帧会丢失、重复、失序等,属于传输差错,而不是比特差错。