今天给各位分享让互联网更"快"的原因—QUIC Loss Detection丢包探测的知识,其中也会对让互联网更"快"的原因—QUIC Loss Detection丢包探测进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文导读目录:

1、ping网络延时大怎么解决?

2、让互联网更"快"的原因—QUIC Loss Detection丢包探测

3、网络延迟高是什么原因?

  网络延时大可能的原因有:   1、DNS设置有问题,如果设置不当会造成域名解析超时,从而影响PING的响应。   2、带宽不够,当网络繁忙的时候带宽分配是否合理,这可能造成PING延时的。   3、内网ARP、TCP、UDP泛洪攻击以及非法流量也会影响到网络延时的问题。   4、接口、线路的稳定性是否良好。解决方法:通过你的现状分析,你的网络有做限速,带宽分配是合理的,还有你在PING内网延时也很大的时候那就可能和DNS设置没有关系了,内网不需要做DNS解析,如果开始网络使用良好,现在出现这个问题最大的可能是存在有内网问题,存在ARP欺骗、TCP、UDP泛洪攻击以及非法流量导致网络不稳定。ARP的攻击原理我想大家都明白了,不用做太多的解析,那防范措施也有很多,最早的双绑,到交换端口绑定,PPPOE,但是用过之后问题依然存在,现在的ARP变成多达七种现在最根本的解决方法就是能够控制到每终端的网卡上,还有对网关的数据转发,使用NAT回传机制,不通过CAM表进行转发,这样就保证了终端发送的数据都是合法的,网关通过特殊NAT技术,从而具备先天免疫ARP(对最新的ARP广播不接收只根据NAT表进行转发数据)。这种免疫网络方案的布署使的网络更加稳.   ARP欺骗分为二种,一种是对路由器ARP表的欺骗;另一种是对内网PC的网关欺骗。   第一种ARP欺骗的原理是——截获网关数据。它通知路由器一系列错误的内网MAC地址,并按照一定的频率不断进行,使真实的地址信息无法通过更新保存在路由器中,结果路由器的所有数据只能发送给错误的MAC地址,造成正常PC无法收到信息。   第二种ARP欺骗的原理是——伪造网关。它的原理是建立假网关,让被它欺骗的PC向假网关发数据,而不是通过正常的路由器途径上网。在PC看来,就是上不了网了,“网络掉线了”。   常用的解决办法就是一、在宽带路由器中把所有PC的IP-MAC输入到一个静态表中,这叫路由器IP-MAC绑定。二、在内网所有PC上设置网关的静态ARP信息,这叫PC机IP-MAC绑定。三是前两种办法的组合,称其为IP-MAC双向绑定。   方法是有效的,但工作很繁琐,管理很麻烦。每台PC绑定本来就费力,在路由器中添加、维护、管理那么长长的一串列表,更是苦不堪言。一旦将来扩容调整,或更换网卡,又很容易由于疏忽造成混乱。况且ARP出现了新变种,二代ARP攻击已经具有自动传播能力,已有的宏文件绑定方式已经被破,主要表现在病毒通过网络访问或是主机间的访问互相传播。由于病毒已经感染到电脑主机,可以轻而易举的清除掉客户机电脑上的ARP静态绑定,伴随着绑定的取消,错误的网关IP和MAC的对应并可以顺利的写到客户机电脑,错误的网关IP和MAC的对应并可以顺利的写到客户机电脑,ARP的攻击又畅通无阻了。   我也曾受过arp的毒害,辛辛苦苦做的双向绑定遇到二代arp攻击变的是无所遁形,我觉得要想真正的杜绝arp攻击还是要我们内网每台电脑都联动起来,共同防范,共同抑制,光装防arp攻击的防火墙是远远不够的,这只能保证你可能不被攻击,但不能杜绝你不发arp攻击,这样是治标不治本的,因此要想真正杜绝arp最治本的方法还是从源头抑制,即从每个终端上抑制arp攻击的发出,因此要想完全的杜绝arp攻击要靠软硬件的结合,单靠硬件是无法实现的。   经朋友推荐我现在用的是一种叫免疫墙的路由器,效果不错,我在网上查了他的原理,和大家分享一下,   第一、是对网络病毒的防御。只有有效地防止病毒的发作,才能使网络处于健康的状态,保证网络的安全稳定。   对于影响网络最大的因素,网络协议型病毒通过平常的上网操作,以木马、黑客攻击等方式,非常隐蔽并迅速地对网络发起攻击。通常的查杀病毒、过滤病毒的传统手段,已经对其无能为力。等待病毒进入并发作,之后在再寻找相应的手段进行查杀,已经完全滞后于灾难的发生。同时,很多时候病毒并不驻留在内网系统中,发作过后很可能无迹可寻。再者,黑客攻击也不是以病毒的方式进行,杀毒更无从谈起。所以,应付网络灾难最重要的不是事后的查杀,而是加强免疫、主动防御。换句话说,即使系统中感染了病毒,免疫墙应力保病毒和攻击无法发作。就像人体一样,接触了肝炎、肠道、呼吸道等病毒,由于自身免疫的作用,并不一定会染病。因此,免疫墙不同于杀毒软件、防毒墙,它的作用是提高网络免疫力,在接触到病毒和攻击时,制止他们的发作。   第二、是对上网行为的管理。安全和管理密不可分,无序的上网行为不能保证网络的稳定、高速、通畅。对网络的危害也是很严重的,不亚于病毒发作的破坏效果。   内网是共享上网的,接入带宽和网内流量都有一定的限制。如果某台终端以大数据量的传输就会造成对带宽的滥用,影响网络内其它终端的上网操作,严重时,整个网络完全陷于停滞瘫痪状态。常见的BT、迅雷下载、pplive直播等网上流行手段,就极易起到恶劣的作用。另外,不健康的访问也会感染网络病毒,比如涉及QQ滥交、非法网站、涉黄信息等,感染病毒的几率都将大大增加。免疫墙的作用就是为网络管理者提供一个有效的手段,可以有规则地、有选择地控制这些上网行为,保证网络始终处于可控的安全状态,内网的稳定通畅也就得到了保障。形象地理解,不吸烟不喝酒,常吃蔬菜水果,是提高人体免疫力、保持健康的手段。而免疫墙通过对上网行为的管理,加强网络系统的健壮,防范于未然,起到的是同样的作用。  导语:从前文效果上来看,应用QUIC后对短视频下载和播放的各个场景普遍有30%+的加速提升。那么QUIC“快”的原因,其中关键且复杂的一项,就是其区别于TCP的丢包探测算法。本文将详细解读QUIC的Loss Detection丢包探测原理和过程,包括FR快重传、ER早期重传、RTO、TLP、F-RTO等传输特性,带你深入了解QUIC传输的底层逻辑。   前文:CDN传输加速—QUIC在短视频加速上的技术落地   名词解释:   RTT:网络延迟。   TCP/UDP:数据在网络中传输所经过的底层协议。   QUIC:新一代互联网传输协议,让互联网更"快"。   丢包:数据包由于信号、拥塞等导致丢失的现象。   丢包检测:如何感知我发出的数据包丢失了的算法。   ACK:一种协商方式,计算机双方进行确认信息。   在QUIC Loss Detection丢包探测的算法中,定时器的计算,强烈取决于RTT的准确程度。因此在介绍QUIC的丢包检测算法前,先简要介绍QUIC协议中rtt、latest_rtt、min_rtt、smoothed_rtt和rttvar等几个指标的计算方式。   RTT(Round-Trip Time),表示一个数据包从发送端发出去开始计算,到收到来自接收端的确认,中间所花的所有时间。字面意思即:包在网络中旅行一圈所花的时间。比如下图,如果一个纽约的人想向住在新加坡的朋友发送微信“hello~”,那从消息发出,到新加坡的朋友收到消息,并且计算机要告诉纽约的朋友我收到消息了(不然纽约的人一直不知道对方是否接收到消息),在整个过程中一个数据包在网络中传输需要花的时间就表示RTT。   因为网络中的所有信息、数据的传输几乎都是以这样一个个包来传输的,因此RTT也是衡量网络好坏的一个直观指标。打游戏的读者应该都知道有个“网络延时”的概念,它指的就是这个RTT。   接收端在收到满足以下两个条件的ACK帧时计算RTT样本:   1.新确认的包是最大ack包号,   2.并且至少有一个新确认的包是ack-eliciting。   RTT样本 latest_rtt 计算为自发送最大确认数据包以来经过的时间:   IETF的说明:   1. RTT样本的计算仅使用接收到的最大确认包的ACK帧,这是因为对端仅在最大确认包的ACK帧中报告主机延迟,虽然RTT样本的测量不使用报告的主机延迟,但它用于在随后的smoothed_rtt和rttvar的计算中调整RTT样本。   2. 为了避免使用相同的数据包生成多个RTT样本,如果不是新确认的最大ack数据包,则不应使用ACK帧来更新RTT估计。   3. 如果新确认的包不包含至少一个ack-eliciting帧时,不得生成RTT样本。如果接收的仅是non-ack-eliciting包时,对端不会发送ACK帧,因此随后发送的ACK帧可包括任意大的Ack延迟字段。忽略这样的ACK帧避免了后续smoothed_rtt和rttvar计算中的复杂化。   min_rtt是在connection生命周期内观察到的最小RTT。 min_rtt设置为连接中第一个计算的latest_rtt,以及min_rtt和latest_rtt中较小值。   smoothed_rtt:是指RTT样本的指数加权移动平均值。   rttvar:是指RTT样本的估计方差。   计算规则说明:   smoothed_rtt和rttvar的计算是一个比较复杂的计算方法,因为需要考虑到接收数据包的对端主动延迟这种情况存在。smoothed_rtt 的计算使用调整ack_delay后的RTT样本。对于应用数据包号空间中发送的包,限制对端对ack-eliciting包的延迟确认,不能大于在max_ack_delay传输参数中约定的值。所以当对端报告的Ack延迟大于max_ack_delay时,延迟原因就不是对端主动控制的,例如对端的调度器延迟或先前ACK帧丢失。因此,超出对端的max_ack_delay之外的任何延迟都可以被认为是路径延迟,是有效并且被计算到smoothed_rtt中。   使用对端报告的ack_delay调整smoothed_rtt时:   1. 必须忽略在初始和握手包空间中发送的数据包的ACK帧的Ack Delay字段。   2. 必须使用ACK帧的Ack Delay字段和max_ack_delay中较小的值。   3. 如果生成的RTT样本小于min_rtt,则不应调整。如果对端误报的话可能导致smoothed_rtt的低估。   计算示例:   在connection的第一个RTT计算上,smoothed_rtt设置为latest_rtt,smoothed_rtt和rttvar的计算方法如下。在连接中的第一个RTT示例:   在随后的RTT样本中,smoothed_rtt和rttvar演变如下:   我们都知道网络上发生丢包是一件必然的事情,QUIC是HTTP3的底层协议,是基于UDP的可靠传输协议,必须要保证数据包的完整、正确、可靠的传输到对端。所以如果网络发生了丢包,QUIC协议需要恢复丢失的包,例如可以通过重传,发送更新的帧 ,或放弃帧等。   QUIC主要使用ACK信息和超时定时器来检测丢包,本节将对这些算法进行描述。   如果packet满足以下所有条件,则表明丢失:   1. packet在传输中未被确认,并在收到的最大ack包之前发送。   2. 它的数据包编号小于ack包的kPacketThreshold值,或者它已经发送了很长时间。   第一个条件表明收到ack包时,后发送的数据包已经先被确认,而数量阈值和时间阈值为数据包重排序提供了一些容差。   虚假地将数据包声明为丢失会导致不必要的重传,并且可能由于拥塞控制器在检测丢失时的计算而导致性能下降。检测伪重传并增加数据包或时间中的重排序阈值,可以选择以较小的初始重排序阈值开始,以最小化恢复延迟。   基于ack的丢包检测发生在收到ACK确认包之后,代码流程如下:   QUIC-IETF:   根据TCP丢失检测的最佳实践,QUIC数据包重排序阈值(kPacketThreshold)的推荐初始值为3。   Chromium:ER   不同于TCP的收到连续3个重复的ack,才触发FR快重传。QUIC在收到每个ack包后直接将packet_number小于3(经验值)的包即判断为丢失,不需要多个包的重复ACK,比TCP更加快速的进行快重传。   一旦相同数据包号空间内的后一个数据包先被ack,如果先前发送的包过了1个时间阈值,则应该声明为丢失。为避免过早地将数据包声明为丢失,时间阈值必须至少为kGranularity。   QUIC-IETF:   1、loss_delay = kTimeThreshold * max(SRTT,latest_RTT,kGranularity)   2、如果在最大ack包之前发送的数据包尚未被声明丢失,那么应该为剩余时间设置一个定时器。使用max(SRTT,latest_RTT)可以防止以下两种情况:   3、最新的RTT样本低于SRTT,可能是由于重新排序确认遇到了较短的路径;   4、最新的RTT样本高于SRTT,可能是由于实际RTT持续增加,但平滑的SRTT还没有赶上。   推荐时间阈值系数(kTimeThreshold)为9/8,以往返时间乘数表示。   实现可以尝试绝对阈值、先前连接的阈值、自适应阈值或包括RTT方差等。较小的阈值降低了重新排序弹性,但增加了伪重传。较大的阈值会增加丢失检测延迟。   Chromium:ER   1、loss_delay = std::max(5, max_rtt + max_rtt >> reordering_shift_)   2、reordering_shift_是偏移参数,在当前Nack模式下,默认值为2。   3、确认为丢包: ack_receive_time >= it->sent_time + loss_delay   4、尚未确认丢包,则设置剩余时间定时器: LOSS = it->sent_time + max(5, kTimeThreshold * max(SRTT,latest_RTT);   TCP:ER   1、发出去的但是还没有收到ACK确认的TCP报文个数(假设为oseg)小于4   2、缓存中没有未发送数据或者发送窗口受限不能发送新数据,如果允许发送新数据的话就可以进一步触发dup ACK来达到门限了。   3、则降低 FR条件:ER_thresh = oseg – 1,目标是适配FR并转为FR来进行快重传。   NACK-based loss detection allows for a max reordering window of 1 RTT.   1、it->sent_time + rtt_stats.smoothed_rtt() < largest_newly_acked.sent_time()   2、如果unacked_packets的发送时间小于最大ack包的发送时间一整个RTT窗口,则直接声明为丢失。   如果在预期的时间段内未确认ack-eliciting数据包或握手尚未完成,网络探测超时机制(PTO)会触发发送一个或两个探测数据包。PTO能够恢复丢失的尾包或未ack的包。QUIC中使用的PTO算法实现了Tail Loss Probe(TLP)、RTO和TCP的F-RTO等算法,其中一些超时时间的参数设置基于了TCP的重传超时时间经验值。   首先介绍一下QUIC中相关的超时定时器,QUIC中的PTO算法都是根据定时器来实现相关的触发策略。   超时重传定时器类型   RTO_MODE:传统TCP类型的RTO定时器。   TLP_MODE:尾包丢失探测器,默认情况下,QUIC在RTO超时重传之前最多发送两次   HANDSHAKE_MODE:在握手完成之前重新发送握手数据包。   LOSS_MODE:当分组在丢包检测算法预期之前未被确认时,重新调用丢包检测。   定时器设置优先级   HANDSHAKE_MODE > LOSS_MODE > TLP_MODE > RTO_MODE   定时器设置   定时器设置函数 SetRetransmissionAlarm   1. WritePacket 发送数据包时。   2. PostProcessAfterAckFrame 收到ack时。   3. OnRetransmissionTimeout 定时器超时。   4. NeuterUnencryptedPackets 握手期间的交互。   5. OnHandshakeComplete 客户端收到SHLO,握手完毕。   6. OnDecryptedPacket 服务端收到前向加密包,握手完毕   QUIC TLP:   1. QUIC TLP超时计算:   2. QUIC TLP 的机制   1、Always 2 TLPs before RTO.   2、TLP默认最多发送2次 consecutive_tlp_count_ < max_tail_loss_probes_   3、TLP超时后优先发送新数据,如果没有新数据,再重传一个最老的unacked_packets_   4、QUIC 实现的TLP 跟TCP有所不同,WritePacket设置定时器时优先TLP,不一定是尾包才设置TLP   TCP TLP:   TCP TLP尾包丢失说明:   1. PTO定时器计算   2. 启用PTO timer的条件:   3. 当PTO超时后:   4. 在处理收到的ACK包时   QUIC RTO超时机制与TCP一样,超时时间计算:   QUIC F-RTO:   TCP F-RTO:   TCP F-RTO检测超时是否判定出错:loss状态收到ack后,会调用tcp_process_loss来处理。   1. step-1: 观察收到的ack,优先尝试按传统undo loss。 如果收到high_seq之前非重传的包被ack/sack,则F-RTO直接判定重传是spurious, 直接undo loss。   2. step-2: 否则收到第一个让窗口移动的确认后,并且没有全部确认high_seq, 如果有新的数据可以发,则发送新的数据。 没有新数据可以发,则关闭F-RTO,使用传统方式。   3. step-3: 收到之后的第二个ack后,如果收到sack或者dupack,则说明很可能是新数据sack/dupack, 之前的包很可能真的丢了,frto=0退出F-RTO算法,使用原来的方式   4. step-4: high_seq之前的包全部被确认了,调用tcp_try_undo_recovery进入open。 因为F-RTO可能发送了新的数据,reno方式不能分辨是重传包导致的dupack还是新数据导致的,只能>high_seq的包被确认后才进入open   Linux TCP拥塞控制中undo操作:https://blog.csdn.net/dog250/article/details/51295481丢包处理TCPQUIC快重传 (FR)收到连续三次重复的ACK数据包阈值 = kPacketThreshold(3)早期重传(ER)ER_thresh = oseg - 1 调整触发阈值。时间阈值 = kTimeThreshold * max(SRTT,latest_RTT,kGranularity)RTO发送数据时启动RTO (Always sends 2 TLPs before the first RTO)F-RTO对RTO后收到的2个ACK进行判断及undo(回退拥塞控制等)F-RTO(LargestAcked(ack_frame) < first_rto_transmission_,收到ack后调整CWND取代undo)TLP尾丢包+尾探测+FR (没有新数据发送)TLP:Always sends 2 TLPs before the first RTO,TLP不是仅用在尾包触发,每一个包都会先触发TLP再设置RTO。   1. 丢包检测快重传QuicSentPacketManager::InvokeLossDetection() 每收到一个ACK包,会进行丢失检测Loss Detection,如果需要快重传,则进入重传流程。   2. 握手包重传QuicSentPacketManager::RetransmitCryptoPackets()   3. TLP包重传QuicSentPacketManager::MaybeRetransmitOldestPacket()   4. RTO超时包重传QuicSentPacketManager::RetransmitRtoPackets()   5. 0RTT包重传 QuicSentPacketManager::RetransmitUnackedPackets()0RTT场景时,客户端发送Client HLO后就可以直接发送数据。但是如果对端 REJ拒绝了客户端的CHLO,这段时间发送的数据需要在握手成功后进行重传。   本文介绍了QUIC的Loss Detection丢包探测原理和过程。首先介绍了QUIC RTT的计算方式和公示,后针对Loss Detection丢包检测详细分析了 FR快重传、ER早期重传、RTO、TLP、F-RTO等TCP经典传输特性在QUIC协议上的实现和机制,对比TCP和QUIC,有助于从底层全面了解学习QUIC协议(作为新一代HTTP3的底层协议)。后面简单介绍了下QUIC的重传场景,重传率的指标是衡量当前网络状况的重要指标,QUIC重传主要来源于丢包检测发现的丢包,所以掌握QUIC丢包探测流程,重传就很容易理解了。   -------END-------   文章首发于公众号:【昭景成】,id:zhaojc10。   让互联网更"快"的原因—QUIC Loss Detection丢包探测   感兴趣的同学可以关注公众号,添加作者微信交流~  网络延迟高是什么原因?正常情况下,当你Ping本地的DNS,MS超过100MS的时候,说明你的网络延迟已经很高了,在大家上网时,网络延迟是比较容易遇到的情况,而造成网络延迟高的原因可能有以下几点:   网络延迟高是什么原因?   1、本机到服务器之间路由跳数过多。   2、网络带宽不够,需要处理的信息量过大,则超额的网络流量就会导致设备反应缓慢,造成网络延迟。   3、处理带宽不够,即服务器端处理能力不足,也会造成响应延时。   而云服务器延时较高,可能是骨干链路拥塞、链路节点故障、服务器负载高,系统设置问题等原因引起的。在遇到这类问题时,先排查找到问题并针对性处理解决。   如何定义网络延迟程度?   (网络延迟Ping值越低速度越快)   1~30ms:极快,几乎察觉不出有延迟,玩任何游戏速度都特别顺畅   31~50ms:良好,可以正常游戏,没有明显的延迟情况   51~100ms:普通,对抗类游戏能感觉出明显延迟,稍有停顿   100ms:差,无法正常游戏,有卡顿,丢包并掉线现象   计算方法:1秒=1000毫秒(例:30ms为0.03秒)   怎么解决网络延迟问题,取决于用户计算机被网络延迟的原因,我们可以先使用交织模式,之后Ping一下网络,如果还是有延迟,再使用XP游戏网络延迟太长解决问题。
让互联网更"快"的原因—QUIC Loss Detection丢包探测的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于让互联网更"快"的原因—QUIC Loss Detection丢包探测让互联网更"快"的原因—QUIC Loss Detection丢包探测的信息别忘了在本站进行查找喔。

未经允许不得转载! 作者:谁是谁的谁,转载或复制请以超链接形式并注明出处

原文地址:http://cqhytyy.cn/post/18502.html发布于:2026-02-22