/etc/init.d/networking restart
Ayrıntılı çalışmama izin verin. İletim Denetimi Protokolü (TCP) iki uç nokta (programlar) arasında iki yönlü, düzenli ve güvenilir bir veri iletim protokolü olacak şekilde tasarlanmıştır. Bu bağlamda, güvenilir terimi, ortasında kaybolursa paketleri yeniden ileteceği anlamına gelir. TCP, eşlerden alınan tek bir veya bir dizi paket için Onay (ACK) paketlerini geri göndererek güvenilirliği garanti eder.
Bu, sonlandırma isteği / yanıtı gibi kontrol sinyalleri için aynıdır. RFC 793 , TIME-WAIT durumunu aşağıdaki gibi tanımlar:
TIME-WAIT - uzaktaki TCP'nin bağlantı sonlandırma isteğinin onayını aldığından emin olmak için yeterli zamanın geçmesini bekler.
Aşağıdaki TCP durum şemasına bakın:
TCP, iki yönlü bir iletişim protokolüdür, bu nedenle bağlantı kurulduğunda, istemci ile sunucu arasında bir fark yoktur. Ayrıca, biri çıkışlardan birini arayabilir ve her iki eşin de kurulan bir TCP bağlantısını tamamen kapatmak için kapanmaya karar vermesi gerekir.
Çıkmayı aktif olarak daha yakın, diğeri pasif olarak daha yakın olanı arayalım. Aktif yaklaştırıcı FIN gönderdiğinde, durum FIN-WAIT-1’e gider. Daha sonra gönderilen FIN için bir ACK alır ve durum FIN-WAIT-2'ye gider. FIN'ı pasif yakından da aldığında, aktif olan yakın ACK'yı FIN'a gönderir ve durum TIME-WAIT'e gider. Pasif yakınlaştırıcı ACK'yı ikinci FIN'a almadıysa, FIN paketini tekrar iletir.
RFC 793 , TIME-OUT ürününü Maksimum Segment Ömrü'nün iki katı veya 2MSL olacak şekilde ayarlar. MSL, bir paketin İnternet'te dolanabileceği maksimum süre 2 dakikaya ayarlandığı için, 2MSL 4 dakikadır. Bir ACK'ya ACK olmadığından, aktif yakınlayıcı, pasif göndericinin ACK'yı FIN'ına almamış olması durumunda, doğru TCP / IP protokolüne uyması durumunda 4 dakika beklemekten başka bir şey yapamaz (teorik olarak) .
Gerçekte, eksik paketler muhtemelen nadirdir ve hepsi LAN içinde veya tek bir makine içinde gerçekleşiyorsa çok nadirdir.
Soruyu cevaplamak için , TIME_WAIT içindeki bir soketi zorla nasıl kapatabilirim?
/etc/init.d/networking restart
Pratik olarak konuşursak, WMR'ın bahsettiği gibi SO_REUSEADDR seçeneğini kullanarak TIME-WAIT durumunu görmezden gelir. SO_REUSEADDR tam olarak ne yapar?
Bu soket seçeneği çekirdeğe, bu bağlantı noktası meşgul olsa bile (
TIME_WAIT durumunda) devam edip yeniden kullanabileceğini söyler. Meşgulse, ancak başka bir durumda, halen kullanımda olan bir adresi almaya devam edersiniz. Sunucunuz kapatılmışsa ve yuvalar hala bağlantı noktasında etkinken hemen yeniden başlatılmışsa yararlıdır. Beklenmeyen bir veri girerse, sunucunuzu şaşırtabileceğini, ancak bu mümkün olsa da, bunun mümkün olmadığını unutmayın.
TIME_WAIT
sunucuda" , sadece içinden atlamak bunu cevaplamak yerine soru önlemek ilk üç cevaplar.