設計TCP服務器的規則

設計TCP服務器,採用如下規則:

1.正等待連接請求的一端有一個固定長度的連接隊列,該隊列中的連接已被TCP接受(完成三次握手),但還沒有被應用層接受。注意:TCP接受一個連接是將其放入這個隊列,而應用層接受連接是將其從該隊列中移出。也就是使用***.accept()函數來阻塞等待客戶的請求

2.應用層指明該隊列的最大長度,這個值被稱爲“積壓值(backlog)”,範圍爲0~5。也就是使用***.listen(5)函數來指定的隊列長度。通常取值5

3.當一個連接請求到達時,TCP使用一個算法,根據當前連接隊列中的連接數來確定是否接收這個連接。這不同於積壓值,積壓值說明的是TCP監聽的端點已被TCP接受而等待應用層接受的最大連接數。這個積壓值對系統所允許的最大連接數,或者併發服務器所能併發處理的客戶數,並無影響

4.如果對於新的連接請求,該TCP監聽的端點的連接隊列中還有空間,TCP模塊將對SYN進行確認並完成連接的建立。但應用層只有在三次握手中的第三個報文段收到後纔會知道這個新連接。另外,當客戶進程的主動打開成功但服務器的應用層還不知道這個新連接時,它可能會認爲服務器進程已經準備好接受數據了。此後,如果客戶程序發送數據,務器的TCP模塊會將接收的數據放入緩存隊列

5.如果對於新的連接請求,連接隊列中已沒有空間,TCP將不理會收到的SYN,也不發回任何報文段(包括RST),這是一個軟錯誤,而不是一個硬錯誤。如果應用層不能及時接受.listen(5)中的連接,達到積壓值(5),客戶的主動打開最終也將超時。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章