TCP 连接与可靠传输

TCP 为应用提供有序的字节流。应用看到的是连续的字节,不能把一次发送当作一次接收的边界。

建立连接

典型的三次握手过程如下,x、y 分别是双方的初始序号:

客户端                              服务端
  | -------- SYN, seq=x -----------> |
  | <-- SYN+ACK, seq=y, ack=x+1 ----- |
  | -------- ACK, ack=y+1 ---------> |

双方通过握手交换初始序号,并确认对端具备参与通信的能力。

可靠性来自哪些机制

  • 序号:标识字节在数据流中的位置。
  • 确认:反馈已接收的数据范围。
  • 重传:检测丢失后重新发送。
  • 流量控制:避免发送速度超过接收端处理能力。
  • 拥塞控制:根据网络状况调整发送行为。

可靠传输也可能失败,例如连接超时或网络持续中断。应用仍需处理错误和恢复逻辑。

字节流没有消息边界

发送端连续发送两条应用报文,接收端可能一次读到全部数据,也可能分多次读取。

常见的应用层拆包方法包括:固定长度、长度字段、分隔符。解析器应维护接收缓冲区,只在收到完整报文后交付给业务层。

与电力规约联调的联系

分析基于 TCP 的规约时,应先重组字节流,再按应用协议确定帧边界。一个 TCP 包不一定对应一帧应用报文。

抓包时关注什么

先看连接是否建立,再看数据方向、序号确认、重传、窗口以及断开原因。TCP 确认表示传输层接收进展,不等于业务命令已经执行成功。