-
套接字
鎖定
套接字簡介
套接字是通信的基石,是支持TCP/IP協議的網絡通信的基本操作單元。可以將套接字看作不同主機間的進程進行雙間通信的端點,它構成了單個主機內及整個網絡間的編程界面。套接字存在於通信域中,通信域是為了處理一般的線程通過套接字通信而引進的一種抽象概念。套接字通常和同一個域中的套接字交換數據(數據交換也可能穿越域的界限,但這時一定要執行某種解釋程序),各種進程使用這個相同的域互相之間用Internet協議簇來進行通信
[3]
。
Socket(套接字)可以看成是兩個網絡應用程序進行通信時,各自通信連接中的端點,這是一個邏輯上的概念。它是網絡環境中進程間通信的API(應用程序編程接口),也是可以被命名和尋址的通信端點,使用中的每一個套接字都有其類型和一個與之相連進程。通信時其中一個網絡應用程序將要傳輸的一段信息寫入它所在主機的 Socket中,該 Socket通過與網絡接口卡(NIC)相連的傳輸介質將這段信息送到另外一台主機的 Socket中,使對方能夠接收到這段信息。 Socket是由IP地址和端口結合的,提供嚮應用層進程傳送數據包的機制
[2]
。
套接字表示方法
套接字Socket=(IP地址:端口號),套接字的表示方法是點分十進制的lP地址後面寫上端口號,中間用冒號或逗號隔開。每一個傳輸層連接唯一地被通信兩端的兩個端點(即兩個套接字)所確定。例如:如果IP地址是210.37.145.1,而端口號是23,那麼得到套接字就是(210.37.145.1:23)
[4]
。
套接字主要類型
1.流套接字(SOCK_STREAM)
流套接字用於提供面向連接、可靠的數據傳輸服務。該服務將保證數據能夠實現無差錯、無重複送,並按順序接收。流套接字之所以能夠實現可靠的數據服務,原因在於其使用了傳輸控制協議,即TCP(The Transmission Control Protocol)協議
[3]
。
2.數據報套接字(SOCK_DGRAM)
數據報套接字提供一種無連接的服務。該服務並不能保證數據傳輸的可靠性,數據有可能在傳輸過程中丟失或出現數據重複,且無法保證順序地接收到數據。數據報套接字使用UDP( User DatagramProtocol)協議進行數據的傳輸。由於數據報套接字不能保證數據傳輸的可靠性,對於有可能出現的數據丟失情況,需要在程序中做相應的處理
[3]
。
3.原始套接字(SOCK_RAW)
原始套接字與標準套接字(標準套接字指的是前面介紹的流套接字和數據報套接字)的區別在於:原始套接字可以讀寫內核沒有處理的IP數據包,而流套接字只能讀取TCP協議的數據,數據報套接字只能讀取UDP協議的數據。因此,如果要訪問其他協議發送的數據必須使用原始套接
[3]
。
套接字工作流程
(1)服務器監聽。
(2)客户端請求。
1.服務器監聽
2.客户端請求
所謂客户端請求,是指由客户端的套接字提出連接請求,要連接的目標是服務器端的套接字。為此,客户端的套接字必須首先描述它要連接的服務器的套接字,指出服務器端套接字的地址和端口號,然後就向服務器端接字提出連接請求
[3]
。
3.連接確認
所謂連接確認,是指當服務器端套接字監聽到或者説接收到客户端套接字的連接請求,就會響應客户端套接字的請求,建立一個新的線程,並把服務器端套接字的描述發送給客户端。一旦客户端確認了此描述,連接就建立好了。而服務器端套接字繼續處於監聽狀態,接收其他客户端套接字的連接請求
[3]
。
套接字主要特點
面向連接服務的主要特點如下:
面向無連接服務的主要特點如下:
套接字套接字的引入
為了更方便地開發網絡應用程序,美國伯克利大學在UNIX上推出了一種應用程序訪問通信協議的操作系統調用接字(Socket)。 Socket的出現,使得程序員可以很方便地訪問 TCPIP,從而開發各種網絡應用程序。後來套接字被引進到 Windows等操作系統,成為開發網絡應用程序的有效工具
[3]
。