首页 > 编程知识 正文

TCP 协议详解三 TCP滑动窗口技术,tcp滑动窗口协议

时间:2023-05-03 14:57:19 阅读:239920 作者:4437

前言

TCP(Transmisson Control Protocol)又叫传输控制协议作为传输层最重要的协议,对于信息的可靠传输有着重要的意义,针对这一协议的攻击也数不胜数,这里就对这一协议以及相关内容进行详细的总结,将从以下几个方面进行介绍。
本文以wxdjz老师的《计算机网络》网课为基础,感兴趣的话可以私信我要资料

文章目录 前言1. TCP滑动窗口技术实现可靠传输2. 超时重传时间的选择

1. TCP滑动窗口技术实现可靠传输

在开始讲滑动窗口技术的具体实现之前,大家有一点要搞明白,发动窗口不等于发送缓存、接受窗口也不等于接收缓存,发送窗口只是发送缓存的一部分,接受窗口也只是接收缓存的一部分,具体可以参考下图:

具体可以看这一篇,这个博主讲的很好。
接下来将具体的过程:

如图,发送方在发送数据时,一直维持一个窗口,注意:这个窗口的大小是动态变化的

如图,A向B发送了6个字节的数据,B向A发送了确认包,确认号为7,A收到确认包以后,1-6就要从缓存中清除,窗口要向前滑动,如图:

发送方已经收到确认的包从缓存中删除,接收方的数据也被应用数据读取并从缓存中删除,在整个过程中,对接收方B来说,如果因为应用程序读取速度慢等原因导致接收缓存中已收到但是未利用的数据越来越多,那么窗口的大小就会减小,减小的信息也会随TCP包传到A,A的发送窗口也会减小,如果减小到0,那么就停止发送。

如图是前二十个数据已经全部接收并从缓存中删除后的情形,窗口继续向前滑动。
以上是正常接收以及确认的情况
那么当中间出现丢包时怎么办呢?
这时就要用到SACK(选择性确认)了,如图:

接收方通过选择确认告诉发送方哪些数据丢失,那些数据已经收到等,选择确认这种可靠传输方式也称为快速选择性重传。
具体的实现方式是通过在确认TCP报文的选项的SACK中加上边界,如图:

这样就可以标识已经确认收到的是哪一段数据,从而发送丢失的数据。

2. 超时重传时间的选择

这里只要理解了下列的公式即可:

RTT是往返时间,因为网络情况无法预知,每个数据包的RTT也不可能一样,如果设定的重传时间太短,会导致重传过于频繁,浪费计算机和网络资源,如果太长,那么又会降低传送速率。因此需要这一公式来确定重传时间。
另一方面,网络是在动态变化的,重传时间需要不断更新,那么就要在旧的RTT的基础上,加权上新的RTT样本,这样才能较为准确的反映现在网络的情况,选择合适的RTT。
还有,超时重传时间应该略大于这个理论时间,仅仅等于的话,还是会导致重传过于频繁,大的多的话还是会降低传送效率,因此要略大于

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。