2017-02-18 79 views
0

在TCP三次握手连接过程并在客户端(谁发起的连接的一个)发送到任何数据有效载荷加入了与在第三步中,ACK数据包中的服务器?TCP三次握手

回答

1

TCP握手中的最后一个ACK可能已经包含有效负载。但是,这通常不会完成,因为应用程序首先调用connect,然后等待服务器回复或发送其第一个数据。由于内核不知道应用程序接下来会做什么,因此它将在连接内发送ACK,以便服务器尽可能快地知道连接已建立。

根据您的操作系统有可能改变这种行为,并与第一数据一起发送ACK。在Linux中,这可以通过明确禁用快速ACK连接之前实现:

int off = 0; 
setsockopt(fd, IPPROTO_TCP, TCP_QUICKACK, &off, sizeof(off)); 
connect(fd,...)