Socket的理解

網絡的本質

理解Socket前,先談一個概念。什么是網絡?

沒有網絡之前,每個人的設備(電腦等)都是彼此孤立的。人類之間通過電子設備進行網絡交流,其實就是不斷地將信息以二進制數據的形式發送到其他設備上。這些信息是通過光纖傳輸的,光纖是一種客觀存在的材料,通過它可以實現高速數據傳輸。光纖內部的材料可以通過電信號來激發,使得光在光纖內部傳播,從而實現信息傳輸。

所以筆者認為網絡的本質就是連接傳輸數據

網絡協議

網絡協議是計算機網絡中進行數據交換而建立的規則、標準或約定的集合。你想要在網絡環境中進行通信,那么網絡協議就是你必須遵守的規則。

規則是什么,你一定聽說過OSI模型,TCP/IP協議。

OSI模型是國際組織定義的一套理論基礎,主要用于定義網絡通信的規則。

TCP/IP協議是基于這套理論基礎真正實現的通信規則。

總結:連接和傳輸數據需要統一標準的協議和規則

Socket

Socket英文中的意思是“插座”,中文翻譯“套接字”。可能最開始西方人覺得:電器 + Socket = 通電,類比電腦 + Socket = 通信。

中國人翻譯,套接字也是是類比水管的套接筒吧。關鍵還是連接和信息交換。

一開始,我也是按照什么這么理解的,但是腦海中對這個抽象概念沒法實例化。那么我們先放下這些類比,看看Socket到底有哪些東西吧。

首先明確一點,套接字是操作系統提供的。window和linux上的實現是不一樣的,但是規則是一樣的。你可以理解Socket是網絡協議的具體實現。不同的語言都會有Socket類,他們都是對底層socket的封裝。

網絡編程中接收連接請求(Server)的套接字創建過程:

  • 調用socket函數創建套接字。

    這一步,不管是linux還是window,或者不同語言的封裝,創建的時候,都會傳入一些參數。比如,你是傳遞IPV4還是IPV4,Stream還是Dgram,是TCP還是UDP。看見沒有,其實這一步,就是對網絡協議的具體實現和描述。

    定義了協議和規則,你就只能在規則類選取一種樣式。

  • 調用bind函數分配地址和端口號。

    通信,和寫信一樣都需要地址。而具體的軟件進程間的通信,是需要IP +端口。

  • 調用listen函數轉為可接收請求狀態。

    調用listen函數后,服務器意味著可以接受來自其他設備的請求了。

  • 調用accept函數接收連接請求。

    這一步就相當于TCP三次握手的第二次,好的我已經和你建立連接了,我們可以通信了。

網絡中請求連接(Client)的套接字創建過程。

  • 創建套接字
  • 調用connect發送請求。

Socket也還有其他函數closewriteread。這里我就不詳細介紹了。可以參考這篇文章:超詳細的Socket通信原理和實例講解 - 知乎 (zhihu.com)

總而言之,Socket就是一個由操作系統提供的一個可以進行連接和傳輸數據的工具。現在再看叫插座還是套接字,沒什么意義,本質就是工具。

歡迎指正!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。