网站开发现在用什么,如何制作ppt课件,做网站有什么软件吗,大连开发区邮编文章目录 TCP重传机制详解——04FACK什么是FACKFACK的发展为什么要引入FACK实战抓包讲解开启FACK场景#xff0c;且达到dup ACK门限值开启FACK场景#xff0c;未达到dup ACK门限值 为什么要淘汰FACK总结REF TCP重传机制详解——04FACK
什么是FACK
FACK的全称是forward ackn… 文章目录 TCP重传机制详解——04FACK什么是FACKFACK的发展为什么要引入FACK实战抓包讲解开启FACK场景且达到dup ACK门限值开启FACK场景未达到dup ACK门限值 为什么要淘汰FACK总结REF TCP重传机制详解——04FACK
什么是FACK
FACK的全称是forward acknowledgementFACK通过记录SACK块中系列号最大(forward-most)的SACK块来推测丢包信息。 举例说明 Server:
P1(0-9)、P2(10-19)、P3(20-29)、P4(30-39)、P5(40-49)
Client:
正常收到了P1包并回复了ACK确认包P2、P3、P4则由于网络拥塞等原因丢失;在收到P5时候回复一个Ack10的确认包并携带P5有SACK块信息(40-50)
这样server在收到P1的确认包和P5的dup ACK时候就可以根据dup ACK中的SACK信息得知client端收到了P1报文和P5报文计算出P1和P5两个数据包中间间隔了3个数据包达到了dup ACK门限(默认为3)进而推测出P2报文丢失。
发送端根据发送数据的缓存区和SACK块信息完全可以计算出丢失的数据包个数(即使这些数据包不是满MSS大小)SO,当使能FACK的时候实际上我们可以通过ACK 一个SACK块信息来推测丢包情况进而触发快速重传。
FACK的发展
/proc/sys/net/ipv4开启 TCP FACK(Forward Acknowledgement) 支持。选项废弃了新版内核不再生效。
FACK 是拥塞控制中快速恢复Fast Recovery阶段相关的机制它主要解决有多个报文丢失的情况下通过准确估计当前连接还在网络中传输的报文大小在恢复阶段做出精确的拥塞控制。计算的方式如下
记录 SACK 的最大序号数为 snd.fack 定义 awnd 代表正在网络中传输的数据awnd snd.nxt - snd.fack这里假设了不存在乱序报文 在重传时awnd 要加上重传的数据awnd snd.nxt - snd.fack retran_data 于是在拥塞时cwnd 会根据算法改变此时为了充分利用带宽可以使用如下方法控制包的发送
while (awnd cwnd) sendsomething() 该方法比起 Reno 通过接收到的 dupack 数量来调整 cwnd 值更为精确。对于快速恢复的触发也有变化
正常 Reno 算法会在 dupacks 3 时触发快速恢复如果丢失多个包则 ACK 数量也随之减少导致等待重传的时间变长而 FACK 额外增加了一个触发条件(snd.fack – snd.una) (3*MSS)即假设没有乱序包的情况下如果该条件成立则说明网络中丢失了 3 个包等价于 dupacks 3可以触发重传和快速恢复。
注在 Linux 4.15[16] 中移除了 FACK 的支持使用 RACK 机制替代。
为什么要引入FACK
因为当开始有SACK块信息的支持下你可以准确的知道丢失包的范围信息。正是因为有了这些信息不必再等待原有的dup ACK重复三次而是应该计算这个范围丢包个数与阈值的关系从而决定是否快速重传。即发送端完全可以通过SACKack number来决定快速重传不需要等待dup ACK三次
实战抓包讲解
开启FACK场景且达到dup ACK门限值 开启FACK场景未达到dup ACK门限值 为什么要淘汰FACK
过于激进的重传FACK依赖于接收端发送的SACK信息来判断丢包有时候网络中的乱序可能被错误地解读为丢包从而导致不必要的重传。特别是在网络拥塞时频繁的重传可能会加剧拥塞降低网络性能。复杂度较高FACK的实现和维护需要较为复杂的逻辑包括跟踪和处理SACK信息以及根据这些信息来决定何时重传。这种复杂性可能会影响内核的执行效率也可能引入额外的实现风险。难以适应极端网络状况在某些网络环境下如严重的网络延迟或大规模乱序FACK可能不如后来提出的更为先进和适应性强的算法如RACKReceiver-based ACKnowledgment等。RACK通过接收端的延迟信息来推测丢包对网络状况变化的适应性更强。对SACK的支持要求并非所有TCP实现或网络设备都支持SACK选项这意味着FACK的功能在这些环境下无法完全发挥限制了其普适性。并发丢包处理FACK在处理并发丢包时可能不如其他算法有效例如在连续丢包且数量较多时FACK可能无法一次性准确判断所有丢失的数据段。
总结
FACK的触发快速重传的原理就是计算ACK和SACK块信息之间的丢失数据包个数是否达到3个FACK乱序场景下的判断是失准的可能导致过多的重传。FACK已被淘汰更优选为RACK
REF
FACK在Linux的落幕 TCP FACK与RACK