socket是應用層與tcp/IP協議族通信的中間軟件抽象層,它是一組接口。在設計模式中,socket其實就是一個門面模式,它把複雜的TCP/IP協議族隐藏在socket接口後面,對用戶來說,一組簡單的接口就是全部,讓socket去組織數據,以符合指定的協議。
1、socket基本操作服務器端先初始化socket,然後與端口綁定(bind),對端口進行監聽(listen),調用accept阻塞,等待客戶端連接。在這時如果有個客戶端初始化一個socket,然後連接服務器(connect),如果連接成功,這時客戶端與服務器端的連接就建立了。客戶端發送數據請求,服務器端接收請求并處理請求,然後把回應數據發送給客戶端,客戶端讀取數據,最後關閉連接,這樣這一次交互就結束。如下圖所示
2、socket中TCP的三次握手建立連接詳解
我們知道tcp建立連接要進行“三次握手”,即交換三個分組。大緻流程如下:
但是這個三次握手發生在socket的那幾個函數中呢?請看下圖:
從圖中可以看出,當客戶端調用connect時,觸發了連接請求,向服務器發送了SYN J包,這時connect進入阻塞狀态;服務器監聽到連接請求,即收到SYN J包,調用accept函數接收請求向客戶端發送SYN K ,ACK J 1,這時accept進入阻塞狀态;客戶端收到服務器的SYN K ,ACK J 1之後,這時connect返回,并對SYN K進行确認;服務器收到ACK K 1時,accept返回,至此三次握手完畢,連接建立。
總結:客戶端的connect在三次握手的第二個次返回,而服務器端的accept在三次握手的第三次返回。
3、socket中TCP的四次握手釋放連接詳解上面介紹了socket中TCP的三次握手建立過程,及其涉及的socket函數。現在我們介紹socket中的四次握手釋放連接的過程,請看下圖:
圖示過程如下:
4.1、采用socket
基本操作和c的socket接口一樣,可以設置很多socket選項
4.2、采用stream
php自帶的接口,不需要安裝任何擴展,接口使用非常簡單
4.3、兩者的異同
更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!