计算机网络(4.2)——流量控制和可靠传输

数据链路层的流量控制

较高的发送速度和较低的接收能力的不匹配,会造成传输出错,因此流量控制也是数据链路层的一项重要工作。

发送方发送的数据接受方接收不到就造成了溢出。

数据链路层的流量控制是点对点的,而传输层的流量控制是端到端的。

数据链路层流量控制手段:接收方收不下就不回复确认。

传输层流量控制手段:接收端给发送端一一个窗口公告。

首先注意一点是:因为之前的通信质量问题,链路层会使用可靠的传输协议,如:停止等待协议等,但现在多交给传输层去做,链路层主要进行差错控制,但其实也不用太过纠结是哪个层次的,只要知道协议的工作过程就行,本质都是一样的。

停止等待协议

停止等待就是每发送完一个分组就停止发送,等待对方的确认。在收到确认后再发送下一个分组。

为什么要有停止等待协议?

1.除了比特出差错,底层信道还会出现丢包问题。丢包:物理线路故障、设备故障、病毒攻击、路由信息错误等原因,会导致数据包的丢失。

2.为了实现流量控制。

研究停等协议的前提?

虽然现在常用全双工通信方式,但为了讨论问题方便,仅考虑一方发送数据(发送方),一方接收数据(接收方)。

因为是在讨论可靠传输的原理,所以并不考虑数据是在哪一个层次上传送的。

“停止-等待”就是每发送完一个分组就停止发送,等待对方确认,在收到确认后再发送下一个分组。

停等协议有几种应用情况?

无差错情况&有差错情况

无差错情况

 

用一个比特来标记数据包就足够了。

有差错情况

1.数据帧丢失或者检测到帧出错

发完一个帧之后保留他的副本,直到接收到ACK,丢掉副本。要是在一定时长里没有接收到ACK,就会重传。

编号是因为如果接收到两次0,就知道重传。

2.ACK丢失

3.ACK迟到

 

性能分析

 

滑动窗口协议

该协议允许发送方在停止并等待确认前发送多个数据分组。由于发送方不必每发一个分组就停下来等待确认。因此该协议可以加速数据的传输,提高网络吞吐量

例如:把第一个和第二个包发过去后,收到第一个确认包就把第三个包发过去,而不是去等到第二个包的确认包才去发第三个包。

https://www.cnblogs.com/coder-programming/p/10627746.html

简单来说就是一个窗口的大小是固定的(链路层是的,但是传输层不一定)(窗口里的包=没有收到回复的包+已读没发送的包),当左边的包(没有收到回复的包)收到了回复之后,窗口就会向右移动,1.会把一定量的包读进来,保证窗口的大小固定,2.会发送几个包。        

就这样一直循环,如果窗口里的包有一个一直等不到回应,就会重传。

1.GBN

其实与上述的内容差不多,只不过接受方只有一个窗口而已,发送了ACK就会向后滑。

发送方要做的事

1.上层的调用

上层要发送数据时,发送方先检查发送窗口是否已满,如果未满,则产生一个帧并将其发送;如果窗口己满,发送方只需将数据返回给上层,暗示上层窗口已满。上层等一会再发送。( 实际实现中,发送方可以缓存这些数据,窗口不满时再发送帧)。

2.收到了一一个ACK

GBN协议中,对n号帧的确认采用累积确认的方式,标明接收方已经收到n号帧和它之前的全部帧。

3.超时事件

协议的名字为后退N帧/回退N帧,来源于出现丢失和时延过长帧时发送方的行为。就像在停等协议中一样,定时器将再次用于恢复数据帧或确认帧的丢失。如果出现超时,发送方重传所有已发送但未被确认的帧。

接收方要做的事

如果正确收到n号帧,并且按序,那么接收方为n帧发送一个ACK,并将该帧中的数据部分交付给上层。

其余情况都丢弃帧,并为最近按序接收的帧重新发送ACK。接收方无需缓存任何失序帧,只需要维护一个信息: expectedseqnum (下一个按序接收的帧序号)。

缺点
需要批量重传

2.SR

2和4是应景发送但是还没有接收到确认,所以会先拷贝副本。

6是已经接收并且已经给发送方消息,但是由于5还没有收到,所以6先暂时放入缓存。等到全部接收到之后在全部传给网络层。在窗口之外的是还不能接受的,就算收到了也不能接收。

发送方要做的事:
1.上层的调用

从上层收到数据后,SR发送方检查下一个可用于该帧的序号,如果序号位于发送窗口内,则发送数据帧;否则就像GBN一样,要么将数据缓存,要么返回给上层之后再传输。

2.收到了一个ACK

如果收到ACK,加入该帧序号在窗口内,则SR发送方将那个被确认的帧标记为已接收。如果该帧序号是窗口的下界(最左边第一个窗口对应的序号),则窗口向前移动到具有最小序号的未确认帧处。如果窗口移动了并且有序号在窗口内的未发送帧,则发送这些帧。

3.超时事件

每个帧都有自己的定时器,一 个超时事件发生后只重传一个帧。

接收者要做的事:
SR接收方将确认一个正确接收的帧而不管其是否按序。失序的帧将被缓存,并返回给发送方一个该帧的确认帧[收谁确认谁],直到所有帧( 即序号更小的帧)皆被收到为止,这时才可以将一-批帧按序交付给 上层,然后向前移动滑动窗口。

总结:SR和GRB的区别就是SR的接受方有多个窗口,这样的话,就可以接收乱序的帧,他是等到窗口中较小序号的帧接收完毕才会向前滑动窗口,如果出现丢失的情况,只需要重传丢失的帧就可以了。

窗口的长度不可以是无限的。发送窗口最好等于接收窗口。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值