Switch-Router

Recent Posts

  • 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 模式.四种传输模式的时延...

  • 2022-07-07

    理解内核源端口选择--UDP

    保存端口的数据结构UDP 使用udp_table保存 udp socket 信息.udp_table 包含两张表: hash 和 hash2, 前者仅根据 local port 进行哈希, 后者根据 local port, local address 进行哈希.关于hash2 的来历, 之前在UDP bind文中有描述, 本文只需要关注hash1即可.hash1的哈希函数udp_hashfn 是一个简单的取模函数:static inline u32 udp_hashfn(const str...