数据链路的信道主要有两种模式:
1. 点对点信道:这种信道使用一对一的点对点通信方式;
2. 广播信道:这种信道使用一对多的广播通信方式,因此过程比较复杂。
一、点对点的数据链路层
1. 区分“链路”与“数据链路”
之前自己常常说“链路层”,其实链路的真正意思是从一个结点到相邻结点的一段物理线路,其中没有任何其他的交换结点。数据链路则是指在物理线路上添加上控制数据传输的协议的硬件和软件。因此数据链路是比链路更为深刻的内涵。
2. 数据链路层的数据传输单元我们一般称之为帧,数据链路层的任务就是将上层的数据封装成帧交给物理层传输,以及分析物理层提交的数据帧,提取出上层数据交给网络层。具体来说就是:
a. 信源的数据链路层把网络层交下来的IP数据报添加首部和尾部封装成帧;
b. 信源把封装好的数据帧发送给信宿的数据链路层;
c. 若新宿的数据链路层收到的帧无差错,则从收到的帧中提取出IP数据报上交给网络层,否则丢弃这个帧;
3. 数据链路层的三个基本问题
数据链路层的协议有很多种,但有三个基本的问题是共同的,那就是:封装成帧、透明传输和差错控制。
a. 封装成帧 数据链路层的主要工作是添加一个帧头部和帧尾部,不同的数据链路层协议可能格式不同,但是基本的格式都试类似的:
这里的数据部分,一般有一个最大程度,我们称为MTU,在MAC里一般是1500个字节,后面会详细介绍。这里要说的是,当数据是由可打印的ASC2码组成的文件时,可以使用特殊的帧定字符来标明一个帧的开始和结束。比如使用SOH(Start Of Header)--0x01和EOT(End Of Transmission)--0x04来表示,这样数据链路层就可以识别出帧的开始和结束。
b. 透明传输 如果我们提供任何数据输入,数据链路层都可以成功传递,那么我们称之为透明传输,即数据链路层的功能对于网络层和上层是透明的。比如上例的文本字符数据输入,SOH和EOT都可以很好的工作,因为二者没有交集。但是对于二进制数据输入来说,就有可能在数据中出现0x01和0x04,导致帧意外地中断和丢弃。因此,我们需要一种机制来处理这种情况,最经典、最常用的就是字节填充的方式,比如在SOH和EOT的前面分别插入一个转义字符ESC-0x1B,在接收端的数据链路层在将数据送往网络层之前删除这个插入的转义字符,这就叫做字符填充。
c. 错误检测
现实的通信链路都不会是理想的,这就是说,传输过程中有可能1变成0,0变成1,这种情况就叫做比特差错。数据链路层提供了循环冗余检验CRC方法来检测比特差错,其主要使用了帧检验序列FCS来检测比特错误。发送数据前先计算帧的数据部分得出FCS添加在数据部分后,接收端收到数据后添加上FCS后计算验证。
需要注意的是数据链路层并没有向网络层提供可靠传输服务,传输差错一类是比特差错,还有一类是帧丢失、帧重复或帧失序。完整的传输错误控制是在TCP中实现的。
c. PPP协议的组成
PPP协议主要分为三个部分:
-1. 将IP数据报封装到串行链路的办法,因为计算机内的I/O通信是并行的,而链路传输则是按比特流的串行,因此需要协议的封装转换,一般由网络适配器完成;
-2. 一个用来建立、配置和测试数据链路连接的链路控制协议LCP(Link Control Protocol),通信双方可以协商一些选项;
-3. 一套网络控制协议NCP(Network Control Protocol),用于支持上层的不同的网络协议;
PPP协议的工作状态起止于链路静止状态,这时在用户PC机和ISP的路由器之间并不存在物理层的连接。整个过程如图: