【发布时间】:2013-03-20 17:05:32
【问题描述】:
我想搭建这样一个系统,有3个节点,A,B和C A和B建立TCP连接,然后A告诉C端口,序列号(seq_no)和确认序列号(ack_seq_no)。然后 C 向 B 发送数据包(C 和 A 共享同一个 IP 但彼此相距较远,例如 C 欺骗 A 的 IP)
如果 B 从不向 IP(A) 发送数据包(仅 ACK),C 可以向 B 发送具有正确 seq_no 和 ack_seq_no 的数据包,但有时如果 B 向 IP(A) 发送数据包 P1,
1 A 立即向 B 发送数据包 P1 的 ACK,A 告诉 C 新的 ack_seq_no。但是 A 和 C 之间有一个延迟,所以在 C 知道新的 ack_seq_no 之前,C 可能会发送一些数据包(带有欺骗 IP(A))到 B 带有过时的 ack_seq_no。
我的第一个问题是:当 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 呢?
【问题讨论】:
标签: networking tcp network-programming