文章分享至我的個人技術部落格: https://cainluo.github.io/14986613643920.html
Socket的解釋
Socket
翻譯過來中文稱為套接字
, 這裡我找到了一段比較官方的解釋Socket
是什麼東西:
Socket
是通訊的基石,是支援TCP/IP
協議的網路通訊的基本操作單元,包含進行網路通訊必須的五種資訊:連線使用的協議
,本地主機的IP地址
,本地程式的協議埠
,遠地主機的IP地址
,遠地程式的協議埠
。
在實際當中, 肯定是不止一個TCP/IP
或者是一個應用程式程式在傳輸資料, 為了可以區分開來, 系統提供了一套API
, 方便TCP/IP
與應用程式互動, 一般把這個稱為Socket API
.
醬紫應用層可以和傳輸層通過這個Socket API
, 區分來自不同的應用程式程式或者是網路通訊, 使得資料可以併發傳輸.
Socket的C/S端
Socket
的使用其實也沒有我們想象中那麼難, 只是這裡需要有一個前提條件, 因為建立Socket
通訊是至少需要一對套接字
, 其中一個是執行在我們的客戶端上, 稱為Client Socket
, 還有一個是執行在伺服器上, 稱為Service Socket
.
Socket
之間的連線過程分為三個過程:
- 伺服器監聽
- 客戶端請求
- 連線確認
Socket
同時支援TCP
和UDP
兩種傳輸協議, 啥意思呢?
當Socket
使用TCP
協議通訊的時候, Socket
就是一個TCP
的連線, 那麼如果Socket
使用的是UDP
協議通訊, 那麼這時候的Socket
就是UDP
連線.
如果要有圖的話, 大概就這樣了:
網路的協議
既然降到Socket
, 那麼就要說說網路裡面的協議, 這裡就要普及一下網路裡面的到底都有啥, 首先我們要知道, 在網路裡面一共有七層協議
.
從上往下分的話:
- 應用層
- 表達層
- 會話層
- 傳輸層
- 網路層
- 資料鏈路層
- 物理層
但我們通常會把底下三層(網路層
, 資料鏈路層
, 物理層
)統稱為媒體層
, 一般都是專門搞網路的網路工程師大神們研究的物件.
而上面四層(傳輸層
, 會話層
, 表示層
, 應用層
)被稱為主機層
, 也是廣大使用者所面向和關心的內容.
說到協議, 我們就不得不提一下HTTP
:
HTTP
協議: 它是對應著應用層
.TCP
協議: 它是對應著傳輸層
.IP
協議: 則對應著網路層
.
而HTTP
協議是基於TCP
連線的, 所以三者根本就沒啥可比性.
TCP/IP
協議: 屬於傳輸層協議, 主要解決資料如何在網路中傳輸.HTTP
協議: 屬於應用層, 主要解決如何包裝資料.
而Socket
是應用層
與TCP/IP
協議族通訊中間的軟體抽象層, 是它的一組介面.
TCP/IP五層模型
既然都提到了TCP/IP
這個協議, 那麼就來講講, TCP/IP
裡的五層模型.
這裡面的五層模型分別為:
- 應用層
- 傳輸層
- 網路層
- 資料鏈路層
- 物理層
那麼我們日常生活中所接觸到的網路器材有哪些? 分別處於哪個模型?
- 物理層: 中繼器, 集線器, 雙絞線
- 資料鏈路層: 乙太網交換機(Modem), 網路卡(網路卡有一半是工作在物理層)
- 網路層: 路由器, 三層交換機
- 傳輸層: 四層交換機, 路由器(也有一些特殊的路由器在傳輸層中工作)
其中TCP/IP
的應用層
比較特殊, 它是包含了會話層
, 表達層
, 應用層
等功能, 這裡要說一點, TCP/IP
協議並不能在傳輸層總是保證可靠的傳輸資料包, 但七層模型可以做到.
TCP/IP
還提供了另一種傳輸模式, 叫做UDP(使用者資料包協議)
, 但這種協議不能保證可靠的資料包傳輸.
這裡再解釋一下:
TCP
: 面向連線, 提供可靠的資料傳輸, 用於傳輸大量資料, 使用資料流模式, 速度慢, 建立連線時開銷較大UDP
: 非面向連線, 傳輸不可靠, 用於傳輸少量的資料, 速度快
總的來說TCP
是一個資料流的模式協議, 而UDP
是一種資料包模式的協議.
剛剛說了Socket
是基於TCP/IP
協議上的抽象, 也就是說Socket
只是對TCP/IP
的封裝, 本身是沒有協議的, 只有通過Socket API
, 我們才能夠使用TCP/IP
協議.
大概的關係圖就是醬紫吧:
總結
這篇文章雖然不涉及任何的程式碼, 但都是一些必備的基礎知識, 如果想更詳細的瞭解或者是找更官方的文件, 可以去看看蘋果爸爸提供的Networking Overview這篇文章.