我遇到過的一些網絡問題

為什么我的 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 )