iOS Socket編程(一)基本概念

iOS Socket編程(一)基本概念
iOS Socket編程(二)TCP三次握手,四次揮手
iOS Socket編程(三)Socket與HTTP的區(qū)別
iOS Socket編程(四) Socket具體使用

Socket的解釋

Socket翻譯過來中文稱為套接字, 這里我找到了一段比較官方的解釋Socket是什么東西:

Socket是通信的基石,是支持TCP/IP協(xié)議的網(wǎng)絡(luò)通信的基本操作單元,包含進(jìn)行網(wǎng)絡(luò)通信必須的五種信息:連接使用的協(xié)議,本地主機(jī)的IP地址,本地進(jìn)程的協(xié)議端口,遠(yuǎn)地主機(jī)的IP地址,遠(yuǎn)地進(jìn)程的協(xié)議端口。

在實(shí)際當(dāng)中, 肯定是不止一個(gè)TCP/IP或者是一個(gè)應(yīng)用程序進(jìn)程在傳輸數(shù)據(jù), 為了可以區(qū)分開來, 系統(tǒng)提供了一套API, 方便TCP/IP與應(yīng)用程序交互, 一般把這個(gè)稱為Socket API.
醬紫應(yīng)用層可以和傳輸層通過這個(gè)Socket API, 區(qū)分來自不同的應(yīng)用程序進(jìn)程或者是網(wǎng)絡(luò)通信, 使得數(shù)據(jù)可以并發(fā)傳輸.

Socket的C/S端

Socket的使用其實(shí)也沒有我們想象中那么難, 只是這里需要有一個(gè)前提條件, 因?yàn)榻ocket通信是至少需要一對(duì)套接字, 其中一個(gè)是運(yùn)行在我們的客戶端上, 稱為Client Socket, 還有一個(gè)是運(yùn)行在服務(wù)器上, 稱為Service Socket.
Socket之間的連接過程分為三個(gè)過程:

  • 服務(wù)器監(jiān)聽
  • 客戶端請(qǐng)求
  • 連接確認(rèn)

Socket同時(shí)支持TCP和UDP兩種傳輸協(xié)議, 啥意思呢?
當(dāng)Socket使用TCP協(xié)議通信的時(shí)候, Socket就是一個(gè)TCP的連接, 那么如果Socket使用的是UDP協(xié)議通信, 那么這時(shí)候的Socket就是UDP連接.
如果要有圖的話, 大概就這樣了:

socket連接過程.png

網(wǎng)絡(luò)的協(xié)議

既然講到Socket, 那么就要說說網(wǎng)絡(luò)里面的協(xié)議, 這里就要普及一下網(wǎng)絡(luò)里面的到底都有啥, 首先我們要知道, 在網(wǎng)絡(luò)里面一共有七層協(xié)議.

從上往下分的話:

  • 應(yīng)用層
  • 表達(dá)層
  • 會(huì)話層
  • 傳輸層
  • 網(wǎng)絡(luò)層
  • 數(shù)據(jù)鏈路層
  • 物理層

但我們通常會(huì)把底下三層(網(wǎng)絡(luò)層, 數(shù)據(jù)鏈路層, 物理層)統(tǒng)稱為媒體層, 一般都是專門搞網(wǎng)絡(luò)的網(wǎng)絡(luò)工程師大神們研究的對(duì)象.

而上面四層(傳輸層, 會(huì)話層, 表示層, 應(yīng)用層)被稱為主機(jī)層, 也是廣大用戶所面向和關(guān)心的內(nèi)容.

說到協(xié)議, 我們就不得不提一下HTTP:

  • HTTP協(xié)議: 它是對(duì)應(yīng)著應(yīng)用層.
  • TCP協(xié)議: 它是對(duì)應(yīng)著傳輸層.
  • IP協(xié)議: 則對(duì)應(yīng)著網(wǎng)絡(luò)層.

而HTTP協(xié)議是基于TCP連接的, 所以三者根本就沒啥可比性.

  • TCP/IP協(xié)議: 屬于傳輸層協(xié)議, 主要解決數(shù)據(jù)如何在網(wǎng)絡(luò)中傳輸.
  • HTTP協(xié)議: 屬于應(yīng)用層, 主要解決如何包裝數(shù)據(jù).

而Socket是應(yīng)用層與TCP/IP協(xié)議族通信中間的軟件抽象層, 是它的一組接口.

TCP/IP五層模型

既然都提到了TCP/IP這個(gè)協(xié)議, 那么就來講講, TCP/IP里的五層模型.

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

  • 應(yīng)用層
  • 傳輸層
  • 網(wǎng)絡(luò)層
  • 數(shù)據(jù)鏈路層
  • 物理層
TCP:IP五層模型.png

那么我們?nèi)粘I钪兴佑|到的網(wǎng)絡(luò)器材有哪些? 分別處于哪個(gè)模型?

  • 物理層: 中繼器, 集線器, 雙絞線
  • 數(shù)據(jù)鏈路層: 以太網(wǎng)交換機(jī)(Modem), 網(wǎng)卡(網(wǎng)卡有一半是工作在物理層)
  • 網(wǎng)絡(luò)層: 路由器, 三層交換機(jī)
  • 傳輸層: 四層交換機(jī), 路由器(也有一些特殊的路由器在傳輸層中工作)

其中TCP/IP的應(yīng)用層比較特殊, 它是包含了會(huì)話層, 表達(dá)層, 應(yīng)用層等功能, 這里要說一點(diǎn), TCP/IP協(xié)議并不能在傳輸層總是保證可靠的傳輸數(shù)據(jù)包, 但七層模型可以做到.
TCP/IP還提供了另一種傳輸模式, 叫做UDP(用戶數(shù)據(jù)報(bào)協(xié)議), 但這種協(xié)議不能保證可靠的數(shù)據(jù)包傳輸.

這里再解釋一下:

  • TCP: 面向連接, 提供可靠的數(shù)據(jù)傳輸, 用于傳輸大量數(shù)據(jù), 使用數(shù)據(jù)流模式, 速度慢, 建立連接時(shí)開銷較大
  • UDP: 非面向連接, 傳輸不可靠, 用于傳輸少量的數(shù)據(jù), 速度快

總的來說TCP是一個(gè)數(shù)據(jù)流的模式協(xié)議, 而UDP是一種數(shù)據(jù)報(bào)模式的協(xié)議.
剛剛說了Socket是基于TCP/IP協(xié)議上的抽象, 也就是說Socket只是對(duì)TCP/IP的封裝, 本身是沒有協(xié)議的, 只有通過Socket API, 我們才能夠使用TCP/IP協(xié)議.
大概的關(guān)系圖就是醬紫吧:

socket與TCP:IP的關(guān)系.png

總結(jié)

這篇文章雖然不涉及任何的代碼, 但都是一些必備的基礎(chǔ)知識(shí), 如果想更詳細(xì)的了解或者是找更官方的文檔, 可以去看看蘋果爸爸提供的Networking Overview這篇文章.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1、TCP為什么需要3次握手,4次斷開? “三次握手”的目的是“為了防止已失效的連接請(qǐng)求報(bào)文段突然又傳送到了服務(wù)端...
    杰倫哎呦哎呦閱讀 3,630評(píng)論 0 6
  • 1.這篇文章不是本人原創(chuàng)的,只是個(gè)人為了對(duì)這部分知識(shí)做一個(gè)整理和系統(tǒng)的輸出而編輯成的,在此鄭重地向本文所引用文章的...
    SOMCENT閱讀 13,340評(píng)論 6 174
  • 個(gè)人認(rèn)為,Goodboy1881先生的TCP /IP 協(xié)議詳解學(xué)習(xí)博客系列博客是一部非常精彩的學(xué)習(xí)筆記,這雖然只是...
    貳零壹柒_fc10閱讀 5,182評(píng)論 0 8
  • 簡介 用簡單的話來定義tcpdump,就是:dump the traffic on a network,根據(jù)使用者...
    保川閱讀 6,061評(píng)論 1 13
  • 我第一次見到l小姐時(shí),她正陷入一場(chǎng)空前的情殤。戀愛一年的男友宣布分手,然她,半點(diǎn)心理準(zhǔn)備都沒有。l小姐對(duì)我說:真不...
    李軼男閱讀 3,259評(píng)論 1 3

友情鏈接更多精彩內(nèi)容