如果我发送了两个TCP消息,我需要处理后一个到达先一个的情况吗?还是它保证按照我发送的顺序到达?我认为这不是Twisted特定的例子,因为它应该符合TCP标准,但如果任何熟悉Twisted的人可以为我的安心提供一个Twisted特定的答案,那将不胜感激 :-)
TCP是面向连接的协议,可以为其客户端提供有序传输。当然,这仅适用于连接级别:各个连接是独立的。
需要注意的是,通常我们会使用“TCP流”和“UDP消息”这样的术语。
无论您使用哪种客户端库(例如Twisted),底层TCP连接都是独立的。TCP将按顺序向客户端传递“协议消息”。在此,“协议消息”指的当然是您在TCP层上使用的协议。
需要进一步注意的是,I/O操作是异步的,并非确定性的,非常依赖于系统负载,同时也会受到网络延迟和丢包的影响,因此不能保证TCP连接之间的消息顺序。
TCP是一种流式传输协议,而UDP则是一种消息传输协议。你将这两个术语混淆了。对于TCP来说,流会按照发送顺序到达,并且没有明确的消息边界,字节按照它们到达的顺序出现,将它们解释为消息取决于你。