WebSocket於HTTP 、WebSocket與Socket的區別
最近在做一個IM 的專案,最近對於這塊的理解比較模糊,這裡對他們的不同和相同做一個區分,但是由於這個專案需要在IOS、Android和Web中多平臺,最後選擇了WebSocket;
這裡有一張圖詳細介紹了 TCP/IP 協議族中的各個協議在 OSI模型 中的分佈,一圖勝千言(下圖來自 科來)
1. WebSocket介紹
原理
WebSocket同HTTP一樣也是應用層的協議,但是它是一種雙向通訊協議,是建立在TCP之上的。
連線過程 —— 握手過程
-
- 瀏覽器、伺服器建立TCP連線,三次握手。這是通訊的基礎,傳輸控制層,若失敗後續都不執行。
-
- TCP連線成功後,瀏覽器通過HTTP協議向伺服器傳送WebSocket支援的版本號等資訊。(開始前的HTTP握手)
-
- 伺服器收到客戶端的握手請求後,同樣採用HTTP協議回饋資料。
-
- 當收到了連線成功的訊息後,通過TCP通道進行傳輸通訊
2. WebSocket於HTTP
相同點
-
- 都是應用層協議基於TCP協議來傳輸資料的,都是可靠性傳輸協議。
-
- 都是應用層協議。
不同點
-
- WebSocket是雙向通訊協議,模擬Socket協議,可以雙向傳送或接受資訊。HTTP是單向的。
-
- WebSocket是需要握手進行建立連線的。
聯絡
WebSocket在建立握手時,資料是通過HTTP傳輸的。但是建立之後,在真正傳輸時候是不需要HTTP協議的。
3.WebSocket與Socket的關係
Socket其實並不是一個協議,而是為了方便使用TCP或UDP而抽象出來的一層,是位於應用層和傳輸控制層之間的一組介面,它工作在 OSI 模型會話層(第5層),是為了方便大家直接使用更底層協議(一般是 TCP 或 UDP )而存在的一個抽象層。
Socket是應用層與TCP/IP協議族通訊的中間軟體抽象層,它是一組介面。在設計模式中,Socket其實就是一個門面模式,它把複雜的TCP/IP協議族隱藏在Socket介面後面,對使用者來說,一組簡單的介面就是全部,讓Socket去組織資料,以符合指定的協議。
當兩臺主機通訊時,必須通過Socket連線,Socket則利用TCP/IP協議建立TCP連線。TCP連線則更依靠於底層的IP協議,IP協議的連線則依賴於鏈路層等更低層次。
區別
Socket是傳輸控制層協議,WebSocket是應用層協議。