文章目录
数据链路层功能介绍
1.基本概念
- 结点:主机、路由器
- 链路:网络中两个结点之间的物理通道,链路的传输介质主要有双绞线、光纤和微博
- 数据链路:网络中两个结点之间的逻辑通道,把实现控制数据传输协议的硬件和软件加到链路上就构成了数据链路
- 帧:链路层的协议数据单位,封装网络层数据报
而数据链路层负责通过一条链路从一个结点向另一个物理链路直接相邻结点传送数据报
2.数据链路层所扮演的角色
- 数据链路层在物理层提服务的基础上向网络层提供服务,其最基本的服务是将来自网络层的数据可靠的传输给相邻结点的目标主机的网络层.
- 其主要作用是加强物理层传输原始比特流的功能,将物理层提供的可能出错的物理连接改造成为逻辑上无差错的数据链路,使之对网络层表现为一条无差错的链路
- 网络层、数据链路层和物理层之间的那些猫腻
咱们来举个“栗子”,说明三者之间的关系
- 角色:老板(网络层),秘书(数据链路层),快递员(物理层)
3.数据链路层的功能
功能 | 作用 |
---|---|
功能一 | 为网络层提供服务.无确认无连接,有确认无连接服务,有确认面向连接服务 |
功能二 | 链路管理(连接的建立、维持和释放) |
功能三 | 组帧 |
功能四 | 流量控制(让发送方“悠”着点) |
功能五 | 差错控制(帧错/位错) |
- 封装成帧
封装成帧
-
封装好的帧
-
封装成帧
在一段数据前后添加首部和尾部构成一个帧.接收端在收到物理层上交的比特流后,就根据首部和尾部标记,从收到的比特流中识别帧的开始和结束.
- 帧定界
首部和尾部包含许多的控制信息,他们的作用就是确定帧的界限
组帧的四种方法
1.字符计数法
- 缺点:容易出错
若某个帧中首部表示有5个字节,而由于发生错误帧首部的元素变成了4,那么就会导致该帧少读取一个字节,后续的所有帧的封装结果都会出错(该序列中,首部的5变成4之后,该帧的组合就是1,2,3片段,那么下一个帧的帧长就会从5向前移动一位变成4就会导致后续的全部出错)
2.字符(节)填充法
-
使用特定的序列来表示帧的开始与结尾
-
问题
如果在数据部分出现帧结束序列的话会造成数据的读取提前结束,后续数据中找不到帧开始序列就将该帧丢弃.这样就会导致数据在传输过程中出现错误 -
如何解决该问题呢?
-
在数据部分出现帧结束序列的时候在其前面添加一个"ESC"(二进制数据)来区别
-
发送和接收方的处理方式
3.零比特填充法
- 发送方:扫描整个信息字段,只要出现连续5个1,就立即填入1个0
- 接收方:在接收到一个帧时,先找到标志字段确定边界,再用硬件对比特流进行扫描,发现连续5个1时就把后面的1个0删除掉。
4.违规编码法
- 在编码过程中使用两个不是合法的编码来确定帧的起始和结束位置,从而确定帧的大小.
差错控制
1.差错的来源
- 传输过程中的差错是由噪声引起的
- 差错分类
1.位错:比特位出错(1变成0,0变成1)
2.帧错:
- 1.丢失:收到的帧序列中缺少某个帧
- 2.重复:重复收到某个帧
- 3.失序:接收端接收到的帧序号混乱
- 如下图
2.数据链路层的差错控制
- 控制方式
2.1:奇偶校验码
- 缺点:只能检测出奇数个比特错误,检测能力为50%
2.2:CRC循环冗余码
- 发送端
- 异或运算
- 接收方
流量控制与可靠传输机制
在我们坐地铁的时,有时候人流量比较大。当人流量比较大的时候我们会发现,有太多的乘客需要进行安检了,但是安检口每次可以进行安检的人数是有限的。所以地铁工作人员就在离安检门口不远的地方设置了一个类似于“关卡”的地方,在此处工作的安检员会根据安检口的人数多少来决定让多少名乘客到安检区去接收安检.
而在网络中也会发生类似的情况,如果发送方发送的速度太快而接收方的接收不能够处理这么多数据的时候,就会造成大量的数据丢失.所以这时就需要接收方通知发送方让他慢一点.这种机制就是流量控制
流量控制的方法有两种
- 1.停止等待协议
- 2.滑动窗口协议
1.停止等待协议
-
发送方发送一帧数据,接收方接收一帧数据,
-
接收方回馈一份确认应答,发送方再发送下一个帧.
-
如此循环,直到所有的数据帧都发送完毕
-
停止等待协议无差错的情况
-
每次发送来的数据都能被接收方所接收,并且回馈的确认应答也能安全到达
-
有差错的情况
-
1.数据帧丢失或者检测到帧出错
- 2.确认应答丢失
- 停止等待协议:在发送某个帧之后会设置一个定时器,倘若在定时器到指定的时间后并没有收到确认应答,说明数据在传输的过程中出现了差错.就会重传没有收到确认应答的数据帧
- 3.ACK迟到
- 在定时器到指定的时间后,发送方没有收到数据的确认应答(发送方就会认为该数据帧在传输的过程中出现了差错)就会进行数据的重传.如果是应该网络拥堵导致ACK没有再指定时间内到达接收端,而发送端重新发送了该份数据帧,就会导致接收端收到同一个数据帧的多次确认应答,但是接收端会将首次的保留,之后出现的收下之后就会被丢弃。
这种发送方式看起来似乎很安全,很简单,不会出现错误.
但是它的缺点也很明显,那就是在发送过程中需要耗费大量的时间去等待.信道利用率太低.
- TD和TA是发送和接收时延
- RTT往返时延
- 信道利用率
2.滑动窗口
在进行流量控制的时候,由于停止等待 协议需要耗费大量的时间,使得传输效率极低.所以为了提高传输效率我们能不能一次发送多个数据帧,然后等待确认应答呢?
- 答案是可以的,这便是滑动窗口的作用了
- 可以陆续发送窗口中的数据帧,等到确认应答之后,再向前移动窗口.
2.1:后退N帧协议(GBN)
-
后退N帧的滑动窗口
-
GBN发送方必须响应的三件事
-
1.上层的调用
上层要发送数据时,发送方需要先检查发送窗口是否已满,如果未满,则产生一个帧并将其发送;但是 如果窗口已经满了,发送方只需要将数据返回给上层,暗示上层窗口已满,上层等一会再发从(实际实现中,发送方可以将这些数据放在发送缓冲区中,等待窗口不满时再发送)
-
2.收到一个ACK
GBN中,对n号帧的确认采用累积确认的方式,表明接收方已经收到n号帧与它之前的全部帧 -
3.超时事件
协议名字为后退N帧/回退N帧,其实是说在数据出现丢失和时延过长时发送方的行为就像等待协议中一样,定时器将再次用于恢复数据帧或确认帧的丢失.如果出现超时,发送方重传所有已发送但未被确认的帧(会将所有已发送但是未收到确认的帧,全部重传.会造浪费信道资源,传输效率降低等问题) -
GBN中接收方要做的事
-
1.如果正确收到n号帧,并且按序.那么接收方为n帧发送一个ACK,并将该帧中的数据交付给上层
-
2.其余情况都丢失帧,并为最近按序接收的帧重新发送ACK.接收方无需缓存任何失序帧,只需要维护一个信息:expectedseqnum(下一个希望收到的帧序号)
-
传输过程
那么问题又来了,这个滑动窗口该怎么确定呢?
-
发送方窗口尺寸过大就会导致接收方无法区别新帧和旧帧(如下图)
若窗口大小为8时,该窗口中的数据如果返回的ACK全部丢失,则超时重发之后重新发送的0 ~ 7 号帧在接受端就无法确认时新的帧还是旧的帧了.
-
若采用n个比特对帧编号,那么发送窗口的尺寸应该满足: 1<=Wt<=2^n-1 .
-
GBN协议性能分析
-
优点:因连续发送数据帧而提高了信号利用率(相比于停止等待协议)
-
缺点:在重传时必须把原来已经正确传送的数据帧重传,传送效率降低
-
总结
-
累计确认(偶尔捎带确认)
-
接收方只按序号接收帧,丢弃乱序的帧
-
确认序列号最大的、按序到达的帧
-
发送窗口最大为2^n -1 ,接收窗口大小为1
2.2:选择重传协议(SR)
- 那么我们可不可以只重传出错的帧,不重复传送已经正确传输的数据帧呢?
弥补GBN的不足
答案当然是可以了,解决办法设置单个确认,同时加大接收窗口,设置接收缓冲区,缓存乱序到达的帧.
- 选择重传协议中的滑动窗口
一个用来缓冲,等待确认处理的过程。收到确认再往前移动滑动窗口(避免出现丢失之后全部重传的情况,会导致数据重发)
-
如上图
-
发送方
发送端在发送数据帧后不会立马将其删除,而是先将其存储在发送端的缓冲区中,等到收到确认应答之后才会将缓冲区中的数据删除.
而发送窗口最前端的数据若没有收到确认应答,而后续的帧都收到了确认应答,滑动窗口也不会移动而是等待最前端的帧发送成功之后再移动滑动窗口 -
接收方
将新收到的数据存储在接收缓冲区中,若所传输的帧按序到达,则可以直接交付给上层,交付后即可从缓冲区中删除
但是如上图中,若乱序接收到帧的话,会将其先存储在接收缓冲区中等待着缺失的那些数据帧的到达,只有当接收缓冲区中的数据有序的接收之后才会进行后续的工作。
-
SR发送方必须响应的三件事
-
1,上层的调用
从上层收到数据后,SR发送方检查下一个可用于该帧的序号,如果序号位于发送窗口内,则发送数据帧;否则就像GBN一样,将数据缓存或者返回给上层之后再寻时间传输 -
2.收到一个ACK
如果收到ACK,加入该帧序列号在窗口内.则SR发送方将那个被确认的帧标记为已接收.如果该帧序号是窗口的下界(最左边第一个窗口对应的序号),则窗口向前移动到具有最小序号的未确认帧处,如果窗口移动了并且有序号在窗口内的未发送帧,则发送这些帧
- 3.超时事件
每个帧都有自己的定时器,一个超时事件发生之后就只重传这一个帧.
- SR接收方要做的事
来者不拒(窗口内的帧)
SR接收方将确认一个正确接收的帧 而不管其是否按序先将帧放入缓存,返回给发送方一个该帧的确认帧,直到所有帧(既序号更小的帧)都被收到之后才会将这一批帧上交给上层,然后向前移动滑动窗口
如果收到窗口序号以外的帧,就返回一个ACK.
其他情况,就忽略该帧
-
运行中的SR图示
-
SR滑动窗口长度
发送窗口最好等于接收窗口.(大了会溢出,小了没意义)
Wtmax(发送窗口)=Wrmax(接收窗口)=2^(n-1)(此处的n指的是用n个比特位给帧编序)
窗口尺寸过大,则接收方无法区分相同序号的新帧和旧帧(如下图)
- SR协议总结
- 1.对数据帧逐一确认,收一个确认一个
- 2.只重传出错帧
- 3.接收方有缓存
传输数据使用的两种链路
- 1.点对点链路
两个相邻结点通过一个链路相连,没有第三者(类似于打电话)
- 应用:PPP协议,常用于广域网
- 2.广播式链路
所有主机共享通信介质
- 应用:早期的总线型以太网,无线局域网.常用于局域网
- 典型拓扑结构:总线型、星型(逻辑总线型)
介质访问控制
- 就是采取一定措施,使得两个结点之间的通信不会发生互相干扰的情况
CSMA/CA协议(碰撞避免协议)
载波监听多点接入/碰撞避免CSMA/CA
-
工作原理
-
发送数据前,先检测信道是否空闲
-
空闲则发出RTS(request to send) ,RTS 包括发射端的地址、接收端的地址、下一份数据将持续发送的时间等信息:信道忙则等待
-
接收端收到RTS,就响应CTS(clear to send)
-
发送端收到CTS后,开始发送数据帧(同时预约信道:发送方告知其他站点自己要传多久数据)
-
接收端收到数据帧后,将用CRC来检测数据是否正确,正确则响应ACK帧
-
发送方收到ACK就可以进行下一个数据帧的发送,若没有则一直传至规定重发次数为止(采用二进制指数退避算法来确定随机的推迟时间)
既:1.预约信道 2.ACK帧 3.RTS/CTS(可选)
CSMA/CD协议(碰撞检测)
- 最短帧长
二进制指数规避算法
CSMA/CD与CSMA/CA比较
MAC帧
- 适配器与MAC地址
- 以太网MAC帧
PPP协议
- 点对点协议ppp(Point-Point Protocol) 是目前使用最广泛的数据链路层协议,用户使用拨号电话接入因特网时一般都使用PPP协议
- ppp协议的特点
- 只支持全双工链路
- PPP协议无需满足的要求
- PPP协议格式