文章分享至個人我的技術博客: https://cainluo.github.io/14986613643920.htmlhtml
Socket
翻譯過來中文稱爲套接字
, 這裏我找到了一段比較官方的解釋Socket
是什麼東西:git
Socket
是通訊的基石,是支持TCP/IP
協議的網絡通訊的基本操做單元,包含進行網絡通訊必須的五種信息:鏈接使用的協議
,本地主機的IP地址
,本地進程的協議端口
,遠地主機的IP地址
,遠地進程的協議端口
。github
在實際當中, 確定是不止一個TCP/IP
或者是一個應用程序進程在傳輸數據, 爲了能夠區分開來, 系統提供了一套API
, 方便TCP/IP
與應用程序交互, 通常把這個稱爲Socket API
.服務器
醬紫應用層能夠和傳輸層經過這個Socket API
, 區分來自不一樣的應用程序進程或者是網絡通訊, 使得數據能夠併發傳輸.微信
Socket
的使用其實也沒有咱們想象中那麼難, 只是這裏須要有一個前提條件, 由於創建Socket
通訊是至少須要一對套接字
, 其中一個是運行在咱們的客戶端上, 稱爲Client Socket
, 還有一個是運行在服務器上, 稱爲Service Socket
.網絡
Socket
之間的鏈接過程分爲三個過程:併發
Socket
同時支持TCP
和UDP
兩種傳輸協議, 啥意思呢?app
當Socket
使用TCP
協議通訊的時候, Socket
就是一個TCP
的鏈接, 那麼若是Socket
使用的是UDP
協議通訊, 那麼這時候的Socket
就是UDP
鏈接.翻譯
若是要有圖的話, 大概就這樣了:3d
既然降到Socket
, 那麼就要說說網絡裏面的協議, 這裏就要普及一下網絡裏面的到底都有啥, 首先咱們要知道, 在網絡裏面一共有七層協議
.
從上往下分的話:
但咱們一般會把底下三層(網絡層
, 數據鏈路層
, 物理層
)統稱爲媒體層
, 通常都是專門搞網絡的網絡工程師大神們研究的對象.
而上面四層(傳輸層
, 會話層
, 表示層
, 應用層
)被稱爲主機層
, 也是廣大用戶所面向和關心的內容.
說到協議, 咱們就不得不提一下HTTP
:
HTTP
協議: 它是對應着應用層
.TCP
協議: 它是對應着傳輸層
.IP
協議: 則對應着網絡層
.而HTTP
協議是基於TCP
鏈接的, 因此三者根本就沒啥可比性.
TCP/IP
協議: 屬於傳輸層協議, 主要解決數據如何在網絡中傳輸.HTTP
協議: 屬於應用層, 主要解決如何包裝數據.而Socket
是應用層
與TCP/IP
協議族通訊中間的軟件抽象層, 是它的一組接口.
既然都提到了TCP/IP
這個協議, 那麼就來說講, TCP/IP
裏的五層模型.
這裏面的五層模型分別爲:
那麼咱們平常生活中所接觸到的網絡器材有哪些? 分別處於哪一個模型?
其中TCP/IP
的應用層
比較特殊, 它是包含了會話層
, 表達層
, 應用層
等功能, 這裏要說一點, TCP/IP
協議並不能在傳輸層老是保證可靠的傳輸數據包, 但七層模型能夠作到.
TCP/IP
還提供了另外一種傳輸模式, 叫作UDP(用戶數據報協議)
, 但這種協議不能保證可靠的數據包傳輸.
這裏再解釋一下:
TCP
: 面向鏈接, 提供可靠的數據傳輸, 用於傳輸大量數據, 使用數據流模式, 速度慢, 創建鏈接時開銷較大UDP
: 非面向鏈接, 傳輸不可靠, 用於傳輸少許的數據, 速度快總的來講TCP
是一個數據流的模式協議, 而UDP
是一種數據報模式的協議.
剛剛說了Socket
是基於TCP/IP
協議上的抽象, 也就是說Socket
只是對TCP/IP
的封裝, 自己是沒有協議的, 只有經過Socket API
, 咱們纔可以使用TCP/IP
協議.
大概的關係圖就是醬紫吧:
這篇文章雖然不涉及任何的代碼, 但都是一些必備的基礎知識, 若是想更詳細的瞭解或者是找更官方的文檔, 能夠去看看蘋果爸爸提供的Networking Overview這篇文章.