TCP:同时发送对等点会发生什么?

网络工程 tcp
2022-02-15 03:20:43

假设服务器和客户端同时执行send()——据我所知,它们都将发送数据,接下来都开始等待 Ack 消息,没有人会发送

但是这样的问题从来没有出现过,那么实际上会发生什么呢?

2个回答

TCP是双向的。 实际上,在客户端和服务器之间创建了两半管道;将此视为全双工操作,因为对话双方可以同时发送和接收。

但是在任何真正的通信发生之前,客户端需要首先使用 TCP SYNchronize(标志)数据包启动到服务器的连接,并且服务器应该使用附带 ACK 的 TCP SYN 向客户端响应,最后是客户端确认服务器 TCP SYN。这是TCP SYN-SYN/ACK-ACK 3 次握手。 然后数据包可以在任一方向自由流动,直到连接断开。

为什么说双方都不发送ACK?每一方都将确认它接收到的所有数据(按顺序)。每一方都维护自己的发送和接收数据计数——序列号这个问题“从未出现”,因为它不存在;每个方向都保持状态,因此谁何时发送什么都没有关系。

如果AB同时发送一个数据包,比如 seq:0 的 5 个字节,那么他们将各自独立地确认他们收到的 5 个字节。该连接是全双工双向流。A发送给B的内容与B发送给A 的内容无关