不过在 SYN 握手阶段,网络连接还没有建立起来,如果此时发生丢包,那么因为系统没有可以参照的 RTT(Round-Trip Time),所以此时只能给出系统缺省设置的 RTO: #define TCP_RTO_MAX...); mod_timer(&req->rsk_timer, jiffies + timeo); return; 可见 RTO 的最大值是 120 秒,最小值是 200 毫秒,在连接建立前的初始值是 1...秒,如果经过多次重传,每次 RTO 的值翻倍,但最大不得超过 120 秒: 第 1 次重传:超时时间是 2 的 0 次方,也就是 1 秒。...还有一点需要说明的是,在建立连接后,因为目前网络都很快,所以大部分连接的 RTO 都会接近 TCP_RTO_MIN,也就是 200ms,可以通过「ss -int」命令来确认。...关于超时重传还有很多细节需要考虑,下面列出一些资料: TCP/IP重传超时–RTO RTO对tcp超时的影响 linux下超时重传时间(RTO)的实现探究 RTO的计算方法(基于RFC6298和Linux
在衡量系统高可用的时候,我们经常能看到几个专业词汇,例如RPO和RTO,像OceanBase号称可以做到RPO=0,RTO<30s,RPO和RTO代表了什么?...RTO,Recovery Time Objective,他是指灾难发生后,从IT系统当机导致业务停顿之时开始,到IT系统恢复至可以支持各部门运作、恢复运营之时,此两点之间的时间段称为RTO。...可以看出来,RTO和RPO服务于不同的目标,RTO涉及应用程序和系统,但主要描述应用程序停机时间的限制。RPO主要与失败事件后丢失的数据量有关。...因为这种模式将主节点和从节点以及主从节点之间的网络环境紧紧地绑在了一起,主节点的稳定性将不再由他自己决定,而要同时看从节点和网络环境的脸色。...因此,分布式多副本数据一致性技术一定程度上可以提供客户所需要的RPO和RTO,尤其在互联网,企业级的实现,已经相对成熟,这算是技术进步给业务带来更高可用性的一个佐证。
(2)传播时延 传播时延是电磁波在信道中传播一定距离所需要花费的时间,传播时延和信道的传输速率无关, 而是取决于传输媒介的长度,以及某种物理形式的信号在传输媒介中的传播速度。...此外,在有优先级算法的网络中,排队时延还取决于数据的优先级和结点的队列调度算法。...(4)处理时延 处理时延是分组在中间结点的存储转发过程中而进行的一些必要的处理所花费的时间,这些处理包括提取分组的首部,进行差错校验,为分组寻址和选路等。...RTO(Retransmission TimeOut) 为了防止数据报丢失,当TCP发送一个报文时,就启动重传计时器,有2种情况: 1.若在计时器超时之前收到了特定报文的确认,则撤消这个计时器
如果你的业务能够忍受30分钟之内启动起来,那么RTO就等于30分钟。 再比如,你的数据库当机了,30分钟后恢复了。如果你的业务能够忍受丢失最后2分钟的数据,那么你的RPO就是2分钟。...值得注意的是,任何宣称RTO=0和RPO=0的厂商,都是在吹牛皮。 单机服务 对于单机服务来说,从故障到恢复正常服务,它的间隔时间不可能是0。...所以RTO不会等于0。 但RPO倒是可以做到逼近0损失的。因为目前的数据库服务,大多数都会写一份预写日志来防止异常发生。...故障处理的间隔时间就是RTO的值。 在这种情况下,同样有丢失数据的风险。5个节点,根据NWR策略,需要写入3个才算成功。...所以智能的服务还要有能够识别出机房和zone的能力,以便在发生问题时,B机房起码有一份数据时刻是最新的。
,邀请数十位鹅厂资深数据库专家每周二和周四晚上在线深入解读TDSQL、CynosDB/CDB、TBase三款鹅厂自研数据库的核心架构、技术实现原理和最佳实践等。...因为在实际生产实践中,会有各种各样的资源条件限制,比如同城有一个机房和有两个机房的容灾效果就完全不一样。...作为异地灾备机房,一般是和主节点相隔500公里以上,延迟在10ms以上的机房。...正是由于灾备节点和主节点的这种异步弱关系,才允许我们的灾备实例在备城是一个独立部署的单元。...A:备机拉取binlog和回放binlog是两组不同的线程,分别叫IO线程和SQL线程,并且两组线程互不干扰。IO线程只负责到master上下载binlog,SQL线程只回放拉取到本地的binlog。
突破封锁,我国在太赫兹领域实现重大突破 就在上周,中电科旗下的网络通信研究院,发布了一个重大的消息:经过两年刻苦攻关,在国内首批实现了太赫兹RTO辐射源1THz频率突破。...太赫兹振荡器(RTO),是一种新型、可在室温下工作、超小型的太赫兹波源,也是目前频率最高的固态电子学太赫兹波源。...据报道,国际上RTO的最高震荡频率可以做到1.98THz,网络通信研究院的这一成果大大地缩小了我们和世界领先水平地差距。 ?...RTO加载透镜实物 太赫兹,被认为是未来改变世界的十大技术之一,欧美各国都在太赫兹领域,做出重要的战略部署。它的应用前景非常广泛,比如在无损成像,通讯等领域,都会带来革命性的变化。 2....地沟油用肉眼,和其它方法很难分辨,但狐狸的尾巴,总是要露出来的。
network-duplicate.yaml networkchaos.chaos-mesh.org "network-duplicate" deleted [root@s5 ChaosMesh]# 重传原理逻辑说明和RTO...如果未收到ACK,发送方认为报文丢失并重传,同时RTO加倍;如果2倍RTO之后还没收到ACK,则再次重传。...但也不排除有些人想看明白RTO的计算逻辑。那就接着看。 也许你会问RTO是多长时间?...*HZ)) #define TCP_RTO_MIN ((unsigned)(HZ/5)) 看到这里,知道RTO有最大最小值,分别是 HZ/5 和 120*HZ 。...inet_csk(sk)->icsk_rto = TCP_RTO_MAX; } 以上就是RTO的计算逻辑。
(注意22:32分和22:34分报错的是不同的socket连接) Connection timed out(Read failed) 这个错误很少遇到。不知道是在哪种情况下触发。...于是用sublime搜索Connection timed out,发现其只在Java_java_net_PlainSocketImpl_socketConnect出现,和上面的异常栈明显不符合。...(Read failed)中的(Read failed)不应该拼接在后面,因为其逻辑是kernel返回error就用kernel的error,否则用defaultDetail即(Read failed和errno...具体原因,笔者并没有在openJdk源码中找到,猜测可能是版本的原因或者oracleJdk和openJdk之间细微的差别。...的情况下计算一个最终超时时间,实际重传次数和15并没有直接的关系。
(注意22:32分和22:34分报错的是不同的socket连接) Connection timed out(Read failed) 这个错误很少遇到。不知道是在哪种情况下触发。...于是用sublime搜索Connection timed out,发现其只在Java_java_net_PlainSocketImpl_socketConnect出现,和上面的异常栈明显不符合。...具体原因,笔者并没有在openJdk源码中找到,猜测可能是版本的原因或者oracleJdk和openJdk之间细微的差别。...的情况下计算一个最终超时时间,实际重传次数和15并没有直接的关系。...,我们同事在复现现场的时候,发现第一次重传包确实是200ms左右,和笔者的推理并不一样。
= icsk_rto * 2,由于syn阶段,所以isck_rto不会由于网络传输而改变 // 重传的时候会以1,2,4,8指数递增 icsk->icsk_rto = min(icsk->icsk_rto...kernel代码版本细微变化 值得注意的是,linux本身官方发布的2.6.32源码对于tcp_syn_retries2的解释和RFC并不一致(至少笔者阅读的代码如此,这个细微的变化困扰了笔者好久,笔者下载了和机器对应的内核版本后才发现代码改了...另一个是真的通过重传超过tcp_retries2次数来time_out,两者的区别和rto的动态计算有关。但是可以大致认为是一致的。...对端物理机宕机后没有数据发送,也没有read等待 和上面同理,也是在keepalive定时器超时之后,将连接close。...定时器超时事件发生的时间如上面几小节所述,和是否nonblock无关。nonblock的编程模式可以让应用层对这些事件做出响应。
与之类似但更为主流的两个指标则是:RTO, Recovery time objective 和 RPO, Recovery point objective。...制定RTO目标,是指导我们在日常运维中,无论遇到什么样的故障,所有的运维工作和应急措施都以在小于RTO的时间内恢复业务为目标。...运维 系统或产品上线后,通过监控系统定期进行性能分析,验证设定的RTO和RPO目标是否合适并不断改进。...随着云计算技术和云原生应用开发越来越普及,在系统设计时充分考虑 Design for failure 变的越来越重要,需要我们根据RTO和RPO目标选择合适的技术手段应用在我们的项目上,下面列出了一些常用的技术手段或原则...这种模式能够提供最好的RTO和RPO指标,同时实现起来代价也是最高的。
首先T C P必须测量在发送一个带有特别序号的字节和接收到包含该字节的确认之间的RT T。在上一章中,我们曾提到在数据报文段和 A C K之间通常并没有一一对应的关系。...在往返时间变化起伏很大时,基于均值和方差来计算 RTO,将比作为均值的常数倍数来计算 RTO能提供更好的响应。...在[Jacobson 1988]中的图5和图6中显示了根据RFC 793计算的某些实际往返时间的 RTO和下面考虑了往返时间的方差所计算的 RTO的比较结果。...A和D均被用于计算下一个重传时间( RTO)。增量g起平均作用,取为1 / 8(0 . 1 2 5)。偏差的增益是h,取值为0 . 2 5。当RT T变化时,较大的偏差增益将使 RTO快速上升。...而且 J a c o b s o n计算RTO的公式依赖于被平滑的 RT T和被平滑的均值偏差,而最初的方法则使用了被平滑的 RT T的一个倍数。
IP协议的checksum只校验头部,TCP片段头部的checksum会校验包括IP头部、TCP头部和TCP数据在内的整个序列,确保IP地址、端口号和其他相关信息正确。...下面我们要介绍两种重新发送TCP片段的机制:超时重新发送和快速重新发送。 超时重新发送 我们之前已经简单介绍过重新发送的机制:当发送方送出一个TCP片段后,将开始计时,等待该TCP片段的ACK回复。...网络状况越好,RTO应该越短;网络状况越差,RTO应该越长。 RTT: 往返时间 TCP协议通过统计RTT,来决定合理的RTO。...建立连接之后,每次的srtt作为采样样本,计算平均值(mean)和标准差(standard deviation),并让RTO等于srtt平均值加上四倍的srtt标准差。...已接收的文本流和乱序片段之间将出现空洞(hole),也就是等待接收的空位。比如已经接收了正常片段5,6,7,此时又接收乱序片段9。这时片段8依然空缺,片段8的位置就是一个空洞。
kernel代码版本细微变化 值得注意的是,linux本身官方发布的2.6.32源码对于tcp_syn_retries2的解释和RFC并不一致(至少笔者阅读的代码如此,这个细微的变化困扰了笔者好久,笔者下载了和机器对应的内核版本后才发现代码改了...另一个是真的通过重传超过tcp_retries2次数来time_out,两者的区别和rto的动态计算有关。但是可以大致认为是一致的。 上述逻辑如下图所示: ?...,同时也没有设置过SO_SNDTIMEOUT,其直接调用了系统调用,所以其超时时间和write系统调用保持一致。...对端物理机宕机后没有数据发送,也没有read等待 和上面同理,也是在keepalive定时器超时之后,将连接close。...定时器超时事件发生的时间如上面几小节所述,和是否nonblock无关。nonblock的编程模式可以让应用层对这些事件做出响应。
我们考虑一下下面这些问题: 1)RTO的时间是怎么来的? 2)每发一个包,都会启动一个定时器吗?那会不会导致定时器特别多,对系统性能有影响? 3)每个丢包都需要RTO超时之后,才能重传吗?...下面我们就来深入的讨论TCP重传机制的细节和原理,解决上面提到的问题。...2,RTO计算方法 RTO:英文全称是Retransmission TimeOut,即重传超时时间; RTO是一个动态值,会根据网络的改变而改变。...根据RTT计算RTO的方法: RTO = srtt >> 3 + rttvar RTO计算时,使用了一次指数平滑算法。...答应是:一个连接只有一个超时定时器,那么对于每个数据包,没办法做到超时时间严格等于RTO;但是可以保证超时时间不大于2*RTO。其实这就是性能和准确性的权衡考虑。
图2 1 - 4表示了测量的RT T(取自t c p d u m p的输出)和 T C P为超时所使用的 RTO(取自插口排错的输出)。...正如前面提到的,以后使用4D和A相加来计算RTO)。 这就是传输初始S Y N所使用的RTO。结果是这个初始S Y N丢失了,然后超时并引起了重传。...当超时在5 . 8 0 2秒后发生时,计算当前的RTO值为 RTO = A + 4D = 0 + 4×3 = 12 s 因此,应用于 RTO的指数退避取为 1 2。...在前面,A和D初始化为0,RTO的初始计算值为3。这是使用第1个RT T的测量结果M对估计器进行首次计算的初始值。...计算的 RTO值为 RTO = A + 4D = 2 + 4×1 = 6 s 当第2个数据报文段的A C K(图2 1 - 2中的报文段5)到达时,经历了1个时钟滴答(0 . 5秒),估计器按如下更新:
icsk->icsk_pending = icsk->icsk_ack.pending = 0; 13} inet_csk_init_xmit_timers代码很简单,就是初始化各个timer,分别是“重传和零窗口探测定时器...”、“延迟确认定时器”和“Keep-Alive定时器”。...14 icsk_pending表示重传定时器要做的事情:目前是重传和0窗口探测。如果为0,则表示没有要做的事情。...= min(__tcp_set_rto(tp), TCP_RTO_MAX); 92 } else { 93 /* 正常指数后退超时 */ 94 icsk->icsk_rto...(sk, ICSK_TIME_RETRANS, icsk->icsk_rto, TCP_RTO_MAX); 98 /* 连重传都超时了,则重置套接字的下一跳。
同样的: RFC 2988:建议使用下面的公式计算RTO: RTTd是RTT的偏差的加权平均值,与RTTs和新的RTT样本之差有关。RFC 2988建议这样计算RTTd。...由于重传的报文段和原来的报文段完全一样,所以源主机在接受到确认后,无法做出正确的判断,而正确的判断对确定加权平均RTTs的值关系很大。...1,若收到的是对重传报文段的确认,但却被源主机当作是对原来报文段的确认,则计算出的RTTs和超时重传时间RTO就会偏大。...直接影响效率 2,若收到的是对原来的报文段的确认,但被当作是对重传报文段的确认,则由此计算出的RTTs和RTO都会偏小,这样就会导致过多的重传,使的RTO越来越小 根据以上所说:Karn提出了一个算法:...这样得出的加权平均RTTs和RTO就相对比较准确了。 但是,但是,要是出现这样的情况呢??:报文段的时延突然增大了很多。因此在原来得出的重传时间内,不会收到确认报文段。于是就重传报文段。
当服务端的主机发生了宕机,是没办法和客户端进行四次挥手的,所以在服务端主机发生宕机的那一时刻,客户端是没办法立刻感知到服务端主机宕机了,只能在后续的数据交互中来感知服务端的连接已经不存在了。...在发生超时重传的过程中,每一轮的超时时间(RTO)都是倍数增长的,比如如果第一轮 RTO 是 200 毫秒,那么第二轮 RTO 是 400 毫秒,第三轮 RTO 是 800 毫秒,以此类推。...而 RTO 是基于 RTT(一个包的往返时间) 来计算的,如果 RTT 较大,那么计算出来的 RTO 就越大,那么经过几轮重传后,很快就达到了上面的 timeout 值了。...最小 RTO 和最大 RTO 是在 Linux 内核中定义好了: #define TCP_RTO_MAX ((unsigned)(120*HZ)) #define TCP_RTO_MIN ((unsigned...)(HZ/5)) Linux 2.6+ 使用 1000 毫秒的 HZ,因此TCP_RTO_MIN约为 200 毫秒,TCP_RTO_MAX约为 120 秒。
领取专属 10元无门槛券
手把手带您无忧上云