iOS開發 Socket程式設計

2022-07-16 06:48:09 字數 4502 閱讀 4486

socket程式設計

一、了解網路各個協議:tcp/ip、socket、http等

網路七層由下往上分別為物理層、資料鏈路層、網路層、傳輸層、會話層、表示層和應用層。

其中物理層、資料鏈路層和網路層通常被稱作**層,是網路工程師所研究的物件;

傳輸層、會話層、表示層和應用層則被稱作主機層,是使用者所面向和關心的內容。

http協議   對應於應用層 

tcp協議    對應於傳輸層  

ip協議     對應於網路層

三者本質上沒有可比性。  何況http協議是基於tcp連線的。 

tcp/ip是傳輸層協議,主要解決資料如何在網路中傳輸;而http是應用層協議,主要解決如何包裝資料。

我 們在傳輸資料時,可以只使用傳輸層(tcp/ip),但是那樣的話,由於沒有應用層,便無法識別資料內容,如果想要使傳輸的資料有意義,則必須使用應用層 協議,應用層協議很多,有http、ftp、telnet等等,也可以自己定義應用層協議。web使用http作傳輸層協議,以封裝http文字資訊,然 後使用tcp/ip做傳輸層協議將它傳送到網路上。socket是對tcp/ip協議的封裝,socket本身並不是協議,而是乙個呼叫介面(api),通過socket,我們才能使用tcp/ip協議。

二、http,https和socket連線區別

相信不少初學手機聯網開發的朋友都想知道http與socket連線究竟有什麼區別,希望通過自己的淺顯理解能對初學者有所幫助。

tcp/ip五層模型的協議分為:應用層、傳輸層、網路層、資料鏈路層和物理層。中繼器、集線器、還有我們通常說的雙絞線也工作在物理層;網橋(現已很少使用)、乙太網交換機(二層交換機)、網絡卡(其實網絡卡是一半工作在物理層、一半工作在資料鏈路層)在資料鏈路層;路由器、三層交換機在網路層;傳輸層主要是四層交換機、也有工作在四層的路由器。

tcp/ip協議中的應用層處理七層模型中的第五層、第六層和第七層的功能。tcp/ip協議中的傳輸層並不能總是保證在傳輸層可靠地傳輸資料報,而七層模型可以做到。tcp/ip協議還提供一項名為udp(使用者資料報協議)的選擇。udp不能保證可靠的資料報傳輸。

2.1、tcp連線

要想明白socket連線,先要明白tcp連線。手機能夠使用聯網功能是因為手機底層實現了tcp/ip協議,可以使手機終端通過無線網路建立tcp連線。tcp協議可以對上層網路提供介面,使上層網路資料的傳輸建立在「無差別」的網路之上。

建立起乙個tcp連線需要經過「三次握手」:

第一次握手:客戶端傳送syn包(syn=j)到伺服器,並進入syn_send狀態,等待伺服器確認;

第二次握手:伺服器收到syn包,必須確認客戶的syn(ack=j+1),同時自己也傳送乙個syn包(syn=k),即syn+ack包,此時伺服器進入syn_recv狀態;

第三次握手:客戶端收到伺服器的syn+ack包,向伺服器傳送確認包ack(ack=k+1),此包傳送完畢,客戶端和伺服器進入established狀態,完成三次握手。

握 手過程中傳送的包裡不包含資料,三次握手完畢後,客戶端與伺服器才正式開始傳送資料。三次握手(three-way handshake)即建立乙個tcp連線時,需要客戶端和伺服器總共傳送3個包。三次握手的目的是連線伺服器指定埠,建立tcp連線,並同步連線雙方的序列號和確認號並交換tcp 視窗大小資訊。在socket程式設計中,客戶端執行connect()時,將觸發三次握手。

握手過程中傳送的包裡不包含資料,三次握手完畢後,客戶端與伺服器才正式開始傳送資料。理想狀態下,tcp連線一旦建立,在通訊雙方中的任何一方主動關閉連線之前,tcp 連線都將被一直保持下去。斷開連線時伺服器和客戶端均可以主動發起斷開tcp連線的請求,斷開過程需要經過「四次握手」。

tcp連線的拆除需要傳送四個包,因此稱為四次握手(four-way handshake)。在socket程式設計中,任何一方執行close()操作即可產生握手(有地方稱為「揮手」)操作。

之所以有「三次握手」和「四次握手」的區別,是因為連線時當server端收到client端的syn連線請求報文後,可以直接傳送syn+ack報文。其中ack報文是用來應答的,syn報文是用來同步的。但是關閉連線時,當server端收到fin報文時,很可能並不會立即關閉socket,所以只能先回覆乙個ack報文,告訴client端,」你發的fin報文我收到了」。只有等到我server端所有的報文都傳送完了,我才能傳送fin報文,因此不能一起傳送。故需要四步握手。

2.2、http連線

http協議即超文字傳送協議(hypertexttransfer protocol ),是web聯網的基礎,也是手機聯網常用的協議之一,http協議是建立在tcp協議之上的一種應用。

http連線最顯著的特點是客戶端傳送的每次請求都需要伺服器回送響應,在請求結束後,會主動釋放連線。從建立連線到關閉連線的過程稱為「一次連線」。

1)在http 1.0中,客戶端的每次請求都要求建立一次單獨的連線,在處理完本次請求後,就自動釋放連線。

2)在http 1.1中則可以在一次連線中處理多個請求,並且多個請求可以重疊進行,不需要等待乙個請求結束後再傳送下乙個請求。

https(hyper text transfer protocol over secure socket layer),是以安全為目標的http通道,是http的安全版。 在http下加入ssl層,https的安全基礎是ssl,因此加密的詳細內容就需要ssl。 https存在不同於http的預設埠及乙個加密/身份驗證層(在http與tcp之間)。http協議以明文方式傳送內容,不提供任何方式的資料加密,如果攻擊者擷取了web瀏覽器和**伺服器之間的傳輸報文,就可以直接讀懂其中的資訊,因此http協議不適合傳輸一些敏感資訊。

https協議需要到ca申請證書;http是超文字傳輸協議,資訊是明文傳輸,https 則是具有安全性的ssl加密傳輸協議;http和https使用的是完全不同的連線方式,用的埠也不一樣,前者是80,後者是443;http的連線很簡單,是無狀態的,https協議是由ssl+http協議構建的可進行加密傳輸、身份認證的網路協議。

三、socket原理

3.1、套接字(socket)概念

套接字(socket)是通訊的基石,是支援tcp/ip協議的網路通訊的基本操作單元。它是網路通訊過程中端點的抽象表示,包含進行網路通訊必須的五種資訊:連線使用的協議,本地主機的ip位址,本地程序的協議埠,遠地主機的ip位址,遠地程序的協議埠。

應 用層通過傳輸層進行資料通訊時,tcp會遇到同時為多個應用程式程序提供併發服務的問題。多個tcp連線或多個應用程式程序可能需要通過同乙個 tcp協議埠傳輸資料。為了區別不同的應用程式程序和連線,許多計算機作業系統為應用程式與tcp/ip協議互動提供了套接字(socket)介面。應 用層可以和傳輸層通過socket介面,區分來自不同應用程式程序或網路連線的通訊,實現資料傳輸的併發服務。

3.2 、建立socket連線

建立socket連線至少需要一對套接字,其中乙個執行於客戶端,稱為clientsocket,另乙個執行於伺服器端,稱為serversocket。

套接字之間的連線過程分為三個步驟:伺服器監聽,客戶端請求,連線確認。

伺服器監聽:伺服器端套接字並不定位具體的客戶端套接字,而是處於等待連線的狀態,實時監控網路狀態,等待客戶端的連線請求。

客戶端請求:指客戶端的套接字提出連線請求,要連線的目標是伺服器端的套接字。為此,客戶端的套接字必須首先描述它要連線的伺服器的套接字,指出伺服器端套接字的位址和埠號,然後就向伺服器端套接字提出連線請求。

連 接確認:當伺服器端套接字監聽到或者說接收到客戶端套接字的連線請求時,就響應客戶端套接字的請求,建立乙個新的執行緒,把伺服器端套接字的描述發給客戶 端,一旦客戶端確認了此描述,雙方就正式建立連線。而伺服器端套接字繼續處於監聽狀態,繼續接收其他客戶端套接字的連線請求。

3.3、socket連線與tcp連線

建立socket連線時,可以指定使用的傳輸層協議,socket可以支援不同的傳輸層協議(tcp或udp),當使用tcp協議進行連線時,該socket連線就是乙個tcp連線。

3.4、socket連線與http連線

由 於通常情況下socket連線就是tcp連線,因此socket連線一旦建立,通訊雙方即可開始相互傳送資料內容,直到雙方連線斷開。但在實際網路應用 中,客戶端到伺服器之間的通訊往往需要穿越多個中間節點,例如路由器、閘道器、防火牆等,大部分防火牆缺省會關閉長時間處於非活躍狀態的連線而導致 socket 連線斷連,因此需要通過輪詢告訴網路,該連線處於活躍狀態。

而http連線使用的是「請求—響應」的方式,不僅在請求時需要先建立連線,而且需要客戶端向伺服器發出請求後,伺服器端才能回覆資料。

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

文章分享至我的個人技術部落格 socket翻譯過來中文稱為套接字,這裡我找到了一段比較官方的解釋socket是什麼東西 socket是通訊的基石,是支援tcp ip協議的網路通訊的基本操作單元,包含進行網路通訊必須的五種資訊 連線使用的協議,本地主機的ip位址,本地程序的協議埠,遠地主機的ip位址,...

Socket網路程式設計 iOS開發簡單例項

一 再標頭檔案中第一輸入流和輸出流和乙個訊息陣列 1 inte ce viewcontroller 5 property weak,nonatomic iboutlet nslayoutconstraint inputviewconstraint 6 property weak,nonatomic ...

iOS網路程式設計 iOS中Socket程式設計介紹

使用socket進行c s結構程式設計,連線過程 服 務器端監聽某個埠是否有連線請求。伺服器端程式處於堵塞狀態,直到客戶端向伺服器端發出連線請求,伺服器端接受請求程式才能向下執行。一旦連線建立起 來,通過socket可以獲得輸入輸出流物件。借助於輸入輸出流物件就可以實現與客戶端的通訊,最後不要忘記關...