tft每日頭條

 > 生活

 > phpsocket連接有幾種

phpsocket連接有幾種

生活 更新时间:2024-09-30 23:13:39

socket是應用層與tcp/IP協議族通信的中間軟件抽象層,它是一組接口。在設計模式中,socket其實就是一個門面模式,它把複雜的TCP/IP協議族隐藏在socket接口後面,對用戶來說,一組簡單的接口就是全部,讓socket去組織數據,以符合指定的協議。

1、socket基本操作

服務器端先初始化socket,然後與端口綁定(bind),對端口進行監聽(listen),調用accept阻塞,等待客戶端連接。在這時如果有個客戶端初始化一個socket,然後連接服務器(connect),如果連接成功,這時客戶端與服務器端的連接就建立了。客戶端發送數據請求,服務器端接收請求并處理請求,然後把回應數據發送給客戶端,客戶端讀取數據,最後關閉連接,這樣這一次交互就結束。如下圖所示

phpsocket連接有幾種(61phpsocket通信說明)1

2、socket中TCP的三次握手建立連接詳解

我們知道tcp建立連接要進行“三次握手”,即交換三個分組。大緻流程如下:

  • 客戶端向服務器發送一個SYN J
  • 服務器向客戶端響應一個SYN K,并對SYN J進行确認ACK J 1
  • 客戶端再想服務器發一個确認ACK K 1

但是這個三次握手發生在socket的那幾個函數中呢?請看下圖:

phpsocket連接有幾種(61phpsocket通信說明)2

從圖中可以看出,當客戶端調用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中的四次握手釋放連接的過程,請看下圖:

phpsocket連接有幾種(61phpsocket通信說明)3

圖示過程如下:

  • 某個應用進程首先調用close主動關閉連接,這時TCP發送一個FIN M;
  • 另一端接收到FIN M之後,執行被動關閉,對這個FIN進行确認。它的接收也作為文件結束符傳遞給應用進程,因為FIN的接收意味着應用進程在相應的連接上再也接收不到額外數據;
  • 一段時間之後,接收到文件結束符的應用進程調用close關閉它的socket。這導緻它的TCP也發送一個FIN N;
  • 接收到這個FIN的源發送端TCP對它進行确認。
4、php如何操作socket

4.1、采用socket

基本操作和c的socket接口一樣,可以設置很多socket選項

4.2、采用stream

php自帶的接口,不需要安裝任何擴展,接口使用非常簡單

4.3、兩者的異同

  • socket更偏向于底層,操作起來相對于繁瑣
  • stream相對簡單,由于是stream類型,因此可用stream相關的函數操作,fread、fwrite等,也可使用stream相關的高級特性,過濾器、streamWrapper、ssl加密等

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved