iOS Socket理論知識

來源:互聯網
上載者:User

標籤:

iOS Socket理論知識序言

網路七層由下往上分別為物理層、資料連結層、網路層、傳輸層、會話層、展示層和應用程式層.其中物理層、資料連結層和網路層通常被稱作媒體稱,是網路工程師所研究的對象;傳輸層、會話層、展示層和應用程式層則被稱作主機層,是使用者所面向和關心的內容.

  • http協議對應與應用程式層
  • TCP/UDP協議對應於傳輸層
  • IP協議對應於網路層

三者本質上沒有可比性。何況HTTP協議是基於TCP串連的。TCP/IP是傳輸層協議,主要解決資料如何在網路中傳輸;而HTTP是應用程式層協議,主要解決如何封裝資料。我們在傳輸資料時,可以只使用傳輸層(TCP/IP),但是那樣的話,由於沒有應用程式層,便無法識別資料內容,如果想要使傳輸的資料有意義,則必須使用應用程式層協議,應用程式層協議很多,有HTTP、FTP、TELNET等等,也可以自己定義應用程式層協議。WEB使用HTTP作傳輸層協議,以封裝HTTP文本資訊,然後使用TCP/IP做傳輸層協議將它發送到網路上。Socket是對TCP/IP協議的封裝,Socket本身並不是協議,而是一個調用介面(API),通過Socket,我們才能使用TCP/IP協議。

什麼是Socket?

Socket又稱之為“通訊端”,是系統提供的用於網路通訊的方法。它的實質並不是一種協議,沒有規定電腦應當怎麼樣傳遞訊息,只是給程式員提供了一個發送訊息的介面,程式員使用這個介面提供的方法,發送與接收訊息。
Socket描述了一個IP、連接埠對。它簡化了程式員的操作,知道對方的IP以及PORT就可以給對方發送訊息,再由伺服器端來處理髮送的這些訊息。所以,Socket一定包含了通訊的雙方,即用戶端(Client)與服務端(server)。

TCP

TCP是連線導向的、傳輸可靠(保證資料正確性且保證資料順序)、用於傳輸大量資料(流模式)、速度慢,建立串連需要開銷較多(時間,系統資源)。
TCP是一種流模式的協議,是連線導向的,也就是說,在串連持續的過程中,socket中收到的資料都是由同一台主機發出的(劫持什麼的不考慮),因此,知道保證資料是有序的到達就行了,至於每次讀取多少資料不關心。

TCP三向交握

所謂三向交握(Three-way Handshake),是指建立一個TCP串連時,需要用戶端和伺服器總共發送3個包。三向交握的目的是串連伺服器指定連接埠,建立TCP串連,並同步串連雙方的序號和確認號並交換TCP視窗大小資訊。在socket編程中,用戶端執行connect()時,將觸發三向交握(圖片來源於網路):

?
SYN(synchronous)是同步標誌;ACK (Acknowledgement)是確認標誌,seq是序號。

  • 第一次握手:用戶端發送一個TCP的SYN標誌位置1的包,指明客戶打算已連線的服務器的連接埠,以及初始序號X,儲存在包頭的序號欄位裡。
  • 第二次握手:伺服器發回確認包(ACK)應答。即SYN標誌位和ACK標誌位均為1同時,將確認序號設定為客戶的序號加1以,即X+1。
  • 第三向交握:用戶端再次發送確認包(ACK) SYN標誌位為0,ACK標誌位為1。並且把伺服器發來ACK的序號欄位+1,放在確定欄位中發送給對方.並且在資料區段放寫序號的+1。

關於三向交握,知乎上有個段子我覺得挺好的。

「喂喂喂,能聽到嗎?」
「沒問題。能聽到就回一聲。」
「沒問題。」

TCP四次揮手

四次揮手的流程:
?

當Server端收到Client端的SYN串連請求報文後,可以直接發送SYN+ACK報文。其中ACK報文是用來應答的,SYN報文是用來同步的。但是關閉串連時,當Server端收到FIN報文時,很可能並不會立即關閉SOCKET,所以只能先回複一個ACK報文,告訴Client端,”你發的FIN報文我收到了”。只有等到我Server端所有的報文都發送完了,我才能發送FIN報文,因此不能一起發送。故需要四步握手。

TCP用戶端-伺服器程式設計基本架構

?

UDP

UDP是面向無串連、傳輸不可靠、用於傳輸少量資料(資料包模式)、速度快的傳輸層協議。注意,UDP傳輸的是資料報包,而TCP是流。

UDP是面向不需連線的協議,只要知道接收端的IP和連接埠,且網路是可達的,任何主機都可以向接收端發送資料。這時候,如果一次能讀取超過一個報文的資料,則會亂套。比如,主機A向發送了報文P1,主機B發送了報文P2,如果能夠讀取超過一個報文的資料,那麼就會將P1和P2的資料合併在了一起,這樣的資料是沒有意義的。

?

UDP用戶端-服務端程式設計基本架構

Socket的通訊過程

每一個應用或者說服務都有一個連接埠。比如DNS的連接埠號碼53,http的連接埠號碼80都是對應一個應用或者服務的連接埠。我們能由DNS請求到查詢資訊,是因為DNS伺服器時時刻刻都在監聽53連接埠,當收到我們的查詢請求以後,就能夠返回我們想要的IP資訊。所以,從程式設計上來講,應該包含以下步驟:

  • 服務端利用Socket監聽連接埠;
  • 用戶端發起串連;
  • 服務端返回資訊,建立串連,開始通訊;
  • 用戶端,服務端中斷連線。
Socket原理

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

應用程式層通過傳輸層進行資料通訊時,TCP會遇到同時為多個應用程式進程提供並發服務的問題。多個TCP串連或多個應用程式進程可能需要通過同一個 TCP協議連接埠傳輸資料。為了區別不同的應用程式進程和串連,許多電腦作業系統為應用程式與TCP/IP協議互動提供了通訊端(Socket)介面。應用程式層可以和傳輸層通過Socket介面,區分來自不同應用程式進程或網路連接的通訊,實現資料轉送的並發服務。

Socket串連

建立Socket串連至少需要一對通訊端,其中一個運行於用戶端,稱為ClientSocket,另一個運行於伺服器端,稱為ServerSocket。

通訊端之間的串連過程分為三個步驟:

  • 伺服器監聽:伺服器端通訊端並不定位具體的用戶端通訊端,而是處於等待串連的狀態,即時監控網路狀態,等待用戶端的串連請求

  • 用戶端請求:指用戶端的通訊端提出串連請求,要串連的目標是伺服器端的通訊端。為此,用戶端的通訊端必須首先描述它要已連線的服務器的通訊端,指出伺服器端通訊端的地址和連接埠號碼,然後就向伺服器端通訊端提出串連請求

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





iOS Socket理論知識

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.