1

このようなシステムを構築したいのですが、A、B、CA、B の 3 つのノードがあり、A が TCP 接続を確立し、A が C にポート、シーケンス番号 (seq_no)、および確認シーケンス番号 (ack_seq_no) を伝えます。次に、C はパケットを B に送信します (C と A は同じ IP を共有しますが、互いに遠く離れています。たとえば、C は A の IP をスプーフィングします)。

B が IP(A) にデータ パケットを送信しない場合 (ACK のみ)、C は正しい seq_no と ack_seq_no を使用してパケットを B に送信できますが、B がデータ パケット P1 を IP(A) に送信する場合があります。

1 A は直ちにデータ パケット P1 の ACK を B に送信し、A は C に新しい ack_seq_no を伝えます。しかし、A と C の間には遅延があるため、C が新しい ack_seq_no を知る前に、C は廃止された ack_seq_no を使用して (スプーフィングされた IP(A) を含む) データ パケットを B に送信する可能性があります。

私の最初の質問は、廃止された ack_seq_no を持つデータパケットを受信したときに C がどのように動作するかです。

2 A から B への p1 の ACK を遅らせた場合、まず A に C を伝え、次に p1 の ACK を送信します。2 つの質問があります。

1) B は A からの p1 の ACK を待っているため、パケット p1 を再送信する可能性があります。再送信タイムアウトを増やすにはどうすればよいですか? 毎回 ACK を返すたびにこのような遅延が発生すると、当然タイムアウトが増加しますが、それは問題ではありませんか?

2) A から B への ACK (p1 の) の前に、C がデータ パケットを B に (A の IP を使用して) 送信する場合。これは、データ パケットが更新された ack_seq_no を使用していることを意味しますが、B は新しい ack_seq_no が既知であるかどうかを知りません。 Aかそうでないか(ACKがまだ到着していないため)、ACKがデータパケットにピギーバックされていると見なされる可能性がありますか?では、B は遅れた ACK にどのように対処するのでしょうか?

4

1 に答える 1

0
  1. 古い ACK を受信した場合、ACK は無視されます (遅延した古いパケットと見なされます)。すべての ACK は、それに至るまでのすべてを確認します (選択的な ACK を送信していないと仮定しています)。

  2. 送信者は、確認応答時間に基づいて再送信タイムアウトを調整する必要があります。

  3. B は、A からの ACK と C からの ACK の違いを見分けることができません。これに関する限り、これは質問 #1 と同じです。遅れた ACK は無視されます。

于 2013-03-29T23:20:25.820 に答える