两台计算机间通信的示意图如下:
此次学习,主要是针对上图中的数据链路层细化学习,了解数据链路层如何识别帧头、帧尾,以及一些重要问题是如何解决的。
1. 链路(link):指一条点到点的物理线路段,中间没有其他的点。
* 注意:一条链路只是一条通路的一个组成部分
2. 数据链路(data link):除了物理线以外,还必须有通信协议来控制这些数据的传输。而实现这些协议的硬件额软件加到链路上,就构成了数据链路。
* 实现这些协议硬件和软件:现在最常见的方法是使用适配器(即网卡)
* 一般的适配器都包括了数据链路层和物理层
3. 数据链路层传输的是帧。
2. 三个基本问题
(1)封装成帧
1. 封装成帧:就是在一段数据的前后分别添加帧头、帧尾就构成了一个帧。
* 注意:一段数据是指一定长度内的数据,并不是无限长的。一般最大是1500Byte
2. 帧头、帧尾
* 实现:采用一些ASCII码为不可打印字符做帧头帧尾,比如控制字符
* 作用:对帧进行定界。
3. 接受方:接受方在接受帧时,只有接受到帧头帧尾的帧才会获取,其他的都会舍弃。
(2)透明传输
上述的封装成帧存在一个问题:帧的数据部分可能出现非打印字符,甚至可能与帧头(SOH)帧尾(EOT)一样。这样会导致只有前半截的数据被接受,后半截的数据被舍弃,如下图所见。如何避免?
解决方案:在帧的数据部分,且出现非打印字符时,在前面加一个转义字符,来标识其是帧的数据部分,不是帧头或帧尾。如下图所示:
发送端的数据链路层会为数据包添加帧头、帧尾和转义字符。
在接受端的数据链路层会自动的去掉帧头、帧尾和转义字符。
这整个过程用户并不知道,用户知道数据被传输过去,所以叫透明传输。
(3)差错控制
问题:其实,除了上面这个问题,还存在一个问题:在数据的传输过程中,信号衰落或者受到噪音的干扰,会出现一些比特位的数据由0变为1或者由1变为0,从而出现差错。如何解决?
解决方法:一般会将数据分组,每一组数据后面都加上帧检查序列(FCS),接受端的数据链路层会根据**帧检查序列(FCS)**来判断数据是否出错。
帧检查序列(FCS)如何得到?方法有很多,下面介绍其中一种方法:循环冗余检验(CRC)
接受端如何判断数据是否出错?同样的在接收端的数据链路层对数据帧进行循环冗余检验(CRC)计算。如果余数是0,则认为没有出错;反之则出错,但是无法纠错,会舍弃该数据。
无差错接受:凡是接受的帧,我们以非常接近于1的概率认为这些帧在传输过程中没有产生差错。 |
---|
可靠传输:发送什么就收到什么。(通过确认和帧的重传机制) |
小结:CRC差错技术是一种无比特差错,而不是可靠传输。因为通过CRC计算出的FCS可能为0,且除数越大,概率越接近1 |
现在全世界使用最多的数据链路层协议是点对点协议的(Point-to-Point,简称PPP协议)。拨号上网一般都是采用的PPP协议,可见PPP协议有身份验证的功能。
PPP协议要求:
5. PPP协议工作状态: