Varsayılan olarak, her ikisi de tcp_tw_reuse
ve tcp_tw_recycle
devre dışı bırakıldığında, çekirdek TIME_WAIT
durumdaki soketlerin bu durumda yeterince uzun süre kalmasını sağlar - gelecekteki bağlantılara ait paketlerin eski bağlantının geç paketleriyle karıştırılmayacağından emin olmak için yeterince uzun.
Etkinleştirdiğinizde tcp_tw_reuse
, TIME_WAIT
durumdaki soketler zaman aşımına uğramadan kullanılabilir ve çekirdek TCP sıra numaraları ile ilgili bir çakışma olmadığından emin olmaya çalışır. Etkinleştirdiğinizde tcp_timestamps
(diğer adıyla PAWS, Sarılmış Sıra Numaralarına Karşı Koruma için), bu çarpışmaların gerçekleşmeyeceğinden emin olacaktır. Ancak, TCP zaman damgalarının her iki uçta da etkinleştirilmesi gerekir (en azından benim anlayışım budur). Bkz tcp_twsk_unique tanımını kanlı detaylar için.
Etkinleştirdiğinizde tcp_tw_recycle
, çekirdek çok daha agresif olur ve uzak ana bilgisayarlar tarafından kullanılan zaman damgalarında varsayımlar yapar. Bağlantısı olan her uzak ana bilgisayar tarafından kullanılan son zaman damgasını izler TIME_WAIT
) ve zaman damgası doğru bir şekilde artmışsa bir soketin yeniden kullanılmasına izin verir. Ancak, ana bilgisayar tarafından kullanılan zaman damgası değişirse (yani zaman içinde geri döner), SYN
paket sessizce kesilir ve bağlantı kurulmaz ("bağlantı zaman aşımına" benzer bir hata görürsünüz). Çekirdek koduna dalmak istiyorsanız , tcp_timewait_state_process tanımı iyi bir başlangıç noktası olabilir.
Şimdi, zaman damgaları asla zamanda geri gitmemelidir; olmadıkça:
- ana bilgisayar yeniden başlatılır (ancak daha sonra geri geldiğinde,
TIME_WAIT
soketin muhtemelen süresi dolmuş olacaktır, bu yüzden bir sorun olmayacaktır);
- IP adresi başka bir şey tarafından hızlı bir şekilde yeniden kullanılır (
TIME_WAIT
bağlantılar biraz kalacaktır, ancak diğer bağlantılar muhtemelen etkilenecek TCP RST
ve bu da bir miktar alan açacaktır);
- bağlantının ortasında ağ adresi çevirisi (veya smarty-pantolon güvenlik duvarı) yer alır.
İkinci durumda, aynı IP adresinin arkasında birden fazla ana makineye sahip olabilirsiniz ve bu nedenle, farklı zaman damgaları dizileri (veya, söz konusu zaman damgaları güvenlik duvarı tarafından her bağlantıda rastgele seçilir). Bu durumda, bazı ana bilgisayarlar rasgele bağlanamaz, çünkü bunlar TIME_WAIT
sunucunun grubunun daha yeni bir zaman damgasına sahip olduğu bir bağlantı noktasına eşlenir . Bu nedenle dokümanlar size "NAT cihazları veya yük dengeleyicileri ayar nedeniyle bırakma çerçeveleri başlatabilir" diyor.
Bazı insanlar için tavsiye terk tcp_tw_recycle
yalnız ama etkinleştirmek tcp_tw_reuse
ve alttcp_timewait_len
. Ben hemfikirim :-)