玩轉iOS開發:iOS中的Socket程式設計(一)

CainLuo發表於2017-06-29

文章分享至我的個人技術部落格: 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同時支援TCPUDP兩種傳輸協議, 啥意思呢?

Socket使用TCP協議通訊的時候, Socket就是一個TCP的連線, 那麼如果Socket使用的是UDP協議通訊, 那麼這時候的Socket就是UDP連線.

如果要有圖的話, 大概就這樣了:

1


網路的協議

既然降到Socket, 那麼就要說說網路裡面的協議, 這裡就要普及一下網路裡面的到底都有啥, 首先我們要知道, 在網路裡面一共有七層協議.

從上往下分的話:

  • 應用層
  • 表達層
  • 會話層
  • 傳輸層
  • 網路層
  • 資料鏈路層
  • 物理層

2

但我們通常會把底下三層(網路層, 資料鏈路層, 物理層)統稱為媒體層, 一般都是專門搞網路的網路工程師大神們研究的物件.

而上面四層(傳輸層, 會話層, 表示層, 應用層)被稱為主機層, 也是廣大使用者所面向和關心的內容.

說到協議, 我們就不得不提一下HTTP:

  • HTTP協議: 它是對應著應用層.
  • TCP協議: 它是對應著傳輸層.
  • IP協議: 則對應著網路層.

HTTP協議是基於TCP連線的, 所以三者根本就沒啥可比性.

  • TCP/IP協議: 屬於傳輸層協議, 主要解決資料如何在網路中傳輸.
  • HTTP協議: 屬於應用層, 主要解決如何包裝資料.

Socket應用層TCP/IP協議族通訊中間的軟體抽象層, 是它的一組介面.


TCP/IP五層模型

既然都提到了TCP/IP這個協議, 那麼就來講講, TCP/IP裡的五層模型.

這裡面的五層模型分別為:

  • 應用層
  • 傳輸層
  • 網路層
  • 資料鏈路層
  • 物理層

玩轉iOS開發:iOS中的Socket程式設計(一)

那麼我們日常生活中所接觸到的網路器材有哪些? 分別處於哪個模型?

  • 物理層: 中繼器, 集線器, 雙絞線
  • 資料鏈路層: 乙太網交換機(Modem), 網路卡(網路卡有一半是工作在物理層)
  • 網路層: 路由器, 三層交換機
  • 傳輸層: 四層交換機, 路由器(也有一些特殊的路由器在傳輸層中工作)

其中TCP/IP應用層比較特殊, 它是包含了會話層, 表達層, 應用層等功能, 這裡要說一點, TCP/IP協議並不能在傳輸層總是保證可靠的傳輸資料包, 但七層模型可以做到.

TCP/IP還提供了另一種傳輸模式, 叫做UDP(使用者資料包協議), 但這種協議不能保證可靠的資料包傳輸.

這裡再解釋一下:

  • TCP: 面向連線, 提供可靠的資料傳輸, 用於傳輸大量資料, 使用資料流模式, 速度慢, 建立連線時開銷較大
  • UDP: 非面向連線, 傳輸不可靠, 用於傳輸少量的資料, 速度快

總的來說TCP是一個資料流的模式協議, 而UDP是一種資料包模式的協議.

剛剛說了Socket是基於TCP/IP協議上的抽象, 也就是說Socket只是對TCP/IP的封裝, 本身是沒有協議的, 只有通過Socket API, 我們才能夠使用TCP/IP協議.

大概的關係圖就是醬紫吧:

玩轉iOS開發:iOS中的Socket程式設計(一)


總結

這篇文章雖然不涉及任何的程式碼, 但都是一些必備的基礎知識, 如果想更詳細的瞭解或者是找更官方的文件, 可以去看看蘋果爸爸提供的Networking Overview這篇文章.


最後

碼字很費腦, 看官賞點飯錢可好

微信

支付寶

相關文章