2016-09-23 16 views
0

私は1つのtcpスタックを実装しようとしています。オープンTCPフロー制御エラー

  1. TCP:

    私が続いている 次の手順。クライアントは、初期シーケンス「C」とAck noを「0」としてサーバに「SYN」を送信しました。

    b。サーバはseq no "S"とack no "C + 1"のSYN + ACKで応答しました。

    c。クライアントは、シーケンス番号「C + 1」およびACK番号「S + 1」のACK + PSHを送信する。

  2. TCP送信とのrecv:

    。クライアントは、ACKフラグ付きのデータ要求を送信し、データ「 」はseq no「C + 1」とack no「S + 1」

    bを送信します。送信者はセグメント内に「S + 1 + data」というseqを付けずに送信し、受信者はFINまたはRSTが送信されるまで「S + 1 + data」のないACKを送信します。

私のケースでは、データの送信中にパケットがほとんど得られませんが、私はwiresharkでそれらを見ることができます。

は、シーケンス番号とACK番号を使って注文データおよびパケット損失のうちをチェックすると、あなたが予想される次のシーケンスよりも高いシーケンス番号のセグメントを受信した場合、バック

+0

あなた自身の低レベルのtcpを書いていますか、または書き込みと受信にシステム機能を使用していますか? – HeadCode

+1

その低レベルのtcp – Pawan

答えて

1

パケットを取得するために、任意のメカニズムがあり、最後にACKを再送する必要があります。これは、セグメントの一部が失われたことを送信者に伝え、肯定応答を待っているすべてのセグメントを直ちに再送信する必要があります。

より良い解決策は、RFC 2018にSelective Acknowledgementオプションを実装することです。これにより、順不同で受信したセグメントを確認することができ、送信者は見落とされたセグメントのみを再送します。

+0

最後のACKを送信すると、最後のACKからのパケットの送信が開始されるか、最初から送信が開始されます。 – Pawan

+0

最後のACKから再送信されます。 – Barmar

+1

すでに承認されているものは何も再送信されません。 – Barmar