1

我想建立这样一个系统,有3个节点,A、B和CA和B建立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 向 IP(A) 发送数据包 P1,

1 A 立即向 B 发送数据包 P1 的 ACK,A 告诉 C 新的 ack_seq_no。但是 A 和 C 之间存在延迟,因此在 C 知道新的 ack_seq_no 之前,C 可能会使用过时的 ack_seq_no 向 B 发送一些数据包(带有欺骗性 IP(A))。

我的第一个问题是:当 C 收到带有过时 ack_seq_no 的数据包时,它的行为会怎样?

2 如果我将 p1 的 ACK 从 A 延迟到 B,我让 A 先告诉 C,然后发送 p1 的 ACK。有2个问题:

1)由于B在等待A的p1的ACK,它可能会重传包p1,如何增加重传超时时间?如果每次 A 回复 ACK 都有这样的延迟,那么超时时间自然会增加,那不是问题吗?

2)如果C在从A到B的ACK(for p1)之前向B(IP为A)发送数据包。这意味着数据包具有更新的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 或 C 的 ACK。就它而言,这与问题 #1 相同——迟到的 ACK 将被忽略。

于 2013-03-29T23:20:25.820 回答