TCP 3ウェイハンドシェイクでは、3つのセグメントが送信されます(SYN、SYN ACK、ACK)。 3番目のセグメント(ACK)が失われたらどうなりますか?送信者はセグメントを再送するか、接続を確立することを諦めますか? 2人のホストは、セグメントが失われていることをどのように知っていますか?TCPハンドシェイクセグメントが失われた場合はどうなりますか?
答えて
TCPはすべてのパケットにシーケンス番号を持っています。したがって、パケットが失われたかどうかを知ることは簡単です。ホストがパケット上でACKを受け取らない場合、ホストはただそれを再送します。
しかし、ほとんどの場合、そのACKが失われたとしても、非常に簡単な理由で再送はありません。 ACKの直後に、TCPプロトコルを開いたホストがデータの送信を開始する可能性があります。そのデータはすべてのTCPパケットと同様にACK番号を持つので、受信者はそのようにACKを得るでしょう。したがって、SYN-ACKの送信者は、次のパッケージで「暗黙の」ACKを取得するため、ACKを受け取っていないことを合理的に気にする必要はありません。
SYN-ACKの再送は、データが全く受信されていない場合にのみ必要です。
更新:
たちのSYNが(この 入って来るセグメントでおそらく)認められている場合は、着信セグメントの優先レベル必要 試合:私はまさにこれを指定したRFCで場所を見つけたリセットされていない場合は、ローカルの優先レベルを正確に設定してください。 を送信する必要があります。
つまり、ACKが破棄されたにもかかわらず、次のパケットが破棄されない場合、すべて正常です。それ以外の場合は、接続をリセットする必要があります。それは完璧な意味合いがあります。
ハンドシェイクの最終的なACK自体はACKではありません。 –
ACKを確認すると、実際のデータの送信が不可能になります。 –
私はポイントを得た。ありがとうございました! – ZHOU
私はこの特定の状況について専門家ではありませんが、クライアントが接続されているとは思うが、サーバーはそうではないと思われます。クライアントがサーバーにデータを送信しようとすると、サーバーはそれを拒否し、RSTパケットをクライアントに送信して、「接続」をリセットします。
サーバは、SYN-ACKを送信するときに確立された接続を認識します。しかし、これは実装の詳細かもしれない、私はこの場合に何をすべきかについての実際の仕様を見つけていない。たぶんそこには何もない。 –
@LennartRegebro:[RFC 793 Section 3.4](http://tools.ietf.org/html/rfc793#section-3.4)によると、サーバは最終的なACKを受け取るまで、「ESTABLISHED」状態に入らない。 'SYN + ACK 'を送信すると、' SYN-RECEIVED'状態になります。クライアントは 'SYN + ACK 'を受信すると' ESTABLISHED'状態に入ります。 –
見つけた: "私達のSYNが(おそらくこの入って来るセグメントの)承認されているならば、リセットが送られなければならない場合、着信セグメントの優先順位レベルは がローカル優先レベルと正確に一致しなければなりません。言い換えると、ACKと* only * ACKが破棄された場合、接続が確立されます。より多くのものが落とされれば、リセットがあります。 " –
- 1. トリガーが失敗した場合はどうなりますか?
- 2. オープンに失敗した場合はどうなりますか?
- 3. Oracle - ORA-03135接続が失われた場合のトランザクションはどうなりますか?
- 4. JWTが盗まれた場合はどうなりますか?
- 5. リフレッシュトークンが失われたらどうなりますか?
- 6. shared_ptrのコンストラクタが失敗した場合はどうなりますか?
- 7. emberのモデルフックの要求が失敗した場合どうなりますか
- 8. unbind()の使用に失敗した場合はどうなりますか?
- 9. Catel:SavableModelBase.Loadが失敗したときはどうすればわかりますか?
- 10. PHP file_get_contentsが失敗した場合は、代わりに
- 11. クローズが中断された場合、または失敗した場合、fdの状態はどうなりますか?
- 12. Github - ユーザーが削除された場合のコミットはどうなりますか?
- 13. PropertyModel:対象モデルが変更された場合はどうなりますか?
- 14. Tomcat:HTTPマルチパートリクエストが中断された場合はどうなりますか?
- 15. 例外がスローされた場合、Laravel DB Transactionはどうなりますか?
- 16. ライブアプリケーションのプロビジョニングプロファイルが削除された場合はどうなりますか?
- 17. シリアルDispatchQueueでコンテキストスイッチが起動された場合はどうなりますか?
- 18. プログラムの実行中にTCP接続が失われた場合のフェールオーバーはどうすればよいですか?
- 19. waitpidの場合、子プロセスが終了したかどうかはどのようにわかりますか?
- 20. TCP ZeroWindowが導入された後はどうなりますか?
- 21. 接続が失われた場合、TCPクライアントアプリケーションでのboost :: asio :: readの読み込みには時間がかかります
- 22. CompletableFutureが完了しなかった場合はどうなりますか?
- 23. 再接続後にTCPデータが失われました。
- 24. Java TCPファイルの転送データがランダムに失われました
- 25. エラーロギングが失敗した場合はどうすればよいのですか?
- 26. 公開鍵が失われたらどうなりますか?それはセキュリティの問題ですか?
- 27. 私の.apkをインストールしたユーザーが失敗したかどうか、どうすればわかりますか?
- 28. 関数アプリケーションがtypeclassの場合はどうなりますか?
- 29. ローカリティセンシティブハッシュ - バケットが空の場合はどうなりますか?
- 30. バイトが読み込まれる前に接続が切断された場合、TCPソケット接続上のバイトは失われますか?
https://tools.ietf.org/rfc/rfc793.txtは何が起こるかを説明します。 –
@EdHeal:特定の部分を指すことができますか? – skrtbhtngr