iOS:即時通訊之

發表於2016-04-09

什麼是socket?

計算機專業術語就是:

網路上的兩個程式通過一個雙向的通訊連線實現資料的交換,這個連線的一端稱為一個socket。Socket的英文原義是“孔”或“插座”。作為BSD UNIX的程式通訊機制,取後一種意思。通常也稱作”套接字“,用於描述IP地址和埠,是一個通訊鏈的控制程式碼,可以用來實現不同虛擬機器或不同計算機之間的通訊。在Internet上的主機一般執行了多個服務軟體,同時提供幾種服務。每種服務都開啟一個Socket,並繫結到一個埠上,不同的埠對應於不同的服務。Socket正如其英文原意那樣,像一個多孔插座。一臺主機猶如佈滿各種插座的房間,每個插座有一個編號,有的插座提供220伏交流電, 有的提供110伏交流電,有的則提供有線電視節目。 客戶軟體將插頭插到不同編號的插座,就可以得到不同的服務

通俗語:

Socket稱”套接字”

網路上的兩個程式通過一個雙向的通訊連線實現資料的交換,這個連線的一端稱為一個socket端,平時我們向伺服器傳送一個網路請求,然後伺服器響應請求,返回伺服器資料應用程式通常通過”套接字”向網路發出請求或者應答網路請求

 

細節:

1.Socket相當於一個“管道”或者說“隧道”兩邊的連線,一個進入,一個出來

2.使用者名稱和密碼是儲存在伺服器的資料庫中

3.我們要保證客戶端程式是訪問web應用程式還是資料庫應用程式呢?就是通過埠號


網路通訊要素:

1.網路上的請求就是通過Socket來建立連線然後互相通訊

2.IP地址(網路上主機裝置的唯一標識)(尋找伺服器的主機)

3.埠號(定位程式)

4.用於標示程式(一個程式就是一個程式)的邏輯地址,不同程式的標示

5.有效埠:0~65535,其中0~1024由系統使用或者保留埠,開發中建議使用1024以上的埠

6.傳輸協議(用什麼樣的方式進行互動)(方式就是TCP和UDP需要還是不需要建立連線。就像快遞一樣,像順豐或者是圓通就是一個方式)

7.通訊的規則 (常見協議:TCP、UDP)

TCP:

 

三次握手,是為了資料的安全性和可靠性  比如打電話:

第一次握手:先撥過去

第二次握手:對方“喂”了一聲,響應一下,

第三次握手:我聽到對方之後,也說了一句“喂” ,響應。

只有這三個步驟,別人喂了一聲,你也喂了一聲,它能聽到我的響應,我還能聽到它的響應才是成功的。假如借錢,這樣才能保證了安全性和可靠性

1.必須建立連線,效率會稍低(每一次都要建立連線)

2.進行了多少次HTTP請求,就進行了多少次三次握手(HTTP是效率低低些,但是影響不大,因為使用者下次傳送網路請求的時間不固定,所以沒有多大影響)(打電話如果一直保持,電話費不就多了嗎)

3.HTTP就是每傳送一次請求,就建立一次TCP連線,三次握手

 

UDP:

 

將資料及源和目的封裝成資料包中,不需要建立連線(就像老師(源)螢幕廣播,就及時的把資料同步傳送到你的電腦上(目的),直接傳送。假如網路斷了,再次看到螢幕的時候,只能看到最新的內容。沒了就沒了,錯過了就錯過了)

每個資料包的大小限制在64Kb之內(首先是實時的,如果資料弄大點,如果出問題,就不會有太大的破壞)

因為無需連線,因此是不可靠協議(省去了三次握手,效能就高了)

不需要建立連線,速度快

 

 

應用:

 

Socket通訊流程圖:

 

 

1.bind()就是繫結埠      (伺服器要有埠標識自己)

2.listen()就是監聽埠看有沒有lianjie過來,我同意就接受連線      (假如客戶端要連線web應用程式埠,就要監聽80埠。假如是惡意攻擊,多次併發請求,會造成網路阻塞,那我就可以斷開你的連線)

3.accept()

4.write()客戶端發請求

5.read()服務端接受請求

 

 

假如客戶端傳送登入請求,我伺服器是要做出來請求的,伺服器要做迴應資料,發資料給客戶端,做一個write()寫的操作一個HTTP的請求完了後,接下有個操作,結束連線。因為下次請求的時間是不固定的。就做一個close()操作

HTTP的底層就通過Socket建立連線通訊管道,實現資料的傳輸

HTTP是一個TCP的傳輸協議(方式),它是一個可靠的安全的協議

 

實現Socket服務端監聽方法:

1:實現socket的監聽方法就是使用C語言實現(系統預設就有,但是麻煩)

2:使用CocoaAsyncSocket第三方框(是OC的),內部是對C的封裝,耗時操作肯定是耗時的,開發的時候,我們也是用的這個框架

3:Telnet命令 telnet host port/telnet 192.168.10.10 5288  telnet命令是連線伺服器上的某個埠對應的服務

 

Socket層上的協議:

1.Socket層上的協議指的資料傳輸的格式:

 

2:HTTP協議(類似於字典的協議)

3:XMPP協議(是一款即時通訊協議(目的是定義資料傳輸的格式)

 

4:自定義即時通訊協議,json格式

 

補充:TCP、UDP、HTTP、SOCKET之間的區別

IP:網路層協議;

TCP和UDP:傳輸層協議;

HTTP:應用層協議;

SOCKET:TCP/IP網路的API。

TCP/IP代表傳輸控制協議/網際協議,指的是一系列協議。

TCP和UDP使用IP協議從一個網路傳送資料包到另一個網路。把IP想像成一種高速公路,它允許其它協議在上面行駛並找到到其它電腦的出口。TCP和UDP是高速公路上的“卡車”,它們攜帶的貨物就是像HTTP,檔案傳輸協議FTP這樣的協議等。

TCP和UDP是FTP,HTTP和SMTP之類使用的傳輸層協議。雖然TCP和UDP都是用來傳輸其他協議的,它們卻有一個顯著的不同:TCP提供有保證的資料傳輸,而UDP不提供。這意味著TCP有一個特殊的機制來確保資料安全的不出錯的從一個端點傳到另一個端點,而UDP不提供任何這樣的保證。

HTTP(超文字傳輸協議)是利用TCP在兩臺電腦(通常是Web伺服器和客戶端)之間傳輸資訊的協議。客戶端使用Web瀏覽器發起HTTP請求給Web伺服器,Web伺服器傳送被請求的資訊給客戶端。

記住,需要IP協議來連線網路;TCP是一種允許我們安全傳輸資料的機制,,使用TCP協議來傳輸資料的HTTP是Web伺服器和客戶端使用的特殊協議。

Socket 介面是TCP/IP網路的API,Socket介面定義了許多函式或例程,用以開發TCP/IP網路上的應用程式。

相關文章