爲什麼在客戶端發送的ACK中需要3次TCP握手,爲什麼不能在第三步開始發送數據?服務器一旦接收到數據就知道客戶端是否存活。TCP:爲什麼在客戶端通過3次握手發送的ACK中需要
0
A
回答
1
沒有什麼東西禁止客戶端在包含ACK的段中包含數據。
但是,客戶端不應該延遲發送此ACK以等待應用程序發送數據,因爲它可能會影響服務器上的RTT估計。如果服務器沒有立即得到ACK,使用SYN-cookies的服務器可能會使用它們。
1
典型的套接字編程API將在「打開」方法中阻塞,直到它從主機接收到syn + ack爲止。通信層應在收到該消息後立即發送其重新確認,即使由於客戶端將處於「打開」方式,它將不會有任何數據要發送。
如果套接字API包含一個「openAndSend」方法,如果嘗試成功,它將嘗試打開一個套接字併發送一些數據,那麼只要從主機接收到syn + ack,就可以準備好數據傳輸。如果應用程序使用大量短暫的連接,這樣的事情可能是值得的,但我從來沒有使用過這樣的功能,也不知道它支持的程度。
相關問題
- 1. Websocket客戶端在握手後立即發送[FIN,ACK]
- 2. 爲什麼客戶端在TCP握手期間發送RST數據包?
- 3. 爲什麼客戶端TCP有時不發送ACK,導致重傳?
- 4. 爲什麼在SSL握手期間java不發送客戶端證書?
- 5. 爲什麼tcp連接終止需要4路握手?
- 6. 爲什麼通過LocalChannel連接的客戶端需要EventLoopGroup?
- 7. 客戶端發送RST到FIN服務器後,在握手過程中收到ACK
- 8. TCP三次握手
- 9. TCP四次握手
- 10. 爲什麼在從客戶端收到SYN後沒有切斷髮送SYN/ACK?
- 11. Java客戶端SSL握手
- 12. 客戶端爲什麼不發送FIN?
- 13. 爲什麼客戶端應該通過websocket發送,而不是由ajax發送?
- 14. TCP握手過程
- 15. 通過TCP客戶端向CMD發送CMD
- 16. Socket.IO客戶端無法發送握手參數
- 17. 如果三次握手的最終ACK被丟棄會發生什麼?
- 18. TCP三次握手問題
- 19. TCP三次握手失敗
- 20. 爲什麼系統在嘗試時發送RST標誌 - TCP在python中3路握手
- 21. 在TCP後同等地位3_way握手TCP客戶端和服務器
- 22. TCP客戶端無意發送
- 23. Java TCP客戶端發送被阻止?
- 24. 通過Axis RPC客戶端發送CDATA
- 25. 客戶端需要綁定什麼()?
- 26. 從客戶端發送文件到客戶端通過HTTP
- 27. 我們需要郵件客戶端通過ActionMailer發送通知郵件
- 28. C#WebSocket - 在握手過程中客戶端沒有響應
- 29. 無法在android握手過程中附加客戶端證書
- 30. 發送通知客戶端
因爲SYN-ACK可能已經丟失了,當然,服務器也不希望綁定一個客戶端不知道的連接的套接字。可能不會*有任何數據。 – EJP