關於 TCP 並發串連的幾個思考題與實驗

來源:互聯網
上載者:User

前幾天我在新浪微博上出了兩道有關 TCP 的思考題,引發了一場討論 http://weibo.com/1701018393/eCuxDrta0Nn 。

第一道初級題目是:

有一台機器,它有 一個 IP,上面運行了一個 TCP 服務程式,程式只偵聽一個連接埠,問:從理論上講(只考慮 TCP/IP 這 一層面,不考慮IPv6)這個服務程式可以支援多少並發 TCP 串連?答 65536 上下的直接刷掉。

具體來說,這個問題等價於:有一個 TCP 服務程式的地址是 1.2.3.4:8765,問它從理論上能 接受多少個並發串連?    

第二道進階題目是:

一台被測機器 A,功能同上 ,同一交換器上還接有一台機器 B,如果允許 B 的程式直接收發乙太網路 frame,問:讓 A 承擔 10 萬 個並發 TCP 串連需要用多少 B 的資源?100萬個呢?

從討論的結果看,很多人做出了第一道題 ,而第二道題幾乎無人問津。

這裡先不公布答案(第一題答案見文末),讓我們繼續思考一個 本質的問題:一個 TCP 串連要佔用多少系統資源。

在現在的 Linux 作業系統上,如果用 socket()/connect() 或 accept() 來建立 TCP 串連,那麼每個串連至少要佔用一個檔案描述符(file descriptor)。為什麼說“至少”?因為檔案描述符可以複製,比如 dup();也可以被繼承,比如 fork();這樣可能出現系統裡邊同一個 TCP 串連有多個檔案描述符與之對應。據此,很多人給出的第 一題答案是:並發串連數受限於系統能同時開啟的檔案數目的最大值。這個答案在實踐中是正確的,卻 不符合原題意。

如果拋開作業系統層面,只考慮 TCP/IP 層面,建立一個 TCP 串連有哪些開銷 ?理論上最小的開銷是多少?考慮兩個情境:

1. 假設有一個 TCP 服務程式,向這個程式成功 發起串連需要做哪些事情?換句話說,如何才能讓這個 TCP 服務程式認為有客戶串連到了它(讓它的 accept() 調用正常返回)?

2. 假設有一個 TCP 用戶端程式,讓這個程式成功建立到伺服器的 串連需要做哪些事情?換句話說,如何才能讓這個 TCP 用戶端程式認為它自己已經串連到伺服器了( 讓它的 connect() 調用正常返回)?

以上這兩個問題問的不是如何編程,如何調用 Sockets API,而是問如何讓作業系統的 TCP/IP 協議棧認為任務已經成功完成,串連已經成功建立。

學 過 TCP/IP 協議,理解三路握手的同學明白,TCP 串連是虛擬串連,不是電路串連,維持 TCP 串連 理論上不佔用網路資源(會佔用兩頭程式的系統資源)。只要串連的雙方認為 TCP 串連存在,並且可 以互相發送 IP packet,那麼 TCP 串連就一直存在。

對於問題 1,向一個 TCP 服務程式發起 一個串連,用戶端(為明白起見,以下稱為 faketcp 用戶端)只需要做三件事情(三路握手):

1a. 向 TCP 服務程式發一個 IP packet,包含 SYN 的 TCP segment

1b. 等待對方返 回一個包含 SYN 和 ACK 的 TCP segment

1c. 向對方發送一個包含 ACK 的 segment

在 做完這三件事情之後,TCP 伺服器程式會認為串連已建立。而做這三件事情並不佔用用戶端的資源(? ),如果faketcp 用戶端程式可以繞開作業系統的 TCP/IP 協議棧,自己直接發送並接收 IP packet 或 Ethernet frame 的話。換句話說,faketcp 用戶端可以一直重複做這三件事件,每次用一個不同的 IP:PORT,在服務端建立不計其數的 TCP 串連,而 faketcp 用戶端自己毫髮無損。很快我們將看到如 何用程式來實現這一點。

對於問題 2,為了讓一個 TCP 用戶端程式認為串連已建立,faketcp 服務端只需要做兩件事情:

2a. 等待用戶端發來的 SYN TCP segment

2b. 發送一個包含 SYN 和 ACK 的 TCP segment

2c. 忽視對方發來的包含 ACK 的 segment

在做完這兩件事 情(收一個 SYN、發一個 SYN+ACK)之後,TCP 用戶端程式會認為串連已建立。而做這三件事情並不佔 用 faketcp 服務端的資源(?)換句話說,faketcp 服務端可以一直重複做這兩件事件,接受不計其 數的 TCP 串連,而 faketcp 服務端自己毫髮無損。很快我們將看到如何用程式來實現這一點。

基於對以上兩個問題的分析,說明單獨談論“TCP 並發串連數”是沒有意義的,因為串連數基 本上是要多少有多少。更有意義的效能指標或許是:“每秒鐘收發多少條訊息”、“每秒鐘收發多少字 節的資料”、“支援多少個活動的並發客戶”等等。

相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。