首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

TCP重传机制详解

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

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

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

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

Keep-alive:网络异常检测

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

TCP协议简介

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

TCP的主要特点包括:

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

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

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

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

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

重传机制

(1)超时重传

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

如何判断有没有出现重传

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

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

Linux与Windows下默认超时重传的间隔与次数

Linux下的重传间隔与次数

Windows下的重传间隔与次数

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

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

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

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OChWcRwYqo-WLrbqdZlh6PVA0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券