我遇到过的一些网络问题
为什么我的 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 )