網絡插座(英語:Network socket;又譯網絡接套網絡介面網絡插槽)在電腦科學中是電腦網絡中行程間資料串流的端點。使用以網際協定Internet Protocol)為通訊基礎的網絡插座,稱為網際插座Internet socket)。因為網際協定的流行,現代絕大多數的網絡插座,都是屬於網際插座。

「網絡插座」的各地常用名稱
中國大陸套接字
臺灣插座、接套
港澳socket

socket是一種作業系統提供的行程間通訊機制。[1]

作業系統中,通常會為應用程式提供一組應用程式介面(API),稱為插座介面(英語:socket API)。應用程式可以通過插座介面,來使用網絡插座,以進行資料交換。最早的插座介面來自於4.2 BSD,因此現代常見的插座介面大多源自Berkeley接套(Berkeley sockets)標準。在插座介面中,以IP位址通訊埠組成插座地址socket address)。遠端的插座地址,以及本地的插座地址完成連線後,再加上使用的協定(protocol),這個五元組(five-element tuple),作為插座對(socket pairs),之後就可以彼此交換資料。例如,在同一台電腦上,TCP協定與UDP協定可以同時使用相同的port而互不干擾。 作業系統根據插座地址,可以決定應該將資料送達特定的行程線程。這就像是電話系統中,以電話號碼加上分機號碼,來決定通話對象一般。

中文名

編輯

中國大陸名

編輯

socket最初被翻譯為把socket譯為「媒介(字)」[2]。不久,ARPANET的socket就被翻譯為「套接字」,其理由是:[3]

由於每個主機系統都有各自命名行程的方法,而且常常是不相容的,因此,要在全網範圍內硬把行程名字統一起來是不現實的。所以,每個電腦網絡中都要引入一種起媒介作用的、全網一致的標準名字空間。這種標準名字,在ARPA網中稱作套接字,而在很多其他電腦網中稱作信口。更確切地說,行程之間的連接是通過套接字或信口構成的

定義

編輯

系統內部介面(內聯網),介面描述符(抽象介面描述符)和介面地址之間的差別其實很細微,日常編程用的時候幾乎不做區別。並且詳細的網絡介面有下面幾種特徵:

  • 本地介面地址,由本地ip地址和(包括TCP,UDP)埠號
  • 傳輸協定,例如TCP、UDP、raw IP協定

一個已經建立連接的介面雙方都有整數形式的介面描述符,用來唯一表示該介面。作業系統根據對方介面發過來的IP以及傳輸協定頭資訊來提取介面的地址資訊,並且將應用數據去除頭資訊之後提交給相應的應用程式。 在很多網絡協定、教科書以及本文中,介面指的是有一個獨一無二的介面號的實體。在一些其他的文章[來源請求]當中,介面被叫做本地介面地址,比如..."ip和埠的結合"。在一RFC147標準中,這個定義與1971的ARPA網有關,介面指的是一個32位元數字,其中偶數的是接收介面,奇數的是傳送介面,但是今天通訊已經可以實現雙向傳輸,在一個介面中,可以傳送的同時還可以接收。

在類UNIX系統和Windows系統,命令列工具netstat和ss可用以檢視當前系統的介面情況。

例子

編輯

這個例子是模擬Berkeley接套介面,我們通過80埠傳送`hello,world`到1.2.3.4的主機上。下方代碼演示了建立介面、連接遠端主機、傳送數據和關閉介面的過程。

Socket socket = getSocket(type = "TCP")
connect(socket, address = "1.2.3.4", port = "80")
send(socket, "Hello, world!")
close(socket)

類型

編輯

數據報接套(SOCK_DGRAM)

編輯

數據報接套是一種無連接套接字,使用用戶數據報協定(UDP)傳輸數據。每一個封包都單獨定址和路由。這導致了接收端接收到的數據可能是亂序的,有一些數據甚至可能會在傳輸過程中遺失。不過得益於數據報接套並不需要建立並維護一個穩定的連接,數據報接套所佔用的電腦和系統資源較小。

流接套(SOCK_STREAM)

編輯

連接導向式通訊接套,使用傳輸控制協定(TCP)、流控制傳輸協定(SCTP)或者數據擁塞控制協定(DCCP)傳輸數據。流接套提供可靠並且有序的數據傳輸服務。在互聯網上,流接套通常使用TCP實現,以便應用可以在任何使用TCP/IP協定的網絡上執行。

原始接套

編輯

原始接套是一種網絡接套。允許直接傳送和接受IP封包並且不需要任何傳輸層協定格式。原始接套主要用於一些協定的開發,可以進行比較底層的操作。

註釋

編輯
  1. ^ 1983年发布的4.2BSD就是如此定义socket (PDF). [2017-03-07]. (原始內容存檔 (PDF)於2017-03-08). 
  2. ^ (中科院)計算所電腦網組. 计算机网词汇译名讨论. 電腦動態: 75–79. 
  3. ^ 计算机网络软件简介. 電腦參考資料: 57–107. 

相關條目

編輯

外部連結

編輯