HTTP、Socket、Web Socket的聯繫與區別

定義

1、TCP/IP協議棧主要分爲四層:應用層、傳輸層、網絡層、數據鏈路層;
2、IP協議:P是Internet Protocol(網際互連協議)的縮寫,是TCP/IP體系中的網絡層協議
3、TCP協議:傳輸控制協議(TCP,Transmission Control Protocol)是一種面向連接的、可靠的、基於字節流的傳輸層通信協議
4、UDP協議:Internet 協議集支持一個無連接的傳輸層通信協議,該協議稱爲用戶數據報協議(UDP,User Datagram Protocol)。UDP 爲應用程序提供了一種無需建立連接就可以發送封裝的 IP 數據包的方法。
5、Socket:Socket其實並不是一個協議,而是爲了方便使用TCP/IP或UDP/IP而抽象出來的一層,是位於應用層和傳輸控制層之間的一組接口。
Socket連接即是所謂的長連接,理論上客戶端和服務端一旦建立連接,則不會主動斷掉;但是由於各種環境因素可能會是連接斷開。
6、HTTP協議:HTTP(Hyper Text Transfer Protocol)<超文本傳輸協議>的縮寫,是用於從WWW服務器傳輸超文本到本地瀏覽器的傳輸協議。HTTP是一個應用層協議,由請求和響應構成,是一個標準的個客戶端和服務器模型。
HTTP連接就是所謂的短連接,及客戶端向服務器發送一次請求,服務器端相應後連接即會斷掉。HTTP連接是建立在Socket連接之上。在實際的網絡棧中,Socket連接的確是HTTP連接的一部分。但是從HTTP協議看,它的連接一般是指它本身的那部分。
7、WebSocket協議:WebSocket是HTML5中的協議,是一個應用層協議。HTML5 Web Sockets規範定義了Web Sockets API,支持頁面使用Web Socket協議與遠程主機進行全雙工的通信。它引入了WebSocket接口並且定義了一個全雙工的通信通道,通過一個單一的套接字在Web上進行操作。HTML5 Web Sockets以最小的開銷高效地提供了Web連接。相較於經常需要使用推送實時數據到客戶端甚至通過維護兩個HTTP連接來模擬全雙工連接的舊的輪詢或長輪詢(Comet)來說,這就極大的減少了不必要的網絡流量與延遲。

WebSocket與Socket的關係

Socket是傳輸控制層接口,WebSocket是應用層協議。
當兩臺主機通信時,必須通過Socket連接,Socket則利用TCP/IP協議建立TCP連接。TCP連接則更依靠於底層的IP協議,IP協議的連接則依賴於鏈路層等更低層次。
在這裏插入圖片描述

HTTP協議與Socket的關係

HTTP協議就像WebSocket一樣,則是一個典型的應用層協議,所以HTTP協議與Socket的關係與WebSocket與Socket的關係是相同的。
WebSocket在建立握手時,數據是通過HTTP傳輸的。但是建立之後,在真正傳輸時候是不需要HTTP協議的。

WebSocket與HTTP的關係

在這裏插入圖片描述
相同點:
1、都是一樣基於TCP/IP的,都是可靠性傳輸協議。
2、都是應用層協議。
不同點:
1、WebSocket是雙向通信協議,模擬Socket協議,可以雙向發送或接受信息。HTTP是單向的。
2、WebSocket是需要瀏覽器和服務器握手進行建立連接的。而http是瀏覽器發起向服務器的連接,服務器預先並不知道這個連接。
聯繫:
1、WebSocket在建立握手時,數據是通過HTTP傳輸的。但是建立之後,在真正傳輸時候是不需要HTTP協議的。

HTTP建立連接過程

1、客戶機與服務器通過Socket建立網絡連接。
2、建立連接後,客戶機發送一個請求給服務器,請求方式的格式爲:統一資源標識符(URL)、協議版本號,後邊是MIME信息包括請求修飾符、客戶機信息和可能的內容。
3、 服務器接到請求後,給予相應的響應信息,其格式爲一個狀態行,包括信息的協議版本號、一個成功或錯誤的代碼,後邊是MIME信息包括服務器信息、實體信息和可能的內容。
4、客戶端接收服務器所返回的信息通過瀏覽器顯示在用戶的顯示屏上,然後客戶機與服務器斷開連接。

WebSocket連接過程

1、步驟1:客戶端發起http請求,經過3次握手後,建立起TCP連接;http請求裏存放WebSocket支持的版本號等信息,如:Upgrade、Connection、WebSocket-Version等;
2、步驟2:服務器收到客戶端的握手請求後,同樣採用HTTP協議回饋數據;
3、步驟3:客戶端收到連接成功的消息後,開始藉助於TCP傳輸信道進行全雙工通信(此時使用的通信協議纔是真正使用了WebSocket協議)。

參考: [1]: https://www.cnblogs.com/aspirant/p/11334957.html [2]: https://blog.csdn.net/yamaxifeng_132/article/details/83583497 [3]:https://www.pianshen.com/article/9065189198/