2016-09-13 5 views
0

私は、TIME_WAITの暗殺についてRFC1337を見上げ、これはそれの一部です。TCP TIME_WAITの暗殺

図1は、TIME-WAIT暗殺の一例を示しています。セグメント1-5
はノーマルクローズ
ハンドシェークを示し、RFC-793の図13から正確にコピーされます。パケット5.1,5.2、および5.3は、この
シーケンスの拡張であり、TWAを示しています。ここで5.1は古いセグメントであり、
はTCP Aには受け入れられません。
シーケンス番号または古いPAWSタイムスタンプのために受け入れられない可能性があります。どちらの場合も、 TCP Aは、現在のSND.NXTとRCV.NXTに対してACKセグメント5.2を送信します。
それは、この接続のための状態を有していないため、TCP BはRSTとしてこれを反映AでTIME-WAIT状態暗殺 セグメント5.3、!

は、あるものを私に混乱し、TCP/IPイラスト音量の中で、何それは言うことは

RFC 1337     TCP TIME-WAIT Hazards     May 1992 
      TCP A            TCP B 
     1. ESTABLISHED           ESTABLISHED 
      (Close) 
     2. FIN-WAIT-1 --> <SEQ=100><ACK=300><CTL=FIN,ACK> --> CLOSE-WAIT 
     3. FIN-WAIT-2 <-- <SEQ=300><ACK=101><CTL=ACK>  <-- CLOSE-WAIT 
                   (Close) 
     4. TIME-WAIT <-- <SEQ=300><ACK=101><CTL=FIN,ACK> <-- LAST-ACK 
     5. TIME-WAIT --> <SEQ=101><ACK=301><CTL=ACK>  --> CLOSED 
     - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
     5.1. TIME-WAIT <-- <SEQ=255><ACK=33> ... old duplicate 
     5.2 TIME-WAIT --> <SEQ=101><ACK=301><CTL=ACK> --> ???? 
     5.3 CLOSED  <-- <SEQ=301><CTL=RST>    <-- ???? 
      (prematurely) 

** 

です**:接続のために到着し

どれ遅れセグメント 2MSLウェイトは破棄されます。

なぜ、RFC 1337の図1のTCP Aは、古い重複セグメントをACKしましたか? '世代をリセット' で

+0

遅延セグメントは、tcp制御データではなく、アプリケーションペイロードデータを意味しますか? TIME-WAIT状態に「ACK」していないのですが、その接続のステータスは何ですか? –

+0

@SqlSurfer RFC: "ここで5.1はTCP Aに受け入れられない古いセグメントです"、セグメントタイプを指定していないようです。 – ryuu

+0

そして、私は正確に "それはありません"というACKを出して "TIME-WAIT状態がその接続の状態を教えてくれますか?"私は貧しい英語のスキルを持っていたので意味します.... – ryuu

答えて

2

RFC 793状態:

  • 接続が同期状態(ESTABLISHEDにある場合、 は、FIN-WAIT-1、FIN-WAIT
      を許容できないセグメント(ウィンドウシーケンス番号または 受け入れられない応答番号)は、現在の送信シーケンス番号 を含む空の 確認応答セグメントのみを派生しなければなりません(つまり、次のシーケンス番号が受信されることを示す肯定応答が受信されると、a接続は同じ状態のままです。
  • +0

    それは実際にはセグメントを肯定していないという意味ですか、間違った(容認できない)セグメントが捨てられたためにackを送信するだけですか? – ryuu

    +0

    ACKはあなたに新しいシーケンス番号を与えていますので、特殊な制御作業をしようとしているときに順序が狂っていないメッセージを送信できます。(右?)このディスカッションについて私が何を恐れるのは、スタックの実装の詳細にして、あなたのアプリが将来、なぜ動作しないのか不思議に思う1。21ギガワットのネットワークカードが出てきます。これは、ファイアウォールと仮想ハードウェアが緊張し始めるところです。 –

    +0

    @ケビンそれは正しいです、それは現在のシーケンス番号とウィンドウを読み取っています。 – EJP

    関連する問題