2017-02-18 78 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,...)