1. 程式人生 > >TCP、UDP、HTTP、SOCKET、WebSocket之間的區別

TCP、UDP、HTTP、SOCKET、WebSocket之間的區別

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協議包含兩部分:一部分是“握手”,一部分是“資料傳輸”。

WebSocket和Socket區別

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

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

WebSocket 協議在2008年誕生,2011年成為國際標準。所有瀏覽器都已經支援了。
它的最大特點就是,伺服器可以主動向客戶端推送資訊,客戶端也可以主動向伺服器傳送資訊,是真正的雙向平等對話,屬於伺服器推送技術的一種。

參考: