1. 程式人生 > >TCP連線的引數設定

TCP連線的引數設定

1、tcp_tw_recycle

在對外服務的web server上,為了加快time_wait狀態的socket回收,希望開啟tcp_tw_recycle配置。但是,這樣做存在風險。

如果打開了tcp_tw_recycle,並且同時tcp_timestamp是開啟的(預設開啟),那麼本機的kernel就會檢查對端的資料包的timestamp。檢查的時機發生在:本機記錄tw_timestamp, 此後收到syn包時,就檢查timestamp是否比tw_timestamp大,若小則認為是已經tw_recycle的連線上的包,則丟棄這個syn包。

通常,業務伺服器會接在LVS(或TGW)之後,來自不同客戶端的請求,其源地址被修改成共用的閘道器地址(lvs-dr),業務伺服器會認為是來自同一個連線的包。不同客戶端的時間戳可能是跳躍的,所以伺服器記錄的tw_timestamp可能比較大,那麼小於這個時間戳的syn包就會被伺服器丟棄。

伺服器端記錄的tw_timestamp只對對應的連線(socket)有效 ??? 還是對所有socket都有效???

所以,在開啟tcp_tw_recycle時,可以關閉tcp_tw_timestamp(要關閉 /proc/sys/net/ipv4/tcp_timestamps)。

最可靠的是,在對外服務的伺服器上不要開tcp_tw_recycle。

2、tcp_timestamp

3、tcp_tw_reuse