TCP/IP協(xié)議棧主要分為四層:應(yīng)用層、傳輸層膜蛔、網(wǎng)絡(luò)層坛猪、數(shù)據(jù)鏈路層,
每層都有相應(yīng)的協(xié)議,如下圖:
網(wǎng)絡(luò)層協(xié)議皂股;(高速公路)
傳輸層協(xié)議墅茉;(卡車)
應(yīng)用層協(xié)議;(貨物)呜呐。HTTP(超文本傳輸協(xié)議)是利用TCP在兩臺(tái)電腦(通常是Web服務(wù)器和客戶端)之間傳輸信息的協(xié)議就斤。客戶端使用Web瀏覽器發(fā)起HTTP請(qǐng)求給Web服務(wù)器蘑辑,Web服務(wù)器發(fā)送被請(qǐng)求的信息給客戶端洋机。
套接字,TCP/IP網(wǎng)絡(luò)的API洋魂。(港口碼頭/車站)Socket是應(yīng)用層與TCP/IP協(xié)議族通信的中間軟件抽象層绷旗,它是一組接口喜鼓。socket是在應(yīng)用層和傳輸層之間的一個(gè)抽象層,它把TCP/IP層復(fù)雜的操作抽象為幾個(gè)簡(jiǎn)單的接口供應(yīng)用層調(diào)用已實(shí)現(xiàn)進(jìn)程在網(wǎng)絡(luò)中通信刁标。
代表傳輸控制協(xié)議/網(wǎng)際協(xié)議颠通,指的是一系列協(xié)議,TCP/IP 模型在 OSI 模型的基礎(chǔ)上進(jìn)行了簡(jiǎn)化膀懈,變成了四層顿锰,從下到上分別為:網(wǎng)絡(luò)接口層、網(wǎng)絡(luò)層启搂、傳輸層硼控、應(yīng)用層。與 OSI 體系結(jié)構(gòu)對(duì)比如下:?
(傳輸控制協(xié)議胳赌,Transmission Control Protocol):(類似打電話)?
面向連接牢撼、傳輸可靠(保證數(shù)據(jù)正確性)、有序(保證數(shù)據(jù)順序)疑苫、傳輸大量數(shù)據(jù)(流模式)熏版、速度慢、對(duì)系統(tǒng)資源的要求多捍掺,程序結(jié)構(gòu)較復(fù)雜撼短,?
每一條TCP連接只能是點(diǎn)到點(diǎn)的,?
TCP首部開銷20字節(jié)挺勿。
(用戶數(shù)據(jù)報(bào)協(xié)議曲横,User Data Protocol):(類似發(fā)短信)?
面向非連接 、傳輸不可靠(可能丟包)不瓶、無序禾嫉、傳輸少量數(shù)據(jù)(數(shù)據(jù)報(bào)模式)、速度快蚊丐,對(duì)系統(tǒng)資源的要求少熙参,程序結(jié)構(gòu)較簡(jiǎn)單 ,?
UDP支持一對(duì)一吠撮,一對(duì)多尊惰,多對(duì)一和多對(duì)多的交互通信,?
UDP的首部開銷小泥兰,只有8個(gè)字節(jié)弄屡。
第一次握手:客戶端發(fā)送syn包(seq=x)到服務(wù)器,并進(jìn)入SYN_SEND狀態(tài)鞋诗,等待服務(wù)器確認(rèn)膀捷;?
第二次握手:服務(wù)器收到syn包,必須確認(rèn)客戶的SYN(ack=x+1)削彬,同時(shí)自己也發(fā)送一個(gè)SYN包(seq=y)全庸,即SYN+ACK包秀仲,此時(shí)服務(wù)器進(jìn)入SYN_RECV狀態(tài);?
第三次握手:客戶端收到服務(wù)器的SYN+ACK包壶笼,向服務(wù)器發(fā)送確認(rèn)包ACK(ack=y+1)神僵,此包發(fā)送完畢,客戶端和服務(wù)器進(jìn)入ESTABLISHED狀態(tài)覆劈,完成三次握手保礼。?
握手過程中傳送的包里不包含數(shù)據(jù),三次握手完畢后责语,客戶端與服務(wù)器才正式開始傳送數(shù)據(jù)炮障。理想狀態(tài)下,TCP連接一旦建立坤候,在通信雙方中的任何一方主動(dòng)關(guān)閉連接之前胁赢,TCP 連接都將被一直保持下去。
主機(jī)A向主機(jī)B發(fā)出連接請(qǐng)求數(shù)據(jù)包:“我想給你發(fā)數(shù)據(jù)白筹,可以嗎智末?”,這是第一次對(duì)話徒河;?
主機(jī)B向主機(jī)A發(fā)送同意連接和要求同步(同步就是兩臺(tái)主機(jī)一個(gè)在發(fā)送吹害,一個(gè)在接收,協(xié)調(diào)工作)的數(shù)據(jù)包:“可以虚青,你什么時(shí)候發(fā)?”螺男,這是第二次對(duì)話棒厘;?
主機(jī)A再發(fā)出一個(gè)數(shù)據(jù)包確認(rèn)主機(jī)B的要求同步:“我現(xiàn)在就發(fā),你接著吧下隧!”奢人,這是第三次對(duì)話。?
三次“對(duì)話”的目的是使數(shù)據(jù)包的發(fā)送和接收同步淆院,經(jīng)過三次“對(duì)話”之后何乎,主機(jī)A才向主機(jī)B正式發(fā)送數(shù)據(jù)。
Websocket協(xié)議解決了服務(wù)器與客戶端全雙工通信的問題土辩。
注:什么是單工支救、半雙工、全工通信拷淘??
信息只能單向傳送為單工各墨;?
信息能雙向傳送但不能同時(shí)雙向傳送稱為半雙工;?
信息能夠同時(shí)雙向傳送則稱為全雙工启涯。
websocket協(xié)議解析?
wensocket協(xié)議包含兩部分:一部分是“握手”贬堵,一部分是“數(shù)據(jù)傳輸”恃轩。
可以把WebSocket想象成HTTP(應(yīng)用層),HTTP和Socket什么關(guān)系黎做,WebSocket和Socket就是什么關(guān)系叉跛。
HTTP 協(xié)議有一個(gè)缺陷:通信只能由客戶端發(fā)起,做不到服務(wù)器主動(dòng)向客戶端推送信息蒸殿。
WebSocket 協(xié)議在2008年誕生筷厘,2011年成為國(guó)際標(biāo)準(zhǔn)。所有瀏覽器都已經(jīng)支持了伟桅。?
它的最大特點(diǎn)就是敞掘,服務(wù)器可以主動(dòng)向客戶端推送信息,客戶端也可以主動(dòng)向服務(wù)器發(fā)送信息楣铁,是真正的雙向平等對(duì)話玖雁,屬于服務(wù)器推送技術(shù)的一種。