我遇到过的一些网络问题

为什么我的 TCP 挥手只有 3 次

因为 fin 和 ack 一起返回了,所以 tcpdump 抓包显示三次

ESTABLISHED 的连接只在一端有,另一端却没有

应用端可以把 tcp 连接一端的 keepalive 关闭,就是 tcp 的探活机制,连接的这一端可能就会一直有 ESTABLISHED 的连接

CLOSE_WAIT 状态连接过多怎么办

该状态对端已经发出 fin 本地已经发出 ack,但是本端没有发出 fin,这种情况就是 tcp 的半关闭状态,这种情况下本端可能还会发送数据包,如果应用测确定没有问题可以设置 so_linger,就是 CLOSE_WAIT 持续多久之后就可以关闭了

一些其他的网络知识

delayed ack 与 nagle's 算法还有 tcp 连接的七个定时器

参考资料

nagle’s 算法(https://en.wikipedia.org/wiki/Nagle's_algorithm
云网络丢包故障定位,看这一篇就够了(https://mp.weixin.qq.com/s/-Q1AkxUr9xzGKwUMV-FQhQ
那些你不知道的 TCP 冷门知识!(https://mp.weixin.qq.com/s/6lop61UtnQ-vfWJy17V87w
我之前写的一个分享 ( https://github.com/WisWang/blog/blob/main/2023/技术分享.pdf )