網路插座
網路插座(英語: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數據包並且不需要任何傳輸層協議格式。原始套接字主要用於一些協議的開發,可以進行比較底層的操作。
註釋
編輯- ^ 1983年发布的4.2BSD就是如此定义socket (PDF). [2017-03-07]. (原始內容存檔 (PDF)於2017-03-08).
- ^ (中科院)計算所計算機網組. 计算机网词汇译名讨论. 電子計算機動態: 75–79.
- ^ 计算机网络软件简介. 電子計算機參考資料: 57–107.
相關條目
編輯外部連結
編輯- How sockets work - IBM information center