摘要

  • TCP 为 SYN 和 FIN 隐式分配一个序列空间位置,使重复传输不会被当作第二次事件。
  • SYN 排在本段第一个数据字节之前,FIN 排在本段最后一个数据字节之后。
  • 这些是控制位置,不是应用字节;ACK、PSH 和 RST 本身不会增加 SEG.LEN。

为事件编号

RFC 793 通过把少数控制信息隐式纳入序列空间,解决了丢失和重复的问题。RFC 9293 延续这一设计:SYN 和 FIN 可以被确认和重传,而接收方仍能判断它们是同一个有序事件。这个位置属于协议记账,并没有被写入数据区。

出现 SYN 时,SEG.SEQ 表示初始序列号,首个数据字节使用 ISN+1。含有 N 个数据字节的 SYN 段因此占用 N+1 个连续位置。FIN 则位于该段数据之后。确认号表示接收方期待的下一个序列号,所以即使没有数据,确认 SYN 或 FIN 也会让边界前进一格。

SEG.LEN 计算数据字节,并把 SYN、FIN 也算入长度。重传使用原来的位置。两个方向各自拥有序列空间;FIN 只表示发送方没有更多数据,并不结束反方向。RST 不占序列空间,ACK 和 PSH 也不会自行增加位置。

来源