Recent Posts
-
2023-04-02
理解 sack reordering distance
在不使能 SACK 时, 发送端在收到默认 3 个 DupAcks , 就会立即触发快速重传和快速恢复.这一点使用下面的 packetdrill 很轻松验证:// author. @switch-router.gitee.io+0 socket(..., SOCK_STREAM, IPPROTO_TCP) = 3+0 setsockopt(3, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0+0 bind(3, ..., ...) = 0+0 listen(3...
-
2023-03-15
TCP 窗口最大值为什么是1GiB
这个看上去理所当然的问题可能并没有那么简单… 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ...
-
2022-12-16
SACK与内核TCP重传队列
内核 TCP 重传队列并不是保存重传过的报文的队列,而是保存着尚未被对端确认的 sk_buff (也就是可能会被重传的报文),该队列以红黑树的形式存放在struct sock 结构中struct sock { ... union { struct sk_buff *sk_send_head; struct rb_root tcp_rtx_queue; // 红黑树的根 }; ...}队列中(树上)的sk_buff按seq序号排列, 比如此刻假设 SND_UNA 为 1...
-
2022-09-07
小谈Nagle
TCP 有大量的参数、开关可以被用户调整. 这一点从 /proc/sys/net/ipv4/tcp_* 以及各类 TCP socket 选项可见一斑.它让使用者可以千方百计地进行调优, 相比而言, UDP就没什么东西可折腾.这种灵活性要求使用者必须要明白 TCP 各个参数的作用, 以及网络应用本身的特点, 才能让 TCP 性能达到最佳.换言之, 没有一个放之四海皆准的 TCP 配置, 对每个网络都适合,要想达到最佳,使用者都必须 case by case 进行调整.以 Nagle 算法为例...
-
2022-07-14
busypoll 模式能让 SMC-R 更快吗
在(SMC-R 加速 TCP)[https://switch-router.gitee.io/blog/rdma-smcr-acc/] 中我们提到了SMC-R能让使用普通 posix API 的网络应用在不加任何修改的情况下,也能享受 RDMA 带来的传输体验提升.但通过与使用 verbs API 的程序实测比较以及分析, 我发现 SMC-R 并不能达到 verbs API 能达到的传输极限.一个原因是: 当前 SMC-R 的实现无法支持 busy polling 模式.四种传输模式的时延...