Techyou labs
文章RSS
评论RSS
登录
真正的爱应该超越生命的长度,心灵的宽度,灵魂的深度
搜索
关于作者
文章分类
Default
Linux/Unix
Database
Cloud
Networking
Security
Programming
最新文章
openvpn自签名证书
带你重走 TiDB TPS 提升 1000 倍的性能优化之旅
Unicode 中的 BIDI 双向性算法[转]
在linux中设置优先使用ipv4,而不是ipv6
linux下WPS高分辨率下因字体缩放导致字体发虚的问题
ssh-rsa not in pubkeyacceptedalgorithms问题解答及处理办法 Permission denied (publickey)
在 Ubuntu 22.04 中使用 PipeWire 替换 PulseAudio
MYSQL简单监控指标
deepin-wine6-stable下TIM悄悄崩溃问题
openwrt 设置ipv6地址分配
最新评论
renothing: 备注:路由器端优先设置ipv4并不影响客户端的ip...
renothing: 二次反向代理跟你应用程序得处理时间有关系吧?尤其是...
二次反向代理性能很差,怎么优化的?: 我也用nginx 做了个二次反向代理,但是并发连3...
hostyep: 交换链接么?目前每天保持30个左右对口IP,每月都...
yzhkpli: error while loading share...
美肤宝: 感谢分享。。。
lq: 嗯 喜欢弄得点单点
按月归档
August 2023
March 2023
December 2022
November 2022
September 2022
August 2022
March 2022
January 2022
November 2021
October 2021
September 2021
August 2021
July 2021
June 2021
February 2021
September 2020
May 2020
September 2019
August 2019
July 2019
June 2019
May 2019
January 2019
December 2018
November 2018
October 2018
September 2018
August 2018
July 2018
June 2018
April 2018
March 2018
December 2017
October 2017
September 2017
August 2017
April 2017
March 2017
February 2017
August 2016
July 2015
November 2014
September 2014
August 2014
July 2014
June 2014
July 2013
April 2013
September 2012
July 2012
May 2012
April 2012
February 2012
January 2012
December 2011
November 2011
October 2011
September 2011
August 2011
December 2010
November 2010
October 2010
September 2010
August 2010
July 2010
June 2010
May 2010
April 2010
March 2010
February 2010
January 2010
December 2009
November 2009
October 2009
September 2009
August 2009
June 2009
May 2009
April 2009
March 2009
February 2009
December 2008
November 2008
September 2008
August 2008
July 2008
June 2008
常用标签
Mysql
nginx
mysql优化
linux
debian
Powered by
Typecho)))
Optimized by
EAimTY
您正在查看:2014年9月
linux网络的tcp超时和重传机制
September 4, 2014
首选我们需要明确两个TCP概念,一个是rtt,一个是rto. 首先RTT是什么,RTT简单来说,就是我发送一个数据包,然后对端回一个ack,那么当我接到ack之后,就能计算出从我发送出包到接到过了多久,这个时间就是RTT。RTT的计算是很简单的,就是一个时间差。 TCP重传机制Timeout的设置对于重传非常重要。 设长了,重发就慢,丢了老半天才重发,没有效率,性能差 设短了,会导致可能并没有丢就重发。于是重发的就快,会增加网络拥塞,导致更多的超时,更多的超时导致更多的重发。 而RTO呢,RTO也就是tcp在发送一个数据包之后,会启动一个重传定时器,而RTO就是这个定时器的重传时间。 在通俗的讲就是,我一开始预先算个定时器时间,如果你回复了ack那正好,如果没有回复给我ack,然后RTO定时器的时间又到了,那么我就重传。 那么这个时候,就有问题了,由于RTO是指的这次发送当前数据包所预估超时时间,那么RTO就需要一个很好的算法来统计,来更好的预测这次的超时时间。 RTO不是固定写死的配置,而是经过RTT计算出来的。 ``` tcp_frto - INTEGER Enables Forward RTO-Recovery (F-RTO) defined in RFC5682. F-RTO is an enhanced recovery algorithm for TCP retransmission timeouts. It is particularly beneficial in networks where the RTT fluctuates (e.g., wireless). F-RTO is sender-side only modification. It does not require any support from the peer. By default it's enabled with a non-zero value. 0 disables F-RTO. This file can have one of the following values: 0 Disabled. 1 The basic version F-RTO algorithm is enabled. 2 Enable SACK-enhanced F-RTO if flow uses SACK. The basic version can be used also when SACK is in use though in that case scenario(s) exists where F-RTO interacts badly with the packet counting of the SACK-enabled TCP flow. ``` 其实大家大可不必深究学习RTO的计算的算法,多数情况RTT都是比较小的,当RTT 小于 RTO MIN时,linux下RTO初始值可以理解为RTO的那个最小200ms值(最小200ms,最大120s)。 当然如果超过RTO最小值,那这个时间就要斟酌了,最坏单次不会超过RTO MAX 。 那么什么时候会引起超时重传 ? 我给你发seq data数据,你应该给我回复ack确认数据已经接受. 1. 发送SYN成功对端接收失败,去程丢包。 2. 接收ack失败,返程丢包。 3. ack握手失败。 总的来说,作为发送端我只要是没有收到ack,我就会重发, 我们这里主要是讨论什么时候重试发包,另外需要发几次,每次的间隔时间。 下面是内核关于RTO定时器的最长时间,最短时间限制。 ``` #xiaorui.cc #define TCP_RTO_MAX ((unsigned)(120*HZ)) // 120秒 #define TCP_RTO_MIN ((unsigned)(HZ/5)) //0.2s #define TCP_TIMEOUT_INIT ((unsigned)(1*HZ)) /* RFC2988bis initial RTO value */ #define TCP_TIMEOUT_FALLBACK ((unsigned)(3*HZ)) /* RFC 1122 initial RTO value, now * used as a fallback RTO for the * initial data transmission if no * valid RTT sample has been acquired, * most likely due to retrans in 3WHS. */ ``` # 相关 - https://unix.stackexchange.com/questions/210367/changing-the-tcp-rto-value-in-linux - https://whitequark.org/blog/2011/09/12/tweaking-linux-tcp-stack-for-lossy-wireless-networks/ - https://www.networkworld.com/article/2227856/opensource-subnet/best-networking-tweaks-for-linux.html - https://www.kernel.org/doc/Documentation/networking/ip-sysctl.txt
继续阅读