2013-10-03 60 views
0

爲什麼在客戶端發送的ACK中需要3次TCP握手,爲什麼不能在第三步開始發送數據?服務器一旦接收到數據就知道客戶端是否存活。TCP:爲什麼在客戶端通過3次握手發送的ACK中需要

+0

因爲SYN-ACK可能已經丟失了,當然,服務器也不希望綁定一個客戶端不知道的連接的套接字。可能不會*有任何數據。 – EJP

回答

1

沒有什麼東西禁止客戶端在包含ACK的段中包含數據。

但是,客戶端不應該延遲發送此ACK以等待應用程序發送數據,因爲它可能會影響服務器上的RTT估計。如果服務器沒有立即得到ACK,使用SYN-cookies的服務器可能會使用它們。

1

典型的套接字編程API將在「打開」方法中阻塞,直到它從主機接收到syn + ack爲止。通信層應在收到該消息後立即發送其重新確認,即使由於客戶端將處於「打開」方式,它將不會有任何數據要發送。

如果套接字API包含一個「openAndSend」方法,如果嘗試成功,它將嘗試打開一個套接字併發送一些數據,那麼只要從主機接收到syn + ack,就可以準備好數據傳輸。如果應用程序使用大量短暫的連接,這樣的事情可能是值得的,但我從來沒有使用過這樣的功能,也不知道它支持的程度。

相關問題