当前位置: 首页 >应用方案 >技术应用 >

TCP协议重传机制详解

TCP/IP协议是计算机通信网络中目前使用最多的网络通信协议,同时也融入了生活的方方面面,不管是浏览网页使用的http/https协议、物联网设备使用的MQTT/MQTTS协议与下载文件使用的ftp协议、工业以太网中使用的Modbus TCP协议等很多应用层协议,都是基于TCP/IP协议TCP/IP协议在传输数据的同时,也提供了以下功能:

1、慢启动:网络环境拥塞检测;

2、重传机制:保证数据的完整性,与连接可靠性;

3、滑动窗口:流量控制,降低网络环境压力,避免数据丢包;

4、Keep-alive:网络异常检测;

本文将介绍TCP协议的重传机制与如何通调整重传机制,提高特定情况下的TCP连接稳定性。

一、TCP协议简介

TCPTransmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。TCP协议提供了一种全双工的、面向连接的、可靠的字节流服务,是TCP/IP协议簇中最重要也是最复杂的协议。为了保证数据的可靠传输,TCP协议采用了重传机制。

TCP协议的主要特点包括:

面向连接:通信前需要先三次握手建立连接,通信后四次挥手释放连接。

可靠性:通过序号解决报文乱序/丢失、超时重传、拥塞控制、滑动窗口、检验和等方式保证数据传输的可靠性。

字节流:没有固定的报文边界,数据在TCP中以字节流的形式传输。

全双工:通信两端在任意时刻可以互相发送数据,既可以是客户端也可以是服务端。

TCP假设它可以从较低级别的协议获得简单的、可能不可靠的数据报服务,原则上TCP应该能够在从硬线连接到分组交换或电路交换网络的各种通信系统之上操作。

二、重传机制详解

TCP重传机制的基本工作原理是,在数据传输过程中,当发送方没有接收到确认信息(ACK)时,会重传之前的数据。这种重传机制确保了数据的完整性和正确性。

重传机制的实现方式主要有两种:超时重传和快速重传。

1、超时重传

超时重传是TCP协议在发送数据时,设定一个定时器。当超过指定的时间(即RTO,Retransmission Timeout超时重传时间)后,如果没有收到对方的ACK确认应答报文,就会重发该数据。每次当遇到一次超时重传时,都会将下一次超时时间间隔设为先前值的两倍。这是TCP在应对网络环境差、不宜频繁反复发送的情况时采取的策略。

1 TCP协议重传机制

上图中是通过wireshark抓取的一段TCP通讯中出现超时重传且自动恢复的报文截图,IP地址为192.168.3.111的是客户端,192.168.3.108的是服务器,客户端一直在向服务器发送数据。

1.1、如何判断有没有出现重传

2 TCP协议重传机制

正常情况下,服务器应该Ack 客户端的seq(序号2031+len(数据长度20)即上图中第二条报文的ACK=2051

3 TCP协议重传机制

在上图中我们可以看到,重传的报文seq一直为2051,并且数据seq=2051的报文传输了四次,都没有服务器的ACK。所以判断TCP有没有发生重传最直观的方法就是看有没有重复的seq,还有一种是看seq有没有突然下降,如下所示:

1.2 linuxwindows下默认超时重传的间隔与次数

4 TCP协议重传机制

Linux下的重传间隔与次数

5 TCP协议重传机制

Windows的重传间隔与次数

TCP协议中,若在重传次数内没有收到对方的ACK,那么协议栈会主动RST这条链路。应用层会表现为连接断开,由于应用层并不能知道连接断开原因,所以某些时候会错误的认为是被对方主动断开连接,如果不通过抓包,就很难找到断开连接的原因。

1.3 如何合理设置重传次数以保证来保证连接的可靠性

在一般的计算机网络中,TCP通讯双方的协议栈机制完整,系统资源充足,应用层处理速度快,所以一般的情况下,系统默认的重传参数就能满足几乎大部分由于网络环境异常导致的丢包。但很多低成本嵌入式以太网方案因为成本与资源的原因,设备处理速度慢、内存资源等限制,在某些情况下无法接收过多的数据,导致数据丢包,无法ACK发送方的数据。导致连接异常断开。但这种情况完全可以通过降低发送频率或者增加重传次数的方法来避免。

2、快速重传

快速重传是一种不以时间为驱动,而是以数据驱动的重传机制。快速重传通过收到同一丢失数据包的多个重复确认(ACK)来触发。特定的触发条件通常被称为“三重重复ACK”。如果接收方检测到同一丢失数据包在重复ACK中连续三次被确认,则认为这是丢失数据包已丢失且后续数据包正在到达接收方的强烈指示。发送方在收到这样的信号后,会假设丢包的可能性很高,并立即发起快速重传,从而更快地从数据包丢失中恢复并保持更顺畅的数据流。这两种重传机制共同确保了TCP协议在数据传输过程中的可靠性和稳定性。

今天的分享就到这里啦,EBYTE每一天都致力于更好的助力物联化、智能化、自动化的发展,提升资源利用率,更多产品及相关资料,感兴趣的小伙伴可以登录我们的亿佰特官网进行了解,也可以直接拨打400电话咨询技术专员!

https://www.wjx.cn/jq/84863372.aspx