複製鏈接
請複製以下鏈接發送給好友

套接字

鎖定
所謂套接字(Socket),就是對網絡中不同主機上的應用進程之間進行雙向通信的端點的抽象。一個套接字就是網絡上進程通信的一端,提供了應用層進程利用網絡協議交換數據的機制。從所處的地位來講,套接字上聯應用進程,下聯網絡協議棧,是應用程序通過網絡協議進行通信的接口,是應用程序與網絡協議棧進行交互的接口 [1] 
中文名
套接字 [1] 
外文名
socket [1] 
實    質
兩個網絡各自通信連接中的端點 [2] 
類    型
流式套接字、數據報套接字和原始套接字 [3] 
作    用
完成兩個應用程序之間的數據傳輸 [3] 
學    科
計算機網絡 [1] 

套接字簡介

套接字是通信的基石,是支持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] 

套接字工作流程

要通過互聯網進行通信,至少需要一對套接字,其中一個運行於客户端,稱之為 Client Socket,另一個運行於服務器端,稱之為 Server Socket [3] 
根據連接啓動的方式以及本地套接字要連接的目標,套接字之間的連接過程可以分為三個步驟 [3] 
(1)服務器監聽。
(2)客户端請求。
(3)連接確認 [3] 
1.服務器監聽
所謂服務器監聽,是指服務器端套接字並不定位具體的客户端套接字,而是處於等待連接的狀態,實時監控網絡狀態 [3] 
2.客户端請求
所謂客户端請求,是指由客户端的套接字提出連接請求,要連接的目標是服務器端的套接字。為此,客户端的套接字必須首先描述它要連接的服務器的套接字,指出服務器端套接字的地址和端口號,然後就向服務器端接字提出連接請求 [3] 
3.連接確認
所謂連接確認,是指當服務器端套接字監聽到或者説接收到客户端套接字的連接請求,就會響應客户端套接字的請求,建立一個新的線程,並把服務器端套接字的描述發送給客户端。一旦客户端確認了此描述,連接就建立好了。而服務器端套接字繼續處於監聽狀態,接收其他客户端套接字的連接請求 [3] 

套接字主要特點

根據套接字的不同類型,可以將套接字調用分為面向連接服務和無連接服務 [5] 
面向連接服務的主要特點如下:
(1)數據傳輸過程必須經過建立連接、維護連接和釋放連接3個階段 [5] 
(2)在傳輸過程中,各分組不需要攜帶目的主機的地址 [5] 
(3)可靠性好,但由於協議複雜,通信效率不高 [5] 
面向無連接服務的主要特點如下:
(1)不需要連接的各個階段 [5] 
(2)每個分組都攜帶完整的目的主機地址,在系統中獨立傳送 [5] 
(3)由於沒有順序控制,所以接收方的分組可能出現亂序、重複和丟失現象 [5] 
(4)通信效率高,但可靠性不能確保 [5] 

套接字套接字的引入

為了更方便地開發網絡應用程序,美國伯克利大學在UNIX上推出了一種應用程序訪問通信協議的操作系統調用接字(Socket)。 Socket的出現,使得程序員可以很方便地訪問 TCPIP,從而開發各種網絡應用程序。後來套接字被引進到 Windows等操作系統,成為開發網絡應用程序的有效工具 [3] 
套接字存在於通信區域,通信區域也被稱為地址族,主要用於將通過套接字通信的進程的公有特性綜合在一起。套接字通常只與同一區域的套接字交換數據。Windows Socket只支持一個通信區域——AF_INET國際網區域,使用網際協議族通信的進程使用該域 [3] 
參考資料
  • 1.    王雷,TCP/IP網絡編程基礎教程,北京理工大學出版社,2017.02,第4頁
  • 2.    周怡,孟實,林雷主編,計算機網絡基礎實驗指導,浙江工商大學出版社,2018.09,第150頁
  • 3.    創客誠品,劉慧欣,孟令一編著,C語言從入門到精通 全新精華版,北京希望電子出版社,2017.10,第377頁~第378頁
  • 4.    潘偉編著,計算機網絡 理論與實驗,廈門大學出版社,2013.12,第145頁
  • 5.    張曉明編著,計算機網絡編程技術,中國鐵道出版社,2009.10,第15頁~第16頁