Bir program öldükten sonra dinleyen bir TCP portunu temizlemek neden birkaç dakika sürüyor?


27

Bir TCP portunu dinleyen bir programı öldürürsem, port sistem tarafından yeniden talep edilip tekrar kullanılabilir hale gelene kadar birkaç dakika sürebilir. Bu fenomenden bahseden birkaç Q / A gördüm, ancak bir açıklaması yoktu. Bu neden oluyor, sistem neden hemen limanı geri kazanmıyor? Windows veya Mac gibi başka sistemlerde de oluyor mu?

Yanıtlar:


25

Bunun arkasındaki fikir, bu bağlantı noktasını dinleyen önceki program için hedeflenen paketleri almamaktır. Bu TIME_WAITdurum RFC793'te maksimum segment ömrünün iki katı olarak tanımlanmıştır .

Diğer İşletim Sistemleri hakkında bir şey bilmiyorum ama hepsinin de benzer davranış gösterdiğini düşünüyorum.

Bu soruna yönelik bir geçici çözüm SO_REUSEADDR, TIME_WAITdurumu görmezden gelmesi gereken sokete ayarlamaktır .


3
Güvenilir TCP durum diyagramımı kontrol ederek, TIME_WAIT'in bir soketin son durumu olduğunu ve genellikle 2MSL için devam ettiğini görebiliyorum - bu, maksimum segment ömrünün iki katı. Spec (RFC793) bunu 2 dakika olarak belirtir ve toplamda 4 dakika verir. Bu, herhangi bir istek ve yanıtın hala "uçuşta" işlenmesi ve doğru programa inmesi veya soketin TIME_WAIT olması durumunda atılması için yeterli zaman sağlar.
Faelkle

Bunun Windows'ta da olduğunu onaylayabilirim.
Thomas Bratt
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.