Http、Socket、WebSocket之間聯系與區別


WebSocket和Socket區別

可以把WebSocket想象成HTTP(應用層),HTTP和Socket什么關系,WebSocket和Socket就是什么關系。

HTTP 協議有一個缺陷:通信只能由客戶端發起,做不到服務器主動向客戶端推送信息。

WebSocket 協議 它的最大特點就是,服務器可以主動向客戶端推送信息,客戶端也可以主動向服務器發送信息,是真正的雙向平等對話,屬於服務器推送技術的一種


socket和http的區別:
Http協議:簡單的對象訪問協議,對應於應用層。Http協議是基於TCP鏈接的。
tcp協議:對應於傳輸層
ip協議:對應與網絡層
TCP/IP是傳輸層協議,主要解決數據如何在網絡中傳輸;而Http是應用層協議,主要解決如何包裝數據。

Socket是對TCP/IP協議的封裝,Socket本身並不是協議,而是一個調用接口(API),通過Socket,我們才能使用TCP/IP協議。

Http連接:http連接就是所謂的短連接,及客戶端向服務器發送一次請求,服務器端相應后連接即會斷掉。

socket連接:socket連接及時所謂的長連接,理論上客戶端和服務端一旦建立連接,則不會主動斷掉;但是由於各種環境因素可能會是連接斷開,比如說:服務器端或客戶端主機down了,網絡故障,或者兩者之間長時間沒有數據傳輸,網絡防火牆可能會斷開該鏈接已釋放網絡資源。所以當一個socket連接中沒有數據的傳輸,那么為了位置連續的連接需要發送心跳消息,具體心跳消息格式是開發者自己定義的。

 

1.HTTP的長連接一般就只能堅持一分鍾而已,而且是瀏覽器決定的,你的頁面很難控制這個行為。
Socket連接就可以維持很久,幾天、數月都有可能,只要網絡不斷、程序不結束,而且是可以編程靈活控制的。
2.HTTP連接是建立在Socket連接之上。在實際的網絡棧中,Socket連接的確是HTTP連接的一部分。但是從HTTP協議看,它的連接一般是指它本身的那部分。

TCP/IP協議棧主要分為四層:應用層、傳輸層、網絡層、數據鏈路層,

每層都有相應的協議,如下圖

IP:

網絡層協議;(高速公路)

TCP和UDP:

傳輸層協議;(卡車)

HTTP:

應用層協議;(貨物)。HTTP(超文本傳輸協議)是利用TCP在兩台電腦(通常是Web服務器和客戶端)之間傳輸信息的協議。客戶端使用Web瀏覽器發起HTTP請求給Web服務器,Web服務器發送被請求的信息給客戶端。

SOCKET:

套接字,TCP/IP網絡的API。(港口碼頭/車站)Socket是應用層與TCP/IP協議族通信的中間軟件抽象層,它是一組接口。socket是在應用層和傳輸層之間的一個抽象層,它把TCP/IP層復雜的操作抽象為幾個簡單的接口供應用層調用已實現進程在網絡中通信。

TCP/IP:

代表傳輸控制協議/網際協議,指的是一系列協議,TCP/IP 模型在 OSI 模型的基礎上進行了簡化,變成了四層,從下到上分別為:網絡接口層、網絡層、傳輸層、應用層。與 OSI 體系結構對比如下:

TCP/UDP區別:

TCP

(傳輸控制協議,Transmission Control Protocol):(類似打電話)

面向連接、傳輸可靠(保證數據正確性)、有序(保證數據順序)、傳輸大量數據(流模式)、速度慢、對系統資源的要求多,程序結構較復雜,

每一條TCP連接只能是點到點的,

TCP首部開銷20字節。

UDP

(用戶數據報協議,User Data Protocol):(類似發短信)

面向非連接 、傳輸不可靠(可能丟包)、無序、傳輸少量數據(數據報模式)、速度快,對系統資源的要求少,程序結構較簡單 ,

UDP支持一對一,一對多,多對一和多對多的交互通信,

UDP的首部開銷小,只有8個字節。

tcp三次握手建立連接:

第一次握手:客戶端發送syn包(seq=x)到服務器,並進入SYN_SEND狀態,等待服務器確認;

第二次握手:服務器收到syn包,必須確認客戶的SYN(ack=x+1),同時自己也發送一個SYN包(seq=y),即SYN+ACK包,此時服務器進入SYN_RECV狀態;

第三次握手:客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK(ack=y+1),此包發送完畢,客戶端和服務器進入ESTABLISHED狀態,完成三次握手。

握手過程中傳送的包里不包含數據,三次握手完畢后,客戶端與服務器才正式開始傳送數據。理想狀態下,TCP連接一旦建立,在通信雙方中的任何一方主動關閉連接之前,TCP 連接都將被一直保持下去。

主機A向主機B發出連接請求數據包:“我想給你發數據,可以嗎?”,這是第一次對話;

主機B向主機A發送同意連接和要求同步(同步就是兩台主機一個在發送,一個在接收,協調工作)的數據包:“可以,你什么時候發?”,這是第二次對話;

主機A再發出一個數據包確認主機B的要求同步:“我現在就發,你接着吧!”,這是第三次對話。

三次“對話”的目的是使數據包的發送和接收同步,經過三次“對話”之后,主機A才向主機B正式發送數據。

Websocket

Websocket協議解決了服務器與客戶端全雙工通信的問題。

注:什么是單工、半雙工、全工通信?

信息只能單向傳送為單工;

信息能雙向傳送但不能同時雙向傳送稱為半雙工;

信息能夠同時雙向傳送則稱為全雙工。

websocket協議解析

wensocket協議包含兩部分:一部分是“握手”,一部分是“數據傳輸”。

 

 

 

 

 

要弄明白 http 和 socket 首先要熟悉網絡七層:物 數 網 傳 會 表 應,如圖1

如圖1

HTTP 協議:超文本傳輸協議,對應於應用層,用於如何封裝數據.

TCP/UDP 協議:傳輸控制協議,對應於傳輸層,主要解決數據在網絡中的傳輸。

IP 協議:對應於網絡層,同樣解決數據在網絡中的傳輸。

傳輸數據的時候只使用 TCP/IP 協議(傳輸層),如果沒有應用層來識別數據內容,傳輸后的協議都是無用的。

應用層協議很多 FTP,HTTP,TELNET等,可以自己定義應用層協議。

web 使用 HTTP 作傳輸層協議,以封裝 HTTP 文本信息,然后使用 TCP/IP 做傳輸層協議,將數據發送到網絡上。

 

一、HTTP 協議

http 為短連接:客戶端發送請求都需要服務器端回送響應.請求結束后,主動釋放鏈接,因此為短連接。通常的做法是,不需要任何數據,也要保持每隔一段時間向服務器發送"保持連接"的請求。這樣可以保證客戶端在服務器端是"上線"狀態。

HTTP連接使用的是"請求-響應"方式,不僅在請求時建立連接,而且客戶端向服務器端請求后,服務器才返回數據。

 

二、Socket 連接

要想明白 Socket,必須要理解 TCP 連接。

TCP 三次握手:握手過程中並不傳輸數據,在握手后服務器與客戶端才開始傳輸數據,理想狀態下,TCP 連接一旦建立,在通訊雙方中的任何一方主動斷開連接之前 TCP 連接會一直保持下去。

Socket 是對 TCP/IP 協議的封裝,Socket 只是個接口不是協議,通過 Socket 我們才能使用 TCP/IP 協議,除了 TCP,也可以使用 UDP 協議來傳遞數據。

創建 Socket 連接的時候,可以指定傳輸層協議,可以是 TCP 或者 UDP,當用 TCP 連接,該Socket就是個TCP連接,反之。

Socket 原理

Socket 連接,至少需要一對套接字,分為 clientSocket,serverSocket 連接分為3個步驟:

(1) 服務器監聽:服務器並不定位具體客戶端的套接字,而是時刻處於監聽狀態;

(2) 客戶端請求:客戶端的套接字要描述它要連接的服務器的套接字,提供地址和端口號,然后向服務器套接字提出連接請求;

(3) 連接確認:當服務器套接字收到客戶端套接字發來的請求后,就響應客戶端套接字的請求,並建立一個新的線程,把服務器端的套接字的描述發給客戶端。一旦客戶端確認了此描述,就正式建立連接。而服務器套接字繼續處於監聽狀態,繼續接收其他客戶端套接字的連接請求.

Socket為長連接:通常情況下Socket 連接就是 TCP 連接,因此 Socket 連接一旦建立,通訊雙方開始互發數據內容,直到雙方斷開連接。在實際應用中,由於網絡節點過多,在傳輸過程中,會被節點斷開連接,因此要通過輪詢高速網絡,該節點處於活躍狀態。

 

很多情況下,都是需要服務器端向客戶端主動推送數據,保持客戶端與服務端的實時同步。

若雙方是 Socket 連接,可以由服務器直接向客戶端發送數據。

若雙方是 HTTP 連接,則服務器需要等客戶端發送請求后,才能將數據回傳給客戶端。

因此,客戶端定時向服務器端發送請求,不僅可以保持在線,同時也詢問服務器是否有新數據,如果有就將數據傳給客戶端。

 

 

參考:HTTP 和 SOCKET 的區別

參考:Http、Socket、WebSocket之間聯系與區別 

參考:Socket和Http之間的區別和概述


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM