傳輸層

通訊端(socket)

把通訊端想成程式與網路之間的門口——位元組進出的地方。就像牆上的插座是你不必管發電廠如何運作就能插上電器的標準出口,網路通訊端就是程式不必管路由器與連結如何運作就能插上去收發資料的標準出口。對程式而言,它通常看起來像一個你可以寫入位元組、也可以讀出位元組的東西。

更精確地說,通訊端是一段通訊的端點,對網路而言以一對(IP 位址、連接埠號)來辨識,並由作業系統管理。傳輸層把通訊端當成解多工的目標:當一個區段到達,作業系統看定址欄位,決定哪個通訊端——也就是哪個程式——該收到它。一個 TCP 通訊端代表一條可靠的位元組串流連線,以完整四元組(來源 IP 與埠、目的 IP 與埠)作為鍵;一個 UDP 通訊端只以它的本地(IP、埠)為鍵,可以和許多對端交換資料報。

為什麼重要:通訊端是這個領域乾淨觀念與真實程式相遇的邊界。它上面的一切(應用程式的訊息)與下面的一切(多工、連接埠、可靠性)都透過它連接。注意本領域在意的區別:這裡的通訊端指抽象的傳輸端點,也就是被解多工送達的對象。建立、繫結、使用通訊端的詳細程式介面——Berkeley 通訊端 API——是另一個主題;這裡我們在意的是「通訊端是什麼」,而不是操作它所用的函式呼叫。

一台網頁伺服器建立一個監聽用的 TCP 通訊端,繫結在(它的 IP、port 443)。每有一個用戶端連進來,作業系統就以該用戶端的完整四元組為鍵,產生一個獨立的已連線通訊端,因此一千名訪客就是一千個共用同一個埠的獨立通訊端。

一個監聽通訊端、許多已連線通訊端——全在 port 443 上。

別把傳輸層的通訊端(一個定址端點)和程式設計 API 混為一談。此外,日常口語中的「socket」常指整對(IP、埠);嚴格說,那對配對是用來辨識通訊端的,並非另一種意思。

又称
network socket插座通訊端點