TCP bağlantısının parçalanmasında TIME WAIT'in amacı nedir?


12

Etkin yakınlayıcının TIME WAIT'e girmesinin nedeninin, son ACK'nın kaybolmamasını sağlamak olduğunu buldum. Ancak son ACK'nın kaybedilip kaybedilmediğini nasıl bilebilir? Pasif yaklaştıkça FIN tekrar gönderilecek ve daha sonra aktif olan yaklaşan ACK'nın kaybolduğunu biliyor mu? İşte TCP FSM'nin bir resmi.

TCP FSM



1
Bu blog gönderisinin harika bir cevabı var: vincent.bernat.im/tr/blog/…
Warlike Şempanze

Yanıtlar:


5

Pasif yaklaştıkça FIN tekrar gönderilecek ve daha sonra aktif olan yaklaşan ACK'nın kaybolduğunu biliyor mu?

Evet. TCP Bağlantı Yönetimi bölümünde TCP / IP Illustrated Volume 1'den alıntı :

  1. Kapatmayı tamamlamak için son segment, son FIN için bir ACK içerir. Bir FIN kaybolursa, bunun için bir ACK alınana kadar yeniden iletildiğini unutmayın.

Bir zaman aşımı var. Ne zaman içinde LAST_ACK, pasif daha yakın yollayacağız FINbir zaman aşımı olduğunda kayıp olduğunu varsayarak. Gerçekten kaybolduysa, daha yakın olan aktif sonuçta yeniden iletilir FINve girilir TIME_WAIT. Eğer FINkaybedilmediyse ancak final ACKkaybedildiyse, aktif daha yakındır TIME_WAITve FINtekrar alır . Bu olduğunda - bir alıcı FINiçinde TIME_WAIT- ACKyeniden iletilir.

Zaman aşımı değeri içinde TIME_WAITolduğu DEĞİL yeniden iletim amaçlı kullanılan. Bir zaman aşımı olduğunda, pasif yakın paket paketleri yeniden iletmediği TIME_WAITiçin finalin ACKbaşarılı bir şekilde teslim edildiği varsayılır FIN. Yani, zaman aşımı TIME_WAITsadece bir süre sonra, diğer uç bir şey göndermediyse, o zaman finali aldığından ACKve bağlantıyı kapattığından emin olabiliriz.


1

Ancak son ACK'nın kaybedilip kaybedilmediğini nasıl bilebilir?

Çünkü zaman aşımı süresi içinde almadı. Bunun bir "duh" cevabı olduğunu biliyorum, ama bu yüzden bu durumlar ve zaman aşımları var.

Pasif yaklaştıkça FIN yeniden gönderilecek mi?

Hayır. Bu akış için başka paketler gelmedikçe olmaz ve bu "RST" (sıfırlama) gönderilmesine neden olur.

Tüm süreç, ağ arızaları olasılığına rağmen düzenli bir kapatma gerçekleştirmek için karmaşık durum makinesidir. Ağlar kopuyor, bağlantılar yaşanıyor hataları, bağlantılar doyuyor ve paketleri düşürüyor, aygıtlar başarısız oluyor vb. Bir alıştırma olarak, uç noktalardan biri kaybolduğunda etkin bir bağlantı için durum ağacını çalıştırın (örn. Elektrik kesintisi.)

TL; DR Bu durum ağacı olası her arıza modunu işleyecek şekilde tasarlanmıştır.


Teşekkürler, ama hala ilk bölüm hakkında kafam karıştı. Aktif yakın olanın ACK'nın pasif yakınlık tarafından alınmadığını nasıl anladım? Pasif yaklaştırıcı ACK'yı aldığında, sadece bağlantının yanını yıkar ve ACK'yi almazsa, sadece SON ACK'da kalır, bu yüzden aktif daha yakın olan ACK'nın alınıp alınmadığını nasıl bilebilir?
czhao

çünkü her eyalete bağlı zamanlayıcılar vardır.
Ricky Beam

Üzgünüm anlamadım. Bu zamanlayıcılar aktif yaklaşana pasif yaklaştırıcının nihai ACK'yı almadığını nasıl söyler? yani daha yakın olan aktif son ACK'yı yeniden göndermek zorunda olup olmadığını nasıl bilir?
czhao

0

TIME_WAIT'in amacı, ağ oluşturmanın 'eski, mevcut' bağlantıya ait olarak gelen paketleri yeni bir bağlantıdan ayırt etmesine izin vermektir. Öneri, TIME_WAIT zamanlayıcıyı Maksimum Segment Ömrünün (MSL) iki katına ayarlamaktır, sistemimde MSL 1 dakikadır, bu nedenle bağlantılar 2 dakika boyunca TIME_WAIT durumunda kalır.

Bu süreden sonra gelen paketler artık eski bağlantıyla ilişkilendirilmez.

TIME_WAIT doğrudan ACK paketlerinin gönderilmesini beklemiyor; CLOSE_WAIT ve FIN_WAIT durumları tarafından yönetilir. TIME_WAIT durumuna geçtiğinizde soket zaten kapalıdır.

Kaynaklar: http://www.tcpipguide.com/free/t_TCPConnectionTermination-3.htm https://en.wikipedia.org/wiki/Maximum_segment_lifetime http://www.lognormal.com/blog/2012/09/27/ linux-tcpip ayar /

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.