TCP 3次握手包括SYN,SYN-ACK和ACK数据包。
我的问题是:服务器(即接受连接的服务器)能否在发送SYN-ACK后立即发送数据,或者在接收第一个ACK之前无法发送任何数据?
换句话说,如果服务器在接受连接后立即在套接字上发送数据,则客户端开始接收它需要多少次往返。它只是一次往返(即来自客户端的SYN,以及来自服务器的SYN-ACK +数据包)?或者至少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命令,您可以看到套接字的状态