0%

Server 收到 SYN packet 後沒有 SYN/ACK 回應

這是最近管發生的怪現象就是公司某個單位一直跟我們說他們的 Server 要連我們的 Server結果我們這邊時好時壞… 什麼?! 我們這邊時好時壞? 從沒有聽過用戶說我們的 Server 連不上阿於是就跟他們一起 Debug開了 tcpdump 來看發現我們這邊的確有時候收到 SYN 結果就不回 SYN/ACK kernel 直接 drop 封包 XD 這是什麼鬼kernel 也太不聽話了不過我們這邊 kernel 沒有打開 iptables 也沒有什麼 drop 封包的規則於是就 Google 了一下原來有人跟我們遇到一樣的狀況 Why would a server not send a SYN/ACK packet in response to a SYN packet

簡單的來說跟我們一模一樣隨機的不回 SYN根據那篇文章說的解法有下列兩種

  • 關掉 client 的 tcp window scaling

不過這個顯然不是什麼好的方法因為我們不能限制 client 阿

  • 關掉 server 的 tcp window scaling 跟 tcp timestamps

看起來是因為 client 送的 tcp window size 不被 server 接受所以就 drop 掉可是為什麼是 SYN 就被 drop 實在是不可得知不過我們的 Server 後來加了以下設定後的確就好了

net.ipv4.tcp_tw_reuse = 0
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_window_scaling = 0
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_sack = 0

參考資料: