APP下载

程序员必须要懂网络中的资料链路层

消息来源:baojiabao.com 作者: 发布时间:2024-05-14

报价宝综合消息程序员必须要懂网络中的资料链路层

学过计算机网络的朋友们应该都知道OSI七层模型,今天要聊的资料链路层是属于七层模型中的第二层。所以应该算是计算机网络体系中的底层了。

资料链路层使用的通道主要有两种型别:

点对点通道:也就是字面意思,点对点得通讯方式。广播通道:这种通道是一对多的方式,所以整个过程也比较复杂。必须使用一些通道协议来协调网络中的主机资料传送。

我们先来通过一个例子资料链路层所处的位置。下图展示的是典型的网络图。

主机1主机2传送资料,下图展示的资料真正流动的路径(画的有点丑,意思到了就行了):

当我们专门研究链路层的时候,我们只需要关心链路层即可。于是,主机1主机2传送资料时,我们可以认为是从左到右的资料传递。如下图:

链路层的意义

物理层的线路有传输介质与通讯装置组成,位元流在传输介质上传输时肯定会存在误差的。这样就引入了资料链路层在物理层之上,采用差错检测、差错控制和流量控制等方法,向网络层提供高质量的资料传输服务。

对于网络层,由于链路层的存在,而不需要关心物理层具体采用了那种传输介质和通讯装置。

那链路层的功能有哪些呢?需要完成哪些事情呢?

链路管理,帧同步流量控制,差错控制资料和控制资讯分开透明传输和定址

怎么组帧的呢?

其实就是在帧的前后新增首部和尾部,这样就能界定帧的边界了。一帧多大呢?MTU就是帧的资料部分的最大长度,也就是IP资料报的最大长度。如下图:

怎样进行帧的界定呢?

答案就是在帧的开始和结束的地方加上特定的字元,一般是0X7E,如下图:

怎样透明传输呢?

答案就是如果帧内部的资料出现了0x7e,则要转义,转义的方法如下:

(1) 字元填充

因为0x7E=0111 1110,字元填充是在这两个字节中,填充进0xD5。变为(0x7D,0x5E)的组合。

即0111 1101 1001 1110

(2)零位元填充

因为0x7E=0111 1110,带有连续的6个1.因此传送端传送帧资料时,每当发现有连续的5个1,立即填充一个0传送。接收端对帧中的位元流扫描,每当发现5个连续的1,就把后面的1个0删除

eg:0111 1110变成0111 1101 0进行传输

差错的产生的原因

差错是不可避免的。而且不同的传输介质的差错程度也是不同的。链路层的任务就是分析差错产生的原因,检查差错,然后纠正差错。下面的图展示了差错的来源

当资料讯号从传送端传送到物理线路时,由于物理线路存在噪声,因此资料讯号经过物理线路的噪声,到达接收端时,已经是资料+噪声的叠加。这就是差错的来源。

怎样进行差错控制呢?

差错控制分为两种不同的策略:

纠错码:每个传输的分组带上足够的冗余资讯,接收端能发现并自动纠正差错。

检测吗:分组包含能够发现差错的冗余资讯,接收端能够发现差错。

由于纠错码实现比较复杂,检测码虽然不能纠错,但是足够简单,能够检测出差错,配合重传机制即可。所以广泛采用检测码。

检测码有循环冗余编码(CRC)等方式,工作原理就暂且略过,讲起来很费篇幅。

资料链路的工作过程到底是怎样的?

资料链路层的工作过程分为三个阶段:建立资料链路,帧传输,释放资料链路;结合资料链路和物理层的流程如下图:

滑动视窗协议

前面提到了用检错码来检测帧传输过程中是否发生了差错,如果发生了错误,就需要滑动视窗协议来解决。滑动视窗协议分为两种型别:

单帧停止等待协议:传送端传送1帧之后,需要等待接受端返回确认帧,如果接收到ack,表示OK,传送下一帧;如果接收到nak,表示传输错误,重新发送该帧。如下图所示(字反了见谅):

多帧传送协议:分为两种型别,后退N帧(GBN)拉回重发方式和选择重发(SR)方式。前者是只要有一帧传送失败,则当前传送的全部帧都重新发送,这样就会导致重发很多帧,流量控制不佳。后者是当前传送的帧中有差错,在下次传送的时候只是重新发送错误的帧就行了。

滑动视窗机制?

在GBN和SR中,传送端可以连续传送多个数据帧,从流量控制的角度出发,传送端连续传送资料帧的数量必然会收到限制:

1. 接收端的缓冲区可以用于接受新的帧的容量

2. 接收端处理资料帧的速度

3. 接收端需要等待重传的帧的数量

引入滑动视窗的目的:对可以连续发出的最多帧数(已发出但未确认的帧)作限制

图片来源网络

传送视窗(Ws):表示在收到对方确认的资讯之前,以连续发出的最多资料帧数

接受视窗(Wr):可以连续接收的最多资料帧数(只有序号在视窗内的帧才可以接收,否则丢弃)

觉得不错,记得转发收藏“在看”

2020-01-19 11:49:00

相关文章