1

データを送信しているコンピュータが突然 IP アドレスを変更した場合の TCP/IP プロトコル スタックの標準的な動作は何ですか? これが発生した場合、システムの ARP テーブルは古くなっていますが、この IP のエントリはタイムアウトしていませんか?

新しい IP-mac マッピングを検出する方法はありますか? または、キューに入れられたデータを削除してエラーを返すだけですか?

4

1 に答える 1

10

A と B の間に TCP 接続があるとします。A の IP アドレスが突然変更されます。

B の観点からは、何が起こるかは単純明快です。B は A の古い IP アドレスにデータを送信し続けます。次の 2 つの可能性があります。

  • A の古い IP アドレスが現在使用されていない場合、これらのパケットはどこにも行きません。それらは床に落とされます。B はそれらに対する確認応答を受け取りません。最終的に、B は接続がタイムアウトしたと判断します。B から見ると、A のネットワーク接続が完全に失われたり、A がクラッシュしたり、電源がオフになったりする状況と区別がつきません。
  • A の古い IP アドレスが別のマシン (C など) によって要求されている場合、B が C に送信しているパケットは C には意味がありません。新しい TCP 接続を開始しません ( SYNC が認識している既存の TCP 接続と一致しません。C はRSTパケットで応答し、B はすぐにソケットで「ピアによる接続リセット」エラーを返します。

いずれにせよ、TCP 接続は切断されており、回復できません。さらに、それについてAまたはBができることは絶対にありません。は、古い IP アドレスを使用してトラフィックを受信 (または送信) できなくなります。この TCP 接続でこれ以上の通信を行うことはできません。

Aの視点からすると、それは少し異なります。A の IP アドレスが変更された後、ローカル システムに存在しないローカル IP アドレスとポートにバインドされたソケットを持つ状況になります。bind()これは通常は許可されていません (システムの有効なローカル IP アドレスではない IP アドレスにバインドするために呼び出すことはできません) が、いずれにせよ成功しています。TCP/IP 標準では、この場合に何をすべきかは述べられていませんが、実際の動作では、A はソケットをすぐに無効にし、なんらかのエラーを遅滞なくアプリケーションに返します。

結論: A は問題を検出し、接続はすぐに切断されますが、B が問題を検出してエラーを返すまでには時間がかかる場合があります。

ARPテーブルについては、なぜあなたがそれを持ち出しているのかわかりません。なぜなら、それは下位層(データリンク層)にあり、IP(はるかに少ないTCP)層で起こることとはあまり関係がないからです. . しかし、A と同じローカル ネットワーク (ローカル ルーターなど) 上のノードの ARP テーブルには、A の古い IP アドレスの古いエントリが含まれています。ただし、A の新しい IP アドレスの新しい有効なエントリをすぐに取得するため (この IP アドレスに初めてパケットを送信しようとするとき)、問題はありません。古いエントリにより、古い IP アドレスへのトラフィックが A で誤って転送される可能性がありますが、他のノードが A の古い IP アドレスを取得した場合、Gratuitous ARP もそれを処理します。

最後に、「新しい IP-mac マッピングを検出する方法はありますか、それともキューに入れられたデータを単にドロップしてエラーを返す方法はありますか?」という質問です。意味がありません。確かに、新しい IP-mac マッピングを発見する方法があります。それは ARP と呼ばれます。それが ARP の唯一の機能です。しかし、キューに入れられたデータとは何の関係もありません。これは、プロトコル スタックの 2 つ以上のレイヤーを意味する概念にすぎません。

コメントで、A と B が互いに同じローカル ネットワーク上にある場合について話していることを明確にしましたが、これは答えに違いはありません。A と B が同じローカル ネットワーク上にあるか、リモート ネットワーク上にあるかは同じです。

于 2013-03-03T14:01:17.723 に答える