【发布时间】:2015-03-17 19:06:09
【问题描述】:
所以我明白,在大多数情况下,SEQ 和 ACK 编号是如何确定的(SEQ = SND.NXT = ISN + 发送的字节数,ACK = RCV.NXT = 预计从下一个收到的数据包开始的 SEQ)。我想知道发送纯 ACK 数据包时 SEQ 如何增加(连同 SND.NXT 和 SND.UNA)。
例如: (我给客户端 A ISN = 1,服务器 B ISN = 100)
A -> (SEQ = 1, ACK = 100, LEN = 412 bytes)
(A) RCV.NXT = 100, SND.NXT = 413, SND.UNA = 1
(B) RCV.NXT = 413, SND.NXT = 100, SND.UNA = 100
A <- (SEQ = 100, ACK = 413, LEN = 0)
(A) RCV.NXT = 101, SND.NXT = 413, SND.UNA = 413
(B) RCV.NXT = 413, SND.NXT = 101, SND.UNA = 101 **(or 101?)**
A <- (SEQ = 101, ACK = 413, LEN = 1448)
(A) RCV.NXT = 101, SND.NXT = 413, SND.UNA = 413
(B) RCV.NXT = 413, SND.NXT = 1549, SND.UNA = 101
A -> (SEQ = 413, ACK = 1549, LEN = 0)
(A) RCV.NXT = 1549, SND.NXT = 414, SND.UNA = 414 **(or 413?)**
(B) RCV.NXT = 414, SND.NXT = 1549, SND.UNA = 1549
每次发送数据包时增加 SND.NXT 似乎是有意义的(即使有效负载 len = 0),但您是否也会增加 SND.UNA?对于 SND.UNA = ACK 分配,这似乎是相当随意和奇怪的例外。但是,在我看来,如果您不这样做,那么您的 SND.UNA 将在交换结束时减一。
我有什么遗漏吗?
【问题讨论】: