我想知道是否有任何特殊原因需要增加 ACK 序列号而不是确认收到的序列号。为什么RFC这么设计呢?
Actual:
[SYN] SEQ=100
[SYN, ACK] Seq=300 Ack=101
[ACK] Seq=101 Ack=301
Why not:
[SYN] Seq=100
[SYN/ACK] Seq=300 Ack=100
[ACK] Seq=101 Ack=300
Run Code Online (Sandbox Code Playgroud)
当然,确认您刚刚收到的序列号而不是您收到的序列号 + 1 是有意义的吗?
在 TCP 中,协议使用序列号来跟踪已发送的内容。实际上,它是已发送的所有内容的计数器+1。
更多详细信息请参见https://www.rfc-editor.org/rfc/rfc793#section-3.3
ACK加1是因为数据包携带了SYN,它不为空。SYN 有助于增加 SEG.LEN,如 rfc 中所述:
SEG.LEN = 段中数据占用的八位字节数(包括SYN和FIN)
如果数据包为空并且没有 SYN/FIN,则计数器不会增加。
rfc 中也考虑到了这一点,其中规定要发送的下一个序列号必须大于或等于ACK 中指示的序列号:
新的确认(称为“可接受的确认”)是满足以下不等式的确认:
Run Code Online (Sandbox Code Playgroud)SND.UNA < SEG.ACK =< SND.NXT
其中 SND.UNA 是最旧的未确认序列号,SND.NXT 是下一个要发送的序列号。
通过增加序列。数据包的编号基本上是在询问对方“我希望你现在向我发送数据的第一个字节”
| 归档时间: |
|
| 查看次数: |
4914 次 |
| 最近记录: |