如果一个应用程序打开了2个TCP套接字,是否在这两个套接字之间都保持有序属性?

If an application opens 2 TCP sockets, will the in-order property be maintained across both of them?

本文关键字:套接字 之间 两个 属性 应用程序 一个 是否 如果 TCP 2个      更新时间:2023-09-26

如果我有一个Javascript应用程序并行打开2个websockets,其中两个都是在同一端口上的同一主机:

var socket1 = io.connect(host);
var socket2 = io.connect(host);

然后我将它们中的每个数据发送到应用程序中的相同函数:

socket1.on("data", function(e) {doStuff(e);});
socket2.on("data", function(e) {doStuff(e);});

每个套接字是否只对自己强制执行in-order属性,还是对整个应用程序强制执行?例如,如果发送到socket1的数据包丢失,socket2是否仍然能够接收和处理未来的TCP数据包,而不必等待数据包重新传输到socket1?

两个套接字将完全独立。在一个连接上发送的数据将不会对另一个连接产生影响,无论丢失和重传。具体来说,TCP用于数据完整性的序列号空间特定于(addr1, port1, addr2, port2)的四元组。