iOS Socket編程(一)基本概念
iOS Socket編程(二)TCP三次握手,四次揮手
iOS Socket編程(三)Socket與HTTP的區(qū)別
iOS Socket編程(四) Socket具體使用
Socket的解釋
Socket翻譯過(guò)來(lái)中文稱為套接字, 這里我找到了一段比較官方的解釋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ū)分開(kāi)來(lái), 系統(tǒng)提供了一套API, 方便TCP/IP與應(yīng)用程序交互, 一般把這個(gè)稱為Socket API.
醬紫應(yīng)用層可以和傳輸層通過(guò)這個(gè)Socket API, 區(qū)分來(lái)自不同的應(yīng)用程序進(jìn)程或者是網(wǎng)絡(luò)通信, 使得數(shù)據(jù)可以并發(fā)傳輸.
Socket的C/S端
Socket的使用其實(shí)也沒(méi)有我們想象中那么難, 只是這里需要有一個(gè)前提條件, 因?yàn)榻ocket通信是至少需要一對(duì)套接字, 其中一個(gè)是運(yùn)行在我們的客戶端上, 稱為Client Socket, 還有一個(gè)是運(yùn)行在服務(wù)器上, 稱為Service Socket.
Socket之間的連接過(guò)程分為三個(gè)過(guò)程:
- 服務(wù)器監(jiān)聽(tīng)
- 客戶端請(qǐng)求
- 連接確認(rèn)
Socket同時(shí)支持TCP和UDP兩種傳輸協(xié)議, 啥意思呢?
當(dāng)Socket使用TCP協(xié)議通信的時(shí)候, Socket就是一個(gè)TCP的連接, 那么如果Socket使用的是UDP協(xié)議通信, 那么這時(shí)候的Socket就是UDP連接.
如果要有圖的話, 大概就這樣了:
網(wǎng)絡(luò)的協(xié)議
既然講到Socket, 那么就要說(shuō)說(shuō)網(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)容.
說(shuō)到協(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連接的, 所以三者根本就沒(méi)啥可比性.
- 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é)議, 那么就來(lái)講講, TCP/IP里的五層模型.
這里面的五層模型分別為:
- 應(yīng)用層
- 傳輸層
- 網(wǎng)絡(luò)層
- 數(shù)據(jù)鏈路層
- 物理層
那么我們?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)用層等功能, 這里要說(shuō)一點(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í)開(kāi)銷較大
- UDP: 非面向連接, 傳輸不可靠, 用于傳輸少量的數(shù)據(jù), 速度快
總的來(lái)說(shuō)TCP是一個(gè)數(shù)據(jù)流的模式協(xié)議, 而UDP是一種數(shù)據(jù)報(bào)模式的協(xié)議.
剛剛說(shuō)了Socket是基于TCP/IP協(xié)議上的抽象, 也就是說(shuō)Socket只是對(duì)TCP/IP的封裝, 本身是沒(méi)有協(xié)議的, 只有通過(guò)Socket API, 我們才能夠使用TCP/IP協(xié)議.
大概的關(guān)系圖就是醬紫吧:
總結(jié)
這篇文章雖然不涉及任何的代碼, 但都是一些必備的基礎(chǔ)知識(shí), 如果想更詳細(xì)的了解或者是找更官方的文檔, 可以去看看蘋果爸爸提供的Networking Overview這篇文章.