Networking
什麼是插座?
有人可以向我解釋一下什麼是套接字嗎?我在 SSL 等上下文中的許多首字母縮略詞中看到它。
還有,為什麼叫socket?純粹是因為這是他們發明的名字嗎?或者這是他們想出的第一個名字?
套接字只是通信的邏輯端點。它們存在於傳輸層。你可以在一個套接字上發送和接收東西,你可以綁定和監聽一個套接字。套接字特定於協議、機器和埠,並在數據包的標頭中被定址。
Beej 的網路程式和程序間通信指南都提供了有關如何使用套接字的良好資訊,甚至回答了這個確切的問題。
套接字是表示網路連接的偽文件。一旦創建了一個套接字(辨識其他主機和埠),對該套接字的寫入將轉換為發送出去的網路數據包,並且可以從該套接字讀取從網路接收到的數據。
套接字類似於管道。對於使用它們的程序來說,兩者看起來都像是文件。兩者都促進程序間通信。管道與本地程序通信;套接字與遠端程序通信。正如您所提到的,套接字還提供雙向通信(就像一對正確連接的管道一樣)。
最後,單台機器上的程序使用標準網路協議(如 TCP)進行通信是很常見的;一直到網路硬體(如果有的話!),計算校驗和等,只是最終回到同一主機上,這將是一種浪費。Unix 域套接字處理這種情況。它們繞過網路連接同一主機上的程序而不是遠端程序。
正如tripleee 所提到的,在BSD 的歷史程序中,管道比套接字更早被引入,並且一旦套接字存在就使用套接字重新實現。相同的參考資料The Design and Implementation of the FreeBSD Operating System提到管道隨後出於性能原因恢復為非套接字實現。