如何确定TCP报文的开始和结束?

How to determine the start and end of a TCP message?

我想通过 TCP 套接字从 PC1 向 PC2 发送消息。问题是,我如何判断 PC2 收到的消息是部分消息还是完整消息?或者更具体地说,如何确定 TCP 消息的开始和结束?

1) 在 TCP 消息的开头添加消息长度信息?

2) 在 TCP 消息的开头和结尾添加特殊标志字节?

是,或者

(3) 使用自描述协议,如 XML,或

(4) 类型-长度-值协议,或

(5) 像 XDR 这样的自我实现的协议,或者

(6) ...

注意如果像STX/ETX一样使用start/end个字节,出现在消息中间的时候需要转义,转义也需要转义