Switch-Router

Recent Posts

  • 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...

  • 2022-07-06

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

    当 TCP 客户端向外发起连接的时候, 程序通常只会设置 TCP 四元组中的 Dst IP 和 Dst Port, 而 Src IP 和 Src Port 则是由本端内核决定.其中 Src IP 由路由决定, 而 Src Port 则在 ephemeral range 中选择. 后者可以通过 sysctl 命令查询.root@switch-router: sysctl net.ipv4.ip_local_port_rangenet.ipv4.ip_local_port_range = 32...