計算機網絡Socket編程概述

套接字是計算機網絡編程最基本的技術之一。 套接字允許網絡軟件應用程序使用內置於網絡硬件和操作系統中的標準機制進行通信。

儘管這聽起來像是互聯網軟件開發的另一個特徵,但套接字技術早在Web之前就已存在。 而且,當今許多最流行的網絡軟件應用都依賴於套接字。

什麼套接字可以為您的網絡做

套接字表示兩個軟件之間的單個連接(所謂的點對點連接)。 兩個以上的軟件可以使用多個套接字與客戶端/服務器或分佈式系統進行通信。 例如,許多Web瀏覽器可以通過服務器上的一組套接字同時與單個Web服務器進行通信。

基於套接字的軟件通常在網絡上的兩台獨立計算機上運行,但套接字也可用於在單台計算機上進行本地通信( 進程間通信)。 套接字是雙向的 ,這意味著連接的任何一方都能夠發送和接收數據。 有時,啟動通信的一個應用程序被稱為“客戶端”,而另一個應用程序被稱為“服務器”,但是這種術語會導致對等網絡混亂,應該避免這種情況。

套接字API和庫

在因特網上存在幾個實現標準應用程序編程接口(API)的庫。 第一個主流軟件包 - 伯克利套接字庫在UNIX系統上仍然廣泛使用。 另一個非常常見的API是用於Microsoft操作系統的Windows套接字(WinSock)庫。 相對於其他計算機技術,套接字API已經相當成熟:WinSock自從1993年以來一直在使用,自1982年以來一直在使用Berkeley套接字。

套接字API相對較小且簡單。 許多函數與文件輸入/輸出例程(如 read() write() close() 。 實際的函數調用依賴於選擇的編程語言和套接字庫。

套接字接口類型

套接字接口可以分為三類:

  • 套接字是最常見的類型,它要求通信雙方首先建立一個套接字連接,然後通過該連接傳遞的任何數據將保證以它發送的相同順序到達 - 所謂的面向連接的編程模型。
  • 數據報套接字提供“無連接”語義。 對於數據報,連接是隱含的而不是顯式的,就像流一樣。 任何一方只需根據需要發送數據報,然後等待另一方回應; 消息可能會在傳輸過程中丟失或無法接收,但這是應用程序的責任,而不是插座來處理這些問題。 與使用流套接字相比,實現數據報套接字可以提供一些應用程序的性能提升和額外的靈活性,這證明了它們在某些情況下的使用。
  • 第三種套接字 - 原始套接字 - 繞過了對TCPUDP等標準協議的庫內置支持。 原始套接字用於定制低級協議開發。

Socket支持網絡協議

現代網絡套接字通常與Internet協議(IP,TCP和UDP)結合使用。 為互聯網協議實現套接字的庫使用TCP來處理數據流,使用UDP來處理數據報,使用IP來處理原始套接字。

要通過Internet進行通信,IP套接字庫使用IP地址來識別特定的計算機。 互聯網的許多部分都使用命名服務,以便用戶和套接字編程人員可以通過名稱( 例如 “thiscomputer.wireless.about.com”)而不是地址( 例如 208.185.127.40)與計算機一起工作。 流和數據報套接字也使用IP 端口號來區分多個應用程序。 例如,Internet上的Web瀏覽器知道將端口80用作與Web服務器的套接字通信的默認值。