TCP握手:此时确切地认为连接已建立并且可以发送数据?

时间:2018-02-26 08:21:47

标签: tcp

TCP 3次握手包括SYN,SYN-ACK和ACK数据包。

我的问题是:服务器(即接受连接的服务器)能否在发送SYN-ACK后立即发送数据,或者在接收第一个ACK之前无法发送任何数据?

换句话说,如果服务器在接受连接后立即在套接字上发送数据,则客户端开始接收它需要多少次往返。它只是一次往返(即来自客户端的SYN,以及来自服务器的SYN-ACK +数据包)?或者至少2次往返?

2 个答案:

答案 0 :(得分:1)

在最终的ACK之前,服务器无法发送任何内容,因为在此之前它没有接受的套接字。在握手完成之前,accept()不会返回。

答案 1 :(得分:1)

当客户端发送第一个syn数据包时,客户端将处于SYN_SENT状态,并等待来自服务器的SYN / ACK。 服务器将继续监听套接字。收到SYN时,服务器进入SYN_REVD状态。现在它发送SYN / ACK给客户端,并分配缓冲区并设置变量congwin,threshold等。当客户端接收到SYN / ACk时,它将进入ESTABLISHED STATE并用ACK确认服务器。现在,客户端可以发送或不发送ack段中的数据。服务器收到确认后,它将进入建立状态。 现在,客户端和服务器都处于已建立状态,并且可以交换数据。

当客户端收到SYN / ACk时,它将在其端分配缓冲区和变量,然后将ACK发送到服务器。

要了解这些状态,请尝试在Linux中使用netstat命令,您可以看到套接字的状态