Recent Posts
-
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...
-
2022-05-03
让TCP容忍丢包
声明: 本文所描述的方案未经验证, 只是单纯的个人想法而已 :)网络上看到一个问题: 如何提升高丢包率环境的 TCP 传输性能第一反应是, 既然已经高丢包环境了, 就不要再奢求太多, 毕竟 TCP 所有的”降速”, “重传”等手段都是为了报文能”完整”抵达终点.除非, TCP 愿意付出一些代价, 比如放宽一些条件: 比如忍受部分报文能被丢弃…在完美主义者眼中, 可能已经指着鼻子骂了: 允许丢弃, 这还是 TCP 吗 ?!这确实违背了 TCP 的”可靠传输”的原则。不过,这并不妨碍其具...
-
2022-04-19
一个 qdisc 引起报文阻塞问题
问题现象使用 (fortio)[https://github.com/fortio/fortio] 进行时延测试,有概率出现 target999 的时延超出正常范围。 测试设置并发数 c=8, qps=16, 即一共使用8条连接, 每条连接的qps=2 (每500ms发送一次http请求)ip netns exec busybox-n213 taskset -c "12-23" fortio load -c 8 -qps 16 ............> 0.00055 <=...
-
2022-04-11
VPP: 跨进程 resueport
本系列文章仅为学习使用 VPP 过程中的一些自用笔记VPP 的 reuseport 的机制和内核有较大区别, 主要表现为 始终使能同一个进程不同线程之间的resueort, 不支持不同进程的reuseport内核 reuseport 机制内核的 reuseport 机制经过多次(演进)[https://switch-router.gitee.io/blog/reuseport], 最终以 reuseport group 为基础实现:内核将监听同一个地址端口(打开reuseport)的套...