记一个诡异的TCP挥手乱序问题
本文探讨了TCP连接关闭过程中的问题,通过抓包分析和状态转移监控,确定问题出现在server对乱序的ack和fin包的处理上。经过内核源码分析,发现问题可能出现在对ack的检查上,最终通过修改内核代码验证了假设,确认了问题原因。同时,文章也解释了close()和shutdown()接口的区别,以及server在收到ack后立刻转移为TIMEWAIT状态的原因。
原文中文,约14800字,阅读约需36分钟。
本文探讨了TCP连接关闭过程中的问题,通过抓包分析和状态转移监控,确定问题出现在server对乱序的ack和fin包的处理上。经过内核源码分析,发现问题可能出现在对ack的检查上,最终通过修改内核代码验证了假设,确认了问题原因。同时,文章也解释了close()和shutdown()接口的区别,以及server在收到ack后立刻转移为TIMEWAIT状态的原因。