我想构建这样一个系统,有3个节点,A,B和C A和B建立TCP连接,然后A告诉C端口,序列号(seq_no)和确认序列号(ack_seq_no)。然后C将数据包发送到B(C和A共享相同的IP,但它们彼此相距很远,例如,A欺骗IP的A)
如果B从不向IP(A)发送数据包(仅ACK),则C可以使用正确的seq_no和ack_seq_no向B发送数据包,但有时如果B将数据包发送到IP(A),
1 A立即发送数据包P1到B的ACK,A告诉C新的ack_seq_no。但是A和C之间存在延迟,所以在C知道新的ack_seq_no C之前,可能会将一些数据包(带有欺骗性的IP(A))发送给B,并且过时的ack_seq_no。
我的第一个问题是:当收到过时的ack_seq_no
数据包时,C的行为是什么?2如果我将p1的ACK从A延迟到B,我让A先告诉C,然后发送p1的ACK。有两个问题:
1)由于B正在等待来自A的p1的ACK,它可能会重新发送数据包p1,如何增加重传超时?如果每次A回复带有这样的延迟ACK,超时会自然增加,那么这不是问题吗?
2)如果C在ACK(对于p1)之前从A到B发送数据包到B(IP为A)。这意味着数据包具有更新的ack_seq_no,但是B不知道它是否是新的ack_seq_no A是否已知(因为ACK尚未到达),所以它可能认为ACK是在数据包上捎带的?那么B将如何处理迟到的ACK?
答案 0 :(得分:0)
如果收到过时的ACK,将忽略ACK(假设它是一个被延迟的旧数据包)。每个ACK都会确认导致它的所有内容(我假设您没有发送选择性ACK)。
发件人应根据确认响应时间调整其重新传输超时。
B无法区分来自A或C的ACK。就其而言,这与问题#1相同 - 迟到的ACK将被忽略。