鹹魚筆記—Socket 通信

鹹魚筆記—Socket 通信

socket是在應用層和傳輸層之間的一個抽象層,socket本質是編程接口(API),它把TCP/IP層複雜的操作抽象爲幾個簡單的接口供應用層調用以實現進程在網絡中通信。TCP/IP只是一個協議棧,必須要具體實現,同時還要提供對外的操作接口(API),這就是Socket接口。通過Socket,我們才能使用TCP/IP協議。


我們先來看看網絡層級模型圖,這是構成網絡通信的基礎:
在這裏插入圖片描述
我們看看 TCP/IP 模型的傳輸層和應用層,傳輸層比較熟悉的概念是 TCP 和 UDP,UPD 協議基本就沒有對 IP 層的數據進行任何的處理了。而 TCP 協議還加入了更加複雜的傳輸控制,比如滑動的數據發送窗口(Slice Window),以及接收確認和重發機制,以達到數據的可靠傳送。應用層中網頁常用的則是 HTTP。
TCP 和 HTTP 兩者的關係:我們知道網絡通信是最基礎是依賴於 IP 和端口的,HTTP 一般情況下默認使用端口 80。

舉個簡單的例子:我們逛淘寶,瀏覽器會向淘寶網的網址(本質是IP)和端口發起請求,而淘寶網收到請求後響應,向我們手機返回相關網頁數據信息,實現了網頁交互的過程。而這裏就會引出一個多人連接的問題,很多人訪問淘寶網,實際上接收到網頁信息後就斷開連接,否則淘寶網的服務器是無法支撐這麼多人長時間的連接的,哪怕能支持,也非常佔資源。也就是應用層的HTTP 通過傳輸層進行數據通信時,TCP 會遇到同時爲多個應用程序進程提供併發服務的問題。多個 TCP連接或多個應用程序進程可能需要通過同一個 TCP 協議端口傳輸數據。爲了區別不同的應用程序進程和連接,許多計算機操作系統爲應用程序與TCP/IP 協議交互提供了套接字(Socket)接口。應用層可以和傳輸層通過 Socket
接口,區分來自不同應用程序進程或網絡連接的通信,實現數據傳輸的併發服務。

簡單來說,Socket 抽象層介於傳輸層和應用層之間,跟 TCP/IP 並沒有必然的聯繫。Socket 編程接口在設計的時候,就希望也能適應其他的網絡協議。
在這裏插入圖片描述
套接字(socket)是通信的基石,是支持 TCP/IP 協議的網絡通信的基本操作單元。它是網絡通信過程中端點的抽象表示,包含進行網絡通信必須的五種信息:連接使用的協議(通常是 TCP 或 UDP),本地主機的 IP 地址,本地進程的協議端口,遠地主機的 IP 地址,遠地進程的協議端口。
所以,socket 的出現只是可以更方便的使用 TCP/IP 協議棧而已,簡單理解就是其對 TCP/IP 進行了抽象,形成了幾個最基本的函數接口。比如 create,listen,accept,connect,read 和 write 等等。以下是通訊流程
在這裏插入圖片描述
建立 Socket 通信需要一個服務器端和一個客戶端
服務器端先初始化Socket,然後與端口綁定,對端口進行監聽,調用accept阻塞,等待客戶端連接。在這時如果有個客戶端初始化一個Socket,然後連接服務器(connect),如果連接成功,這時客戶端與服務器端的連接就建立了。
客戶端發送數據請求,服務器端接收請求並處理請求,然後把迴應數據發送給客戶端,客戶端讀取數據,最後關閉連接,一次交互結束。
參考資料:https://www.cnblogs.com/wangcq/p/3520400.html
micropython測試代碼

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章