跳至內容

網路插座

本頁使用了標題或全文手工轉換
維基百科,自由的百科全書
「網路插座」的各地常用名稱
中國大陸套接字
臺灣插座、接套
港澳socket

網路插座(英語:Network socket;又譯網絡套接字網絡接口網路插槽)在計算機科學中是電腦網路中行程間資料串流的端點。使用以網際協議Internet Protocol)為通訊基礎的網路插座,稱為網際插座Internet 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. 

相關條目

[編輯]

外部連結

[編輯]