数据链路的信道主要有两种模式:
- 点对点信道:这种信道使用一对一的点对点通信方式;
- 广播信道:这种信道使用一对多的广播通信方式,因此过程比较复杂。
一、点对点的数据链路层
- 区分“链路”与“数据链路” 之前自己常常说“链路层”,其实链路的真正意思是从一个结点到相邻结点的一段物理线路,其中没有任何其他的交换结点。数据链路则是指在物理线路上添加上控制数据传输的协议的硬件和软件。因此数据链路是比链路更为深刻的内涵。
-
数据链路层的数据传输单元我们一般称之为帧,数据链路层的任务就是将上层的数据封装成帧交给物理层传输,以及分析物理层提交的数据帧,提取出上层数据交给网络层。
c. 若新宿的数据链路层收到的帧无差错,则从收到的帧中提取出IP数据报上交给网络层,否则丢弃这个帧;
具体来说就是:
a. 信源的数据链路层把网络层交下来的IP数据报添加首部和尾部封装成帧;
b. 信源把封装好的数据帧发送给信宿的数据链路层;
- 数据链路层的三个基本问题
数据链路层的协议有很多种,但有三个基本的问题是共同的,那就是:封装成帧、透明传输和差错控制。
a. 封装成帧
数据链路层的主要工作是添加一个帧头部和帧尾部,不同的数据链路层协议可能格式不同,但是基本的格式都试类似的:
b. 透明传输
如果我们提供任何数据输入,数据链路层都可以成功传递,那么我们称之为透明传输,即数据链路层的功能对于网络层和上层是透明的。比如上例的文本字符数据输入,SOH和EOT都可以很好的工作,因为二者没有交集。但是对于二进制数据输入来说,就有可能在数据中出现0x01和0x04,导致帧意外地中断和丢弃。因此,我们需要一种机制来处理这种情况,最经典、最常用的就是字节填充的方式,比如在SOH和EOT的前面分别插入一个转义字符ESC-0x1B,在接收端的数据链路层在将数据送往网络层之前删除这个插入的转义字符,这就叫做字符填充。
c. 错误检测
现实的通信链路都不会是理想的,这就是说,传输过程中有可能1变成0,0变成1,这种情况就叫做比特差错。数据链路层提供了循环冗余检验CRC方法来检测比特差错,其主要使用了帧检验序列FCS来检测比特错误。发送数据前先计算帧的数据部分得出FCS添加在数据部分后,接收端收到数据后添加上FCS后计算验证。
需要注意的是数据链路层并没有向网络层提供可靠传输服务,传输差错一类是比特差错,还有一类是帧丢失、帧重复或帧失序。完整的传输错误控制是在TCP中实现的。 - 点对点协议PPP
现在使用最为广泛的就是PPP(Point-to-Point Protocol)协议,其主要负责用户计算机到ISP进行通信时所使用的数据链路层协议:
a. PPP协议的特点
-1. 简单:PPP的首要需求就是“简单”,不需要考虑纠错、序号,这提供了很好的互操作性;
-2. 封装成帧:PPP协议必须定义帧界定字符
-3. 透明传输
-4. 多种网络层协议:PPP协议必须能够支持多种网络层协议,如IP、IPX等;
-5. 多种类型链路:支持串行/并行、同步/异步等;4/5其实是说PPP要对上对下都有很好的支持兼容性
-6. 差错控制
-7 检测连接状态:PPP协议要具有一种机制能够及时(不超过几分钟)自动检测链路是否处于正常工作状态,当出现故障的链路隔了一段时间后重新恢复正常工作时,就特别需要有这种及时检测功能。
-8 最大传送单元MTU
-9 网络层地址协商
-10 数据压缩协商不需要考虑纠错、流量控制、序号、多点线路和半双工或单工链路,PPP只支持全双工链路。b. PPP的帧格式 在继续学习PPP之前,先来看看PPP协议的帧格式吧!
c. PPP协议的组成 PPP协议主要分为三个部分:
-1. 将IP数据报封装到串行链路的办法,因为计算机内的I/O通信是并行的,而链路传输则是按比特流的串行,因此需要协议的封装转换,一般由网络适配器完成;
-2. 一个用来建立、配置和测试数据链路连接的链路控制协议LCP(Link Control Protocol),通信双方可以协商一些选项;
-3. 一套网络控制协议NCP(Network Control Protocol),用于支持上层的不同的网络协议;
PPP协议的工作状态起止于链路静止状态,这时在用户PC机和ISP的路由器之间并不存在物理层的连接。整个过程如图:
由上图我们可以看出:
-1. CSMA/CD不可能同时进行发送和接受,因此是半双工协议,即双向交替通信;
-2. 每一个端点在自己发送数据之后的一小段时间内,存在着遭遇碰撞的可能性,这段时间最长为两个单程最长时间,将这个时间成为“争用期”,只有通过争用期的“考验”,才能肯定这次发送不会发生碰撞。
-3. 以太网把争用期定位51.2微秒,如果是一个标准10M/s的带宽的话,大概是512比特,也就是64字节,因此以太网规定了争用期大小的帧为最小长度,所有比这小的帧都认为是碰撞导致的丢弃帧,因此以太网的帧最小为64字节。
CSMA/CD的要点为:
-1. 适配器从网络层获得一个分组,加上以太网的首部和尾部,组成以太网帧,放入适配器的缓存中,准备发送;
-2. 若适配器检测到信道空闲,即在发送间隙9.6微秒约96个比特时间内没有检测到信道上有信号,就发送这个帧;若检测到信道忙,则继续检测并等待信道转为空闲(加上96比特时间),然后发送这个帧;
-3. 在发送过程中继续检测信道,若一直未检测到碰撞,就顺利把这个帧成功发送完毕;若检测到碰撞,则中止数据发送,并发送人为干扰信号;
-4. 在中止发送后,适配器就执行指数退避算法,等待r被的512比特时间后,返回到步骤(2);