【网络】TCP协议中的四大定时器
来源:互联网 发布:淘宝头像图片 编辑:程序博客网 时间:2024/06/06 01:20
前言
在TCP连接中,有四大定时器来维持连接的正常运行,这四个定时器分别是超时重传定时器、坚持定时器、保活定时器以及时间等待计时器
超时重传定时器
所谓超时重传,是TCP之所以可靠的一点。该定时器就是当一个TCP报文发送后,启动该定时器。
如果在规定时间内,没有收到该报文的确认序号,便重新传输该报文,并将超时重传定时器重置。
如果在规定时间内收到了对应报文的确认,则撤销该对该报文的超时重传定时器。
坚持定时器
坚持定时器是为了解决当滑动窗口为0时而造成死锁的问题。
当A给B发送报文中的窗口设置为0时,B便知道A现在不便接受数据,所以会进行等待。
这种情况下,如果A的缓冲区又可以收数据了,并给B发送了一个窗口非0的报文。
此时,如果该报文不幸丢失了,B便不知道可以给A发送数据了,A也认为自己已经给B说了。
此刻会造成死锁的问题。
这里便引入了坚持定时器,当一方收到窗口为0的报文时,便启动该定时器。
若定时器时间到了,便发送0窗口探测报文(该报文只有1字节的数据)。
对方收到该报文后,会告诉其当前的滑动窗口值,如果还是0,则继续等待。计时器重置,并加倍,最大时间长度为60秒。
若不为0,则打开了死锁。
保活定时器
当服务端和客户端建立连接时,服务端便会维护一个保活定时器。用来防止由于客户端故障而造成TCP连接无法释放的情况。
当服务端收到客户端发送过来的消息时,便重置该定时器。
如果该定时器计时达到了两个小时,便会给客户端以每75秒发送一个探测报文,连续发送10次。
若客户端还没有进行相应,则和客户端断开连接,防止资源的浪费。
时间等待计时器
我们知道,TCP链接终止的时候需要四次挥手。
当主动断开的一方A收到被动一方B的第三次挥手FIN报文后,A会发送第四次挥手的ACK报文。
此刻,A便启动该定时器
(1)为了保证客户端发送的最后一个ACK报文段能够到达服务器。因为这个ACK有可能丢失,从而导致处在LAST-ACK状态的服务器收不到对FIN-ACK的确认报文。服务器会超时重传这个FIN-ACK,接着客户端再重传一次确认,重新启动时间等待计时器。最后客户端和服务器都能正常的关闭。假设客户端不等待2MSL,而是在发送完ACK之后直接释放关闭,一但这个ACK丢失的话,服务器就无法正常的进入关闭连接状态。
(2)他还可以防止已失效的报文段。客户端在发送最后一个ACK之后,再经过经过2MSL,就可以使本链接持续时间内所产生的所有报文段都从网络中消失。从保证在关闭连接后不会有还在网络中滞留的报文段去骚扰服务器。
- 【网络协议】TCP中的四大定时器
- 【网络协议】TCP中的四大定时器
- 【网络】TCP协议中的四大定时器
- TCP协议中的四大定时器
- TCP协议中的定时器
- TCP协议中的定时器
- TCP协议中的定时器
- 网络基础 — TCP四大定时器
- 第十三篇:TCP中的四大定时器
- 总结TCP协议中的定时器
- 《网络协议》TCP 四种定时器
- 浅析TCP协议中的各种定时器
- 网络编程中的TCP协议
- TCP/IP协议 --- 定时器
- java网络中的UDP/TCP协议
- 《网络协议》TCP 协议
- Linux网络基础——TCP中的定时器
- tcp/ip网络协议中的tcp是指什么
- ubuntu安装scrapy
- COGNOS网页版制作-cognos提示框样式替换
- ONT-How to Create a Debug File in Shipping Execution (文档 ID 290432.1)
- 卡尔曼滤波学习笔记
- 在GitLab上如何删除工程
- 【网络】TCP协议中的四大定时器
- Boost function使用方法
- git系列:gitignore
- 《逆向工程核心原理》学习总结(三)
- iOS开发笔记之基于键值的观察者模式(KVO)
- CSS引入的方式及link和@import的区别
- LINUX下修改mysql数据库密码
- IBatis-学习-3
- 自定义TabBarController,支持双击回到顶部