降低TCP连接传输延时(TCP/IP超时重传)

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情

提起TCP协议,大多数开发者会想起的有TCP的各种状态以及之间的转换过程,对于TCP相关的系统调用也能如数家珍。但是如果说TCP网络传输究竟有多快,相当一部分开发者就没有概念了。

当前绝大部分网络应用程序都是使用操作系统内核提供的网络协议栈进行通信,因为它足够稳定而高效。但是如果因此就不去了解网络协议栈的设计和实现,那也不能称得上是一个优秀的开发人员。

就Linux而言,内核提供了完整的TCP/IP网络协议栈。它的表现形式为:

1. 使用内核提供的socket API来进行网络通信相关的各种操作,与网络通信相关的各个特性由内核实现,开发者作为用户只需关心各个接口的作用;

2. 内核来完成各种复杂的处理,最后把用户的数据发送给对方,把接收到的对方的数据传递给用户;

3. 内核提供了一系列配置文件,可以通过调整网络相关的多种配置;

4. 网络的稳定性、高效率由内核来负责等等。

剩下来的,对于开发者来说,就是知道内核提供了哪些功能,以及如何使用这些功能。使用TCP连接进行通信是绝大多数网络应用程序的实现方式,但是由于IP报文在网络上传输可能会丢失,超时,TCP/IP协议为TCP连接设置了超时重传机制。

具体来说,当内核网络协议栈,对于一条TCP连接上发送的push包,在很久之后都没有收到对方的确认时,多久之后会重发这个push包呢?

对于Linux来说,Linux遵循着TCP协议的RFC规范,但是这里并不想去探讨Linux如何确定超时重传的间隔时长,也不探讨背后的依据。这里只关心本文的目标:如何降低TCP通信延时。

笔者不喜欢卖圈子,在这里直接说方法:

1. Linux提供了一个内核参数,把文件/proc/sys/net/ipv4/tcp_low_latency里面的数值改为1(当你查看这个文件目录时你也许会惊讶,Linux内核提供了这么多参数,但是自己知道的却寥寥无几,惭愧不?);

echo "1" >/proc/sys/net/ipv4/tcp_low_latency

2. 使用ip-route命令,把rto_min修改掉(Linux内核协议栈会检查ip-route配置项,如果没有配置就使用内核源码中的数值即200ms),命令是:

ip route replace 0.0.0.0/0 via  172.31.223.253 rto_min 30

其中0.0.0.0/0是目标机器(这里即任何机器),172.31.223.253是默认网关,30就是30ms.

TCP-超时重传 主要内容: 超时重传简单实例 设置超时重传方法 基于计时器重传 快速重传 带选择确认的重传超时重传 包失序与包重复 目的度量 重新组包 与TCP重传相关的攻击 ... 阅读详情

相关推荐

TCP/IP(6)--TCP协议详解

上一篇文章已经介绍了TCP和UDP报文的首部,这一篇详细解析TCP中确保可靠传输的方法。TCP是如何确保可靠传输的?为了保证可靠传输TCP比UDP多了很多控制协议和算法。 连接管理——3次握手和4次握手 数据破坏——通过校验和 丢包——应答与超时重发机制 分片乱序——序列号 窗口滑动——提高发送效率,对发送端和接收端流量进行控制 加快通信速度——快速重发,三次收到重发消息进行重发 流控制——避免网

oscarwin 1万+

socketio-nagle-experiment:尝试尽可能降低 socketio 延迟

socketio-nagle-experiment 尝试尽可能降低 socketio 延迟。 尝试了 3 种方法: 在每个客户端消息后从服务器发送确认 从客户端每 10 毫秒发送一次填充数据包 从服务器每 10 毫秒发送一次填充数据包 android 版 chrome 的结论,相同的 wifi 网络: 如果没有任何策略(纯客户端->服务器数据),则大约25%的消息的延迟> 50ms 在每条客户端消息之后从服务器得到确认:意外地没有显着变化 从服务器到客户端每 10 毫秒填充一次数据包:真的很棒! 0% 的消息超过 50 毫秒。 平均延迟 4.47,很棒 每 10 毫秒从客户端到服务器的填充数据包给出类似的结果

计算机网络整理:UDP协议和TCP协议

系列文章目录 一、TCP/IP 各层协议 二、UDP协议和TCP协议 二者都属于传输层协议。 1.TCP和UDP的区别: ①TCP提供面向对象的连接,通信前要建立三次握手机制的连接,UDP提供无连接传输传输前不用建立连接TCP提供可靠的,有序的,不丢失的传输,UDP提供不可靠的传输,不保证数据的有序性; ③TCP不保存数据边界,UDP保留数据边界; ④TCP是重量级协议,UDP是轻量级协议; ⑤TCP有流量控制和拥塞控制,UDP无。 因此TCP传输速度相对UDP较慢; 由于UDP没有拥塞控制,因此

weixin_45486448的博客 3532

TCP传输慢问题分析

原文 :TCP传输慢问题分析 - 知乎前言对于网络传输慢问题的处理一直是一个难题,一来可能和配置有关二来可能和网络环境有关,很多时候只是从防火墙这方面去定位网络传输慢的现象着实不容易,下面就这类问题,我整理了一些解决思路,以后各位看官在…https://zhuanlan.zhihu.com/p/80043707 前言 对于网络传输慢问题的处理一直是一个难题,一来可能和配置有关二来可能和网络环境有关,很多时候只是从防火墙这方面去定位网络传输慢的现象着实不容易,下面就这类问题,我整理了一些解决思路,以后各位

maimang1001的专栏 7502

高性能网络编程3----TCP消息的接收

这篇文章将试图说明应用程序如何接收网络上发送过来的TCP消息流,由于篇幅所限,暂时忽略ACK报文的回复和接收窗口的滑动。 为了快速掌握本文所要表达的思想,我们可以带着以下问题阅读: 1、应用程序调用read、recv等方法时,socket套接字可以设置为阻塞或者非阻塞,这两种方式是如何工作的? 2、若socket为默认的阻塞套接字,此时recv方法传入的len参数,是表示必须超时(SO_RCVTI...

923723914 1536

linux 内核tcp接收数据的实现

相比于发送数据,接收数据更复杂一些。接收数据这里和3层的接口是tcp_v4_rcv(我前面的blog有介绍3层和4层的接口的实现).而4层和用户空间,也就是系统调用是socket_recvmsg(其他的读取函数也都会调用这个函数).而这个系统调用会调用__sock_recvmsg.下面我们就先来看下这个函数。 它的主要功能是初始化sock_iocb,以便与将来数据从内核空间拷贝到用户空间。然...

但行好事 莫问前程 393

Linux系统sysctl.conf配置-网络优化部分

sysctl.conf配置

bigwood99的博客 2917

TCP/IP协议

TCP/IP协议

qq_63983125的博客 4万+

TCP/IP 协议——十四章:TCP超时重传

由于下层网络层(IP)可能出现丢失、重复或失序包的情况,TCP 协议提供可靠数据传输服务。为保证数据传输的正确性,TCP 重传其认为已经丢失的包。TCP 有两套重传机制,一是基于定时器(超时),二是基于确认信息的构成(快速重传)。 基于计时器的重传 TCP在发送数据时会设置一个计时器,若至计时器超时仍未收到数据确认信息(ACK),则会引发相应的超时或基于计时器的重传操作,计时器超时称为重传超时...

weixin_30273501的博客 545

TCP/IP卷一:73---TCP超时重传之(基于计时器的重传

一、计时器的工作原理 一旦TCP发送端得到了基于时间变化的RTT测量值,就能据此设置RTO,发送报文段时应确保重传计时器设置合理 计时器的工作原理 在设定计时器前,需记录被计时的报文段序列号,若及时收到了该报文段的ACK,那么计时器被取消。之后发送端发送一个新的数据包时,需设定一个新的计时器,并记录新的序列号 因此每一个TCP连接的发送端不断地设定和取消一个重传计时器;如果没有数据丢失,则...

董哥的黑板报 2918

网络协议之TCP/IP协议(面试必考内容) - javaEE初阶 - 细节狂魔

文章目录前言TCP/IP协议应用层常见的几种的协议模板xmljsonProtobuffer小结总结传输层UDPUDP协议端格式网络层数据链路层硬件层 前言 前面讲的 IO 和 网络初识,比较基础和简单,只是让大家喘口气。。。 网络socket编程,难度中等,大家仔细学,也是能学会的。   接下来这部分,也就是本篇博文。所讲得网络原理更加底层的东西,非常类似于多线程进阶,也就是为了应付面试的八股文。 前面的多线程进阶就是纯八股,而网络原理,其实还有比较清晰的脉络的, 相比前面还是比较好理解,但是也是有一定

DarkAndGrey的博客 1万+

TCP/IP协议-为什么说TCP是可靠连接

TCP/UDP,TCP可靠性,重传、排序、流控、拥塞控制

shuaixio的博客 1万+

网络原理之TCP/IP

TCP 的工作机制 1. 确认应答 2. 超时重传 3. 连接管理 TCP 的建立连接的过程(三次握手),和断开连接的过程(四次挥手) TCP 断开连接, 四次挥手 3. 滑动窗口 5. 流量控制 6. 拥塞控制 7. 延时应答 8. 捎带应答 9. 面向字节流 10. 异常情况

qq_43339789的博客 1255

JavaWeb 基础----TCP/UDP协议详解

文章目录OSI七层物理模型UDP 报头TCP 报头TCP 的特性1.确认应答2.超时重传3.连接管理 (**重点重点重点!!!**)TCP三次握手断开连接 - 四次挥手4.滑动窗口(效率保证)介绍一下TCP的滑动窗口机制?5.流量控制6.拥塞控制7.延时应答(提高效率)8.捎带应答(提高效率)9.面向字节流如何处理TCP里面的粘包问题呢?10.TCP中的异常情况机器突然断电了,TCP连接会怎么样?TCP中的心跳包机制基于UDP协议实现可靠传输场景适用于TCP,场景适用于UDPTCP 和UDP的区别 OSI七

rain67的博客 4150

TCP笔记之阅读《TCP/IP协议卷一》

标注: 看《TCP/IP协议卷一》记的笔记 处理差错的两种主要方法 差错校正码 数据重传 使用序列号解决分组重复的问题 停止个等待协议的吞吐量性能低,因此允许多个分组被注入网络(滑动窗口) 滑动窗口 发送方 记录哪些分组可被释放,哪些分组正在等待ACK,哪些分组不能被发送 接收方 哪些分组已经被接受和确认,哪些分组是下一步期望的,哪些分组即使被接收也会因为内存限制而被丢弃。 流量控制 为了处理当接收方相对发送方太慢而产生的问题 基于速率流量控制 给发送方指定某个速率 基于窗口流量

wang_da_ye的博客 386

TCP/IP卷一:80---TCP数据流与窗口管理之(延时确认(延迟ACK)、Nagle算法)

一、延迟确认(延迟ACK) 在许多情况下,TCP并不对每个到来的数据包都返回ACK,利用TCP的累积ACK字段(参见TCP报文格式https://blog.csdn.net/qq_41453285/article/details/104016416)就能实现该功能 累积确认可以允许TCP延迟一段时间发送ACK,以便将ACK和相同方向上需要传的数据结合发送。这种捎带传输的方法经常用于批量数据传输...

董哥的黑板报 4462

【JavaEE初阶】万字详解TCP/IP协议!!!(一)

TCP, 即, TCP协议相比于UDP协议要更复杂, TCP的特点是有连接, 可靠传输, 面向字节流, 全双工.端口号:与UDP相像。此处不详细介绍。32位序号,32位确认序号:后文详解。数据偏移和选项(option), 选项可有可无也可以有多个, 用于对TCP一些功能的扩展和TCP中的一些属性进行解释说明, 可能包括 “窗口扩大因子”, “时间戳” 等选项, 数据偏移表示TCP数据起始处与TCP报文起始处之间的距离, 也就是4个比特位(0到15)表示TCP首部报头的长度, 单位是4字节。

xxxflower的博客 1304
上一篇: c++11 unordered_map使用
下一篇: JS:十六进制字符串转为base64
Heron & Sense
博客等级 码龄9年 4粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值