1. 程式人生 > >趣談網路協議(九)套接字Socket

趣談網路協議(九)套接字Socket

基於TCP協議的Socket程式函式呼叫過程

(1)TCP的伺服器要先監聽一個埠,一般是先呼叫bind函式,給這個Socket賦予一個IP地址和埠

(2)為什麼要有埠,當一個網路包來的時候,核心要通過TCP頭裡面的這個埠,來找到你這個應用程式,把包給你

(3)為什麼要有IP地址呢?一臺機器會有多個網絡卡,也就會有多個IP地址,你可以選擇監聽所有網絡卡,也可以選擇監聽一個網絡卡,這樣只有發給這個網絡卡的包,才會給你

(4)在核心中,為每個Socket維護兩個佇列。一個是已經建立了連線的佇列,這時候連線三次握手已經完畢,已經處於established狀態;一個是還沒有完全建立連線的佇列,這個時候三次握手還沒完成,處於sync_rcvd的狀態

(5)接下來,伺服器端呼叫accept函式,拿出一個已經完成的連線進行處理。如果還沒有完成,就要等著

(6)在伺服器端等待的時候,客戶端可以通過connect函式發起連線。先在引數中指明要連線的IP地址和埠號,然後開始發起三次握手。核心會給客戶端分配一個臨時的埠。一旦握手成功,伺服器的accept就會返回另一個Socket

(7)連線建立成功之後,雙方開始通過read和write函式來讀寫資料,就像往一個檔案流裡寫東西一樣

(8)基於TCP協議的Socket程式函式呼叫過程如下圖
在這裡插入圖片描述


基於UDP協議的Socket程式函式呼叫過程

(1)下圖是基於UDP協議的Socket函式呼叫過程
在這裡插入圖片描述