2011-07-24 12 views
5

the TCP three-way handshakeは、最初のハンドシェイク中にアックする際にシーケンス番号にバンプが発生するのはなぜですか?承認番号をシーケンス番号と同じにするよりも、どのように優れていますか?なぜ、TCPのスリーウェイハンドシェイクがシーケンス番号をバウンスするのですか?

接続が

Client sends SYN,A 
Server responds with SYN-ACK,A+1,B 
Client confirms with ACK,B+1 

で確立された方法であることよりも良い

ACKフラグが設定されている場合 ACKフィールドは、このことを意味しているためだ
Client sends SYN,A 
Server responds with SYN-ACK,A,B 
Client confirms with ACK,B 
+0

[なぜTCPセグメントのSYNまたはFINビットがシーケンス番号空間のバイトを消費するのですか?](http://stackoverflow.com/questions/2352524/why-does-a-syn-or -fin-bit-in-a-tcp-segment-consume-a-sequence-number-in-the-sequence-number) –

答えて

3

承認番号を(32ビット) - ACKフラグが設定されている場合、このフィールドの値は次のseです受信者が期待している番号。

それは(initalシーケンス番号+ 1)に設定されていない場合、それは両方がSYN(両方SYNACKフラグがこのパケットに設定する必要があります)ack'ing、それがいることを期待していると言って意味一貫性がないことになります(すなわちそれを受信して​​いない)。

+0

申し訳ありませんが、私は密でなければなりません。私は "矛盾"を見ないので、私の編集。 –

+0

'ACK == n 'は「シーケンス番号「n-1」までのすべてのメッセージを受信したので、シーケンス番号「n」のものを私に送ってください」という意味です。したがって、あなたの例ではクライアントから 'SYN'の再送を要求しますが、これは何の感覚もしません。最初のハンドシェイクのための異なるシーケンス番号の意味論を扱うことは、正当な理由がない限り、プロトコル全体を実装することをより困難にするであろう。 – Mat

+0

私はあなたが言っていることは、シーケンス番号を打つことは実際には最初の接続ハンドシェイクには必要ではないが、後続のTCP ack-naksにはバンピングが必要なので、それは単に常に使われるということです。私はそれを答えとして受け入れます。 –