TCP一共有四个主要的定时器,前面已经讲到了一个--超时定时器--是TCP里面最复杂的一个,另外的三个是:
- 坚持定时器
- 保活定时器
- 2MSL定时器
其中坚持定时器用于防止通告窗口为0以后双方互相等待死锁的情况;而保活定时器则用于处理半开放连接
1.坚持定时器
坚持定时器的原理是简单的,当TCP服务器收到了客户端的0滑动窗口报文的时候,就启动一个定时器来计时,并在定时器溢出的时候向向客户端查询窗口是否已经增大,如果得到非零的窗口就重新开始发送数据,如果得到0窗口就再开一个新的定时器准备下一次查询。通过观察可以得知,TCP的坚持定时器使用1,2,4,8,16……64秒这样的普通指数退避序列来作为每一次的溢出时间。
糊涂窗口综合症
TCP的窗口协议,会引起一种通常叫做糊涂窗口综合症的问题,具体表现为,当客户端通告一个小的非零窗口时,服务器立刻发送小数据给客户端并充满其缓冲区,一来二去就会让网络中充满小TCP数据报,从而影响网络利用率。对于发送方和接收端的这种糊涂行为。TCP给出了一些建议(或者是规定)。
- 接收方不通告小窗口。通常的算法是接收方不通告一个比当前窗口大的窗口(可以为0),
除非窗口可以增加一个报文段大小(也就是将要接收的MSS)或者可以增加接收方缓存空间
的一半,不论实际有多少。
- 发送方避免出现糊涂窗口综合症的措施是只有以下条件之一满足时才发送数据: ( a )可
以发送一个满长度的报文段; ( b )可以发送至少是接收方通告窗口大小一半的报文段; ( c )可以
发送任何数据并且不希望接收ACK(也就是说,我们没有还未被确认的数据)或者该连接上
不能使用Nagle算法。
ok,现在我们回忆一下,可以发现TCP的很多规定都是为了在一次传送中发送尽量多的数据,例如捎带ACK数据报文的策略,Nagle算法,重传时发送包含原数据报文的策略,等等。
2.保活定时器
保活定时器更加的简单,还记得FTP或者Http服务器都有Sesstion Time机制么?因为TCP是面向连接的,所以就会出现只连接不传送数据的“半开放连接”,服务器当然要检测到这种连接并且在某些情况下释放这种连接,这就是保活定时器的作用。其时限根据服务器的实现不同而不通。另外要提到的是,当其中一端如果崩溃并重新启动的情况下,如果收到该端“前生”的保活探察,则要发送一个RST数据报文帮助另一端结束连接。
分享到:
相关推荐
### ESP8266 TCP Client 模式详解 #### 一、引言 ESP8266 是一种非常流行的低成本 Wi-Fi 芯片,它能够轻松地将微控制器接入互联网,实现物联网(IoT)的功能。在 ESP8266 的应用中,TCP 通信是非常重要的一个方面...
- 学习网络编程的基本概念,如TCP/IP协议栈。 - 掌握套接字编程接口(socket API)。 - **服务器程序**: - 编写简单的网络服务器,处理客户端请求。 - 实现基本的数据收发功能。 - **并发服务器**: - 使用多...
MSP430的中断源包括定时器、串行通信接口(如TCP/IP)、模数转换器(ADC)、数字输入/输出(I/O)端口等多种硬件模块。例如,`tcpip`标签可能指的是MSP430通过串行通信接口实现的TCP/IP网络协议栈,这对于实现物联网...
《S3c44b0X_Vxworks_Bsp移植详解》 S3c44b0X是一款基于ARM7TDMI内核的微处理器,由Samsung公司生产,广泛应用于嵌入式系统设计中。VxWorks是一款实时操作系统(RTOS),以其高性能、稳定性和实时性在工业控制、航空...
- **通信协议实现**:如UART、SPI、I2C的使用,可能还包括TCP/IP协议栈和USB通信。 - **定时器应用**:如PWM(脉宽调制)生成、计时任务等。 - **RTOS(实时操作系统)**:例如FreeRTOS,演示如何在LPC1788上实现多...
3. **上层协议适配**:Zigbee网关还需要实现与TCP/IP或其它上层网络协议的接口,如HTTP、MQTT等,以便将Zigbee网络的数据发送到云端或本地服务器。 4. **安全机制**:实现节点认证和数据加密,确保网络的安全稳定...
本篇文章将基于"libev手册"和"libev学习笔记"这两份文档,深入探讨libev的核心概念以及其中ev_io、ev_child、ev_timer三种主要事件监听器的使用。 **1. libev基础** Libev的事件模型基于事件循环(event loop),...
3. 网络通信:随着物联网技术的发展,TCP/IP协议的使用也越来越普遍,单片机可以通过以太网接口与MCGS进行网络通信。 四、MCGS数据采集设计 在MCGS中,可以创建各种数据窗口和图表,用于显示从单片机接收到的数据...
4. **固件库**:固件库是一组预编译的函数,可以直接在项目中调用,例如USB、TCP/IP、蓝牙固件库等,可大大简化开发过程。 5. **开发工具支持**:TI的代码库通常与CCS IDE紧密集成,使得导入和使用这些库变得简单。 ...
* 定时器、互斥、同步通信技术 * 多个线程之间共享数据的方式探討 * 使用JDK5中同步技术的3个面试题 集合框架 * 集合框架基础 * Collection接口 * List接口 * Set接口 * Queue接口 * 集合的遍历 * 集合工具类 * ...