listen函數與TCP連接建立過程的關係

listen函數與TCP連接建立過程的關係

 


TCP服務端程序創建過程:建立監聽socket,通過bind綁定到服務地址和端口後,調用listen開始監聽服務端口。這時在操作系統內核會建立SYN隊列(未完成握手隊列)和ACCEPT隊列(已完成握手隊列),隊列長度由listen函數backlog參數指定。客戶端調用connect向服務端發起建立TCP連接,服務端處理步驟如下:

1) 客戶端發SYN包到服務端,內核把這一信息放入SYN隊列,同時回一個SYN+ACK包給客戶端,如圖1.1~1.3所示。

2) 客戶端發起服務端的SYN應答ACK包,內核會把連接信息從SYN隊列取出來插入到ACCEPT隊列,如圖2.1~2.3所示。

3) 服務端調用accept接受連接,其實就是從內核ACCEPT隊列中取出已經建立成功的連接,拷貝到用戶空間,並創建一個

新的socket

 

發佈了20 篇原創文章 · 獲贊 20 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章