TCP/IP協議棧主要分為四層:應用層、傳輸層、網絡層、數據鏈路層,
每層都有相應的協議,如下圖
IP:
網絡層協議;(高速公路)
TCP和UDP:
傳輸層協議;(卡車)
HTTP:
應用層協議;(貨物)。HTTP(超文本傳輸協議)是利用TCP在兩臺電腦(通常是Web服務器和客戶端)之間傳輸信息的協議??蛻舳耸褂肳eb瀏覽器發起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年成為國際標準。所有瀏覽器都已經支持了。
它的最大特點就是,服務器可以主動向客戶端推送信息,客戶端也可以主動向服務器發送信息,是真正的雙向平等對話,屬于服務器推送技術的一種。