数据通信——传输层TCP(可靠传输原理的停止等待协议)

引言

    基于上次的基本特性中的可靠传输特性,我们对其进行详细的分析。

    对了,在讲解TCP前,先对缓存进行一个简单的描述。我们都听说过缓存这个东西,我们发来的数据,会暂时写入到缓存中进行预处理,随后从缓存中将数据发送出去。

    比如当我们访问某个网页或应用程序时,系统会首先检查缓存中是否已经保存了该页面或应用程序的副本。如果有就从缓存中直接取用了。适当的清理缓存可以提高系统性能,但如果缓存清理太多会导致系统变慢。

    对于TCP通信而言,缓存控制了数据收发的速度,让数据可以流畅稳定不出差错的进行发送。

停止等待协议 

    为什么要设置这个协议?

    第一点:因为在网络环境中,TCP处理报文是很细致的,主机需要配合TCP运作进行额外的数据处理。所以,如果数据的发送速度和TCP处理报文的速度不匹配,将会导致数据溢出,也就是发送过量数据导致TCP不能及时处理从而通信崩溃。

    我们针对这个问题引入了反馈机制来调节发送速度。

    第二点:数据在传输中容易出现错误。TCP是面向字节流的,如果有的字节流发生问题(如:出错和丢失),那么通信质量就无法保证了。

    我们针对这个问题引入了超时定时器重传机制

    第三点:紧接上面的传输问题,丢失数据后我请求重传,但是重传来的数据我只需要一次,要避免反反复复接收重传的报文.

    我们针对这个问题使用序号标记数据确认报文。(ACKn表示对n-1号及其以前各编号数据的确认,期望下次收到n号数据。

好了,上述的问题你应该懂能看懂,但是解决方法你肯定很懵,后续几张就将围绕这些黄体的标记字展开。

停止等待协议的工作流程

    停止等待协议通信系统中,规定发送方每发送一帧后就要停下来等待接收方的确认返回,仅当接收方确认正确接收后再继续发送下一帧

    就好像咱们现实生活中排队买东西一样,大家都在排队,只有等前一个人交易完了,我们后面的人才能接着交易。中途如果插队,或者别人还没交易完你就抢着付款,售货员和顾客都不会同意的。 

上面是一个简单的流程图,我们对该图进行一个解释!

我们先看左边,这是发送端的一个运作情况。

发送端

1.主机要发送一个数据(data),此时我们设V(S)是发送状态变量,V(S)=0表示现状态设备还没有发送数据。

2.我们将数据放入缓存(Buffer),在此之前,我们再设N(S)为发送序号。将发送状态变量V(S)写入N(S),并给数据贴上标记data_No后置入缓存。

3.接下来缓存(Buffer)将我们的数据(data_No)发送出去。

4.此时开启定时器,定时器进入等待状态

5.如果数据发送到了,会返回一个ACKn,这个ACKn中的n值变成携带发送状态变量V(S)+1,表示我收到了数据,从而将新的V(S)值(假定是1)返回给缓存,缓存看到V(S)变成了1,就知道数据发送成功了,它可以继续发送后面的数据了。

在定时器的限定时间内,倘若我没有收到ACKn的回复,则证明数据传输失败,我会反馈给缓存让其继续发送没有收到的信息。

注:

    还记得引言中对缓存的描述吗?缓存中发送过的数据会以副本形式保留一段时间,当信息发送失败收到重传请求时,会将副本发送出去。只有当对方收到报文并返回ACKn以后,才会删除缓存中的副本。

    如果收到了多个相同的ACKn报文,则代表接收端的数据重复接收了!

 

复制了一份,继续,我们在看右边

接收端

1.发送端没法送来任何数据,自然我们接收端就处于V(R)=0的状态,表示没有数据到达这边。

2.很快,数据传送来了,但是我们要确认收到的data是否正确。

3.发送来的数据中携带的N(S)发送序列会和V(R)接受序列进行比对,因为N(S)发送来的时候与V(S)相同都是0,正好和V(R)是相等的。那么此时,接收端收下数据给主机,并在自己的V(R)更新状态序列上+1,将其赋值给ACKn中的n返回给发送端,表示我收到了数据,你可以继续进行接下来的发送了。

倘若N(S)≠V(R)或者收到的data有问题。都不会将V(R)进行更新,而是直接赋予ACKn,也就是n仍然是0.当发送端收到ACKn时发现对端居然没有更新ACK,那么就继续发送缓存中的副本给对端。

如果接收端发现自己的ACKn无法发到发送端,不慌,发送端的定时器超时后会解决这个问题!

注:发送端和接收端要同时看,就能对停止等待协议有了更深刻的了解。也可以更加详细的了解TCP三次握手了。

后续

我在网上找了个简述版本的,虽然不那么细致,但是很精炼,非常不错!

① 发送方每次仅将当前信息帧作为待确认帧保留在缓冲存储器中;

② 当发送方开始发送信息帧时,随即启动计时器;

③ 当接收方收到无差错信息帧后,即向发送方返回一个确认帧;

④ 当接收方检测到一个含有差错的信息帧时,便舍弃该帧;

⑤ 若发送方在规定时间内收到确认帧,即将计时器清零,继而开始下一帧的发送;

⑥ 若发送方在规定时间内未收到确认帧,(即计时器超时),则应重发存于缓冲器中的待确认信息帧。

上述讲了停止等待协议的工作流程,但是重传机制还没有描述。

    发送端对出错的数据帧进行重传可以是自动进行的,因而这种差错控制的体制常简称为ARQ(Automatic Repeat Request)——自动重传请求(不过叫它自动请求重传更合适)。

后续篇幅会讲述重传问题!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

咕噜跳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值