TCP坚持定时器
来源:互联网 发布:相声世界知乎 编辑:程序博客网 时间:2024/05/29 19:41
TCP通过让接收方指明希望从发送方接收的数据字节数(即窗口大小)来进行流量控制。如果窗口大小为0会发生什么情况呢?这将有效阻止发送方传送数据,直到窗口变为非0为止。
ACK的传输并不可靠,也就是说,TCP不对ACK报文段进行确认,TCP只确认那些包含有数据的ACK报文段。
1.坚持定时器
假设一个场景:如果一个确认丢失了,则双方就有可能因为等待对方而使连接终止,接收方等待接收数据(因为它已经向发送方通告了一个非0的窗口),而发送方在等待允许它继续发送数据的窗口更新。为防止这种死锁情况的发生,发送方使用一个坚持定时器(persist timer)来周期性地向接收方查询,以便发现窗口是否已增大。这些从发送方发出的报文段称为窗口探查(window probe)。
计算坚持定时器时使用了普通的TCP指针退避,窗口探查报文包含一个字节的数据。坚持状态与21章介绍的重传超时之间一个不同的特点就是TCP从不放弃发送窗口探查。这些探查每隔60秒发送一次,这个过程将持续到窗口打开或者应用进程使用的连接被终止。
糊涂窗口综合症:接收方可以通告一个小的窗口(而不是一直等到有大的窗口时才通告),而发送方可以通过这个小窗口发送少量的数据(而不是等待其它的数据以便发送一个大的报文段),即,少量的数据通过连接交换,而不是满长度的报文段,TCP的传输效率可想而知。
如何避免“糊涂窗口综合症”:
接收方:接收方不通告小窗口,除非增加一个报文段(MMS)或者接收方缓存空间的一半,否则通告为0。
发送方:
(1)可以发送一个满长度的报文段(MMS)
(2)可以发送至少接收方通告窗口一半的报文段
(3)能够发送手头的所有数据并且不希望接收ACK,或者该连接禁止了Nagle算法时,可以发送任意数据。
坚持定时器工作流程:
(1)发送端收到0窗口通告后,就启动坚持定时器,并在定时器溢出的时候向客户端查询窗口是否已经增大。(2)在定时器未到,就收到非零通告,则关闭该定时器,并发送数据。
(3)若定时器已到,还没有收到非零通告,就发探查报文。
(4)如果探查报文ACK的通告窗口为0,就将坚持定时器的值加倍,TCP的坚持定时器使用1,2,4,8,16……64秒这样的普通指数退避序列来作为每一次的溢出时间,重复1、2、3步,如果通告窗口非零,发送数据,关闭定时器。
0 0
- TCP坚持定时器
- TCP坚持定时器,TCP保活定时器
- (13)-TCP坚持定时器,TCP保活定时器
- (22)TCP的坚持定时器
- 第二十二章 TCP的坚持定时器
- TCP/IP详解-坚持定时器和保活定时器
- TCP/IP 详解 卷1 ch22 TCP的坚持定时器
- TCP/IP 第22章 TCP的坚持定时器
- 【TCP/IP详解】第22章 TCP的坚持定时器
- TCP-IP详解之TCP的坚持定时器5
- 《TCP/IP详解 卷1》 笔记: TCP的坚持定时器
- TCP/IP详解学习笔记(13)-TCP坚持定时器,TCP保活定时器
- TCP/IP详解学习笔记(13)-TCP坚持定时器,TCP保活定时器
- TCP/IP详解学习笔记(13)-TCP坚持定时器,TCP保活定时器 .
- TCP/IP详解学习笔记(13)-TCP坚持定时器,TCP保活定时器
- TCP/IP详解学习笔记(13)-TCP坚持定时器,TCP保活定时器 .
- TCP/IP详解--学习笔记(13)-TCP坚持定时器,TCP保活定时器
- TCP/IP详解学习笔记(13)-TCP坚持定时器,TCP保活定时器
- Decode ways
- ANDROID之路-Android_Intent setFlags | 或运算符的含义
- Delegate理解
- 三分钟学会JUnit单元测试
- hdu4268 Alice and Bob(二维贪心的固定思想 STL的multiset的二分查找函数实现)
- TCP坚持定时器
- Harris corner OpenCV源码查询之路
- 关于Java中数值计算的一些误区
- PHP 生成接口数据格式
- Hadoop 问题汇总
- python-生成器
- Adapter
- Oracle数据库JDBC连接
- 理解堆栈及其利用方法