标签:服务器 需要 死锁 保活 接受 产生 传输 服务 窗口
TCP提供可靠机制,因此对于丢失的报文需要进行重传!
那么,发送一个数据出去之后,什么时候进行重传呢?用到了重传定时器.
在发送数据后,便立刻创建一个该报文段的重传定时器.
如果定时器还没结束,收到了确认报文,则撤销该定时器.
如果定时器结束,还没收到确认报文,则进行重发.
定时器时间为动态计算的,常见公式新RTT=旧RTT的90%+当前RTT*10%
接受方窗口为0,则发送端会停止发送,直至收到接受方窗口不为0的通告.
但是,如果接受方窗口不为0的通告丢失了,则会产生死锁!!!!
接受方等发送方发送数据,发送方等接受方发送窗口不为0的通告(窗口不为1的通告报文丢失).......
因此,需要一个计时器来解决这个问题.
当接受方窗口为0,发送方激活该计时器,如果计时器结束,还没收到接受方窗口不为0的通告.
此时,发送方会向接受方发送探测报文.如果接受方窗口依然为0,则计时器的值加倍复位,直到计时器的值达到一个阙值.
如果接受方窗口不为0,则继续传输数据...
每次服务器收到客户端数据时,重置保活定时器,
如果保活定时器为0,则发送探测报文段,若发送10个报文段还是没有响应,则终止链接.
当断开连接后,主动断开的一方会进入TIME_WAIT状态,防止一些超时、游离报文、重复的FIN报文被丢弃。
标签:服务器 需要 死锁 保活 接受 产生 传输 服务 窗口
原文地址:http://www.cnblogs.com/caolicangzhu/p/7169471.html