HTTP、TCP與UDP蔓同、Socket與Websocket之間的聯(lián)系與區(qū)別

TCP/IP協(xié)議(Transmission Control Protocol/InternetProtocol):網(wǎng)絡(luò)通訊協(xié)議饶辙,是Internet最基本的協(xié)議、Internet國(guó)際互聯(lián)網(wǎng)絡(luò)的基礎(chǔ)斑粱,由網(wǎng)絡(luò)層的IP協(xié)議和傳輸層的TCP協(xié)議組成弃揽。協(xié)議采用了4層的層級(jí)結(jié)構(gòu),每一層都呼叫它的下一層所提供的協(xié)議來(lái)完成自己的需求珊佣。
通俗而言:TCP負(fù)責(zé)發(fā)現(xiàn)傳輸?shù)膯?wèn)題蹋宦,一有問(wèn)題就發(fā)出信號(hào),要求重新傳輸咒锻,直到所有數(shù)據(jù)安全正確地傳輸?shù)侥康牡乩淙摺6鳬P是給因特網(wǎng)的每一臺(tái)聯(lián)網(wǎng)設(shè)備規(guī)定一個(gè)地址。

TCP/IP協(xié)議棧主要分為四層:應(yīng)用層惑艇、傳輸層蒿辙、網(wǎng)絡(luò)層、數(shù)據(jù)鏈路層,

每層都有相應(yīng)的協(xié)議滨巴,如圖
image.png

概念理解:

  • IP:網(wǎng)絡(luò)層協(xié)議思灌;(高速公路)
  • TCP和UDP:傳輸層協(xié)議;(卡車(chē))
  • TCP/IP:代表傳輸控制協(xié)議/網(wǎng)際協(xié)議恭取,指的是一系列協(xié)議泰偿,TCP/IP 模型在 OSI 模型的基礎(chǔ)上進(jìn)行了簡(jiǎn)化,變成了四層蜈垮,從下到上分別為:網(wǎng)絡(luò)接口層耗跛、網(wǎng)絡(luò)層裕照、傳輸層、應(yīng)用層调塌。
  • SOCKET:套接字晋南,TCP/IP網(wǎng)絡(luò)的API。(港口碼頭/車(chē)站)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ò)中通信姜凄。
  • HTTP:應(yīng)用層協(xié)議政溃;(貨物)HTTP(超文本傳輸協(xié)議)是利用TCP在兩臺(tái)電腦(通常是Web服務(wù)器和客戶端)之間傳輸信息的協(xié)議√恚客戶端使用Web瀏覽器發(fā)起HTTP請(qǐng)求給Web服務(wù)器玩祟,Web服務(wù)器發(fā)送被請(qǐng)求的信息給客戶端。
  • WebSocket:WebSocket protocol 是HTML5一種新的協(xié)議屿聋。它實(shí)現(xiàn)了瀏覽器與服務(wù)器全雙工通信(full-duplex)。一開(kāi)始的握手需要借助HTTP請(qǐng)求完成藏鹊。
    WebSokcet目的:即時(shí)通訊润讥,替代輪詢。
    網(wǎng)站上的即時(shí)通訊是很常見(jiàn)的盘寡,比如網(wǎng)頁(yè)的QQ楚殿,聊天系統(tǒng)等。按照以往的技術(shù)能力通常是采用輪詢竿痰、Comet技術(shù)解決脆粥。
    HTTP協(xié)議是非持久化的,單向的網(wǎng)絡(luò)協(xié)議影涉,在建立連接后只允許瀏覽器向服務(wù)器發(fā)出請(qǐng)求后变隔,服務(wù)器才能返回相應(yīng)的數(shù)據(jù)。當(dāng)需要即時(shí)通訊時(shí)蟹倾,通過(guò)輪詢?cè)谔囟ǖ臅r(shí)間間隔(如1秒)匣缘,由瀏覽器向服務(wù)器發(fā)送Request請(qǐng)求,然后將最新的數(shù)據(jù)返回給瀏覽器鲜棠。這樣的方法最明顯的缺點(diǎn)就是需要不斷的發(fā)送請(qǐng)求肌厨,而且通常HTTP request的Header是非常長(zhǎng)的,為了傳輸一個(gè)很小的數(shù)據(jù) 需要付出巨大的代價(jià)豁陆,是很不合算的柑爸,占用了很多的寬帶。
    缺點(diǎn):會(huì)導(dǎo)致過(guò)多不必要的請(qǐng)求盒音,浪費(fèi)流量和服務(wù)器資源表鳍,每一次請(qǐng)求馅而、應(yīng)答,都浪費(fèi)了一定流量在相同的頭部信息上进胯。
    然而WebSocket的出現(xiàn)可以彌補(bǔ)這一缺點(diǎn)用爪。在WebSocket中,只需要服務(wù)器和瀏覽器通過(guò)HTTP協(xié)議進(jìn)行一個(gè)握手的動(dòng)作胁镐,然后單獨(dú)建立一條TCP的通信通道進(jìn)行數(shù)據(jù)的傳送偎血。

注:什么是單工、半雙工颇玷、全工通信?
信息只能單向傳送為單工就缆;
信息能雙向傳送但不能同時(shí)雙向傳送稱為半雙工帖渠;
信息能夠同時(shí)雙向傳送則稱為全雙工。

概念聯(lián)系與區(qū)別:

  • TCP與UDP:TCP竭宰,傳輸控制協(xié)議空郊,Transmission Control Protocol):(類(lèi)似打電話) 面向連接、傳輸可靠(保證數(shù)據(jù)正確性)切揭、有序(保證數(shù)據(jù)順序)狞甚、傳輸大量數(shù)據(jù)(流模式)、速度慢、對(duì)系統(tǒng)資源的要求多,程序結(jié)構(gòu)較復(fù)雜邑跪,每一條TCP連接只能是點(diǎn)到點(diǎn)的鹊碍,TCP首部開(kāi)銷(xiāo)20字節(jié)。 UDP,(用戶數(shù)據(jù)報(bào)協(xié)議,User Data Protocol):(類(lèi)似發(fā)短信)面向非連接 、傳輸不可靠(可能丟包)春霍、無(wú)序、傳輸少量數(shù)據(jù)(數(shù)據(jù)報(bào)模式)叶眉、速度快终畅,對(duì)系統(tǒng)資源的要求少,程序結(jié)構(gòu)較簡(jiǎn)單 竟闪, UDP支持一對(duì)一离福,一對(duì)多,多對(duì)一和多對(duì)多的交互通信炼蛤, UDP的首部開(kāi)銷(xiāo)小妖爷,只有8個(gè)字節(jié)。

tcp三次握手建立連接:
第一次握手:客戶端發(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)哲思,完成三次握手。
握手過(guò)程中傳送的包里不包含數(shù)據(jù)吩案,三次握手完畢后棚赔,客戶端與服務(wù)器才正式開(kāi)始傳送數(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)過(guò)三次“對(duì)話”之后,主機(jī)A才向主機(jī)B正式發(fā)送數(shù)據(jù)肩袍。

  • HTTP與WebSocket
    相同點(diǎn):1. 都是一樣基于TCP的杭棵,都是可靠性傳輸協(xié)議。2. 都是應(yīng)用層協(xié)議氛赐。
    不同點(diǎn):1. WebSocket是雙向通信協(xié)議魂爪,模擬Socket協(xié)議先舷,可以雙向發(fā)送或接受信息。HTTP是單向的滓侍。2. WebSocket是需要握手進(jìn)行建立連接的蒋川。
    聯(lián)系:WebSocket在建立握手時(shí),數(shù)據(jù)是通過(guò)HTTP傳輸?shù)牧冒省5墙⒅筠嗲颍谡嬲齻鬏敃r(shí)候是不需要HTTP協(xié)議的。

傳統(tǒng) HTTP 請(qǐng)求響應(yīng)客戶端服務(wù)器交互圖:
image.png

WebSocket 請(qǐng)求響應(yīng)客戶端服務(wù)器交互圖:
image.png

上圖對(duì)比可以看出浇衬,相對(duì)于傳統(tǒng) HTTP 每次請(qǐng)求-應(yīng)答都需要客戶端與服務(wù)端建立連接的模式懒构,WebSocket 是類(lèi)似 Socket 的 TCP 長(zhǎng)連接的通訊模式,一旦 WebSocket 連接建立后耘擂,后續(xù)數(shù)據(jù)都以幀序列的形式傳輸胆剧。在客戶端斷開(kāi) WebSocket 連接或 Server 端斷掉連接前,不需要客戶端和服務(wù)端重新發(fā)起連接請(qǐng)求醉冤。在海量并發(fā)及客戶端與服務(wù)器交互負(fù)載流量大的情況下秩霍,極大的節(jié)省了網(wǎng)絡(luò)帶寬資源的消耗,有明顯的性能優(yōu)勢(shì)蚁阳,且客戶端發(fā)送和接受消息是在同一個(gè)持久連接上發(fā)起铃绒,實(shí)時(shí)性優(yōu)勢(shì)明顯。

我們?cè)偻ㄟ^(guò)客戶端和服務(wù)端交互的報(bào)文看一下 WebSocket 通訊與傳統(tǒng) HTTP 的不同:
在客戶端螺捐,new WebSocket 實(shí)例化一個(gè)新的 WebSocket 客戶端對(duì)象颠悬,連接類(lèi)似 ws://yourdomain:port/path 的服務(wù)端 WebSocket URL,WebSocket 客戶端對(duì)象會(huì)自動(dòng)解析并識(shí)別為 WebSocket 請(qǐng)求定血,從而連接服務(wù)端端口赔癌,執(zhí)行雙方握手過(guò)程,客戶端發(fā)送數(shù)據(jù)格式類(lèi)似:
1澜沟、 WebSocket 客戶端連接報(bào)文:

GET /webfin/websocket/ HTTP/1.1
Host: localhost
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: xqBt3ImNzJbYqRINxEFlkg==
Origin: 
http://localhost
:8080
Sec-WebSocket-Version: 13

可以看到灾票,客戶端發(fā)起的 WebSocket 連接報(bào)文類(lèi)似傳統(tǒng) HTTP 報(bào)文,”Upgrade:websocket”參數(shù)值表明這是 WebSocket 類(lèi)型請(qǐng)求茫虽,“Sec-WebSocket-Key”是 WebSocket 客戶端發(fā)送的一個(gè) base64 編碼的密文刊苍,要求服務(wù)端必須返回一個(gè)對(duì)應(yīng)加密的“Sec-WebSocket-Accept”應(yīng)答,否則客戶端會(huì)拋出“Error during WebSocket handshake”錯(cuò)誤濒析,并關(guān)閉連接正什。
2、WebSocket 服務(wù)端響應(yīng)報(bào)文:

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: K7DJLdLooIwIG/MOpvWFB3y3FE8=

“Sec-WebSocket-Accept”的值是服務(wù)端采用與客戶端一致的密鑰計(jì)算出來(lái)后返回客戶端的,“HTTP/1.1 101 Switching Protocols”表示服務(wù)端接受 WebSocket 協(xié)議的客戶端連接号杏,經(jīng)過(guò)這樣的請(qǐng)求-響應(yīng)處理后埠忘,客戶端服務(wù)端的 WebSocket 連接握手成功, 后續(xù)就可以進(jìn)行 TCP 通訊了。

在開(kāi)發(fā)方面,WebSocket API 也十分簡(jiǎn)單莹妒,我們只需要實(shí)例化 WebSocket名船,創(chuàng)建連接,然后服務(wù)端和客戶端就可以相互發(fā)送和響應(yīng)消息旨怠。

  • WebSocket與Socket

Socket是傳輸控制層接口渠驼,WebSocket是應(yīng)用層協(xié)議。

可以把WebSocket想象成HTTP(應(yīng)用層)鉴腻,HTTP和Socket什么關(guān)系迷扇,WebSocket和Socket就是什么關(guān)系。
當(dāng)兩臺(tái)主機(jī)通信時(shí)爽哎,必須通過(guò)Socket連接蜓席,Socket則利用TCP/IP協(xié)議建立TCP連接。TCP連接則更依靠于底層的IP協(xié)議课锌,IP協(xié)議的連接則依賴于鏈路層等更低層次厨内。

WebSocket就像HTTP一樣,則是一個(gè)典型的應(yīng)用層協(xié)議渺贤。
image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末雏胃,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子志鞍,更是在濱河造成了極大的恐慌瞭亮,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,816評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件固棚,死亡現(xiàn)場(chǎng)離奇詭異统翩,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)此洲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)厂汗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人黍翎,你說(shuō)我怎么就攤上這事⊙薮裕” “怎么了匣掸?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,300評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)氮双。 經(jīng)常有香客問(wèn)我碰酝,道長(zhǎng),這世上最難降的妖魔是什么戴差? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,780評(píng)論 1 285
  • 正文 為了忘掉前任送爸,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘袭厂。我一直安慰自己墨吓,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,890評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布纹磺。 她就那樣靜靜地躺著帖烘,像睡著了一般。 火紅的嫁衣襯著肌膚如雪橄杨。 梳的紋絲不亂的頭發(fā)上秘症,一...
    開(kāi)封第一講書(shū)人閱讀 50,084評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音式矫,去河邊找鬼乡摹。 笑死,一個(gè)胖子當(dāng)著我的面吹牛采转,可吹牛的內(nèi)容都是我干的聪廉。 我是一名探鬼主播,決...
    沈念sama閱讀 39,151評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼氏义,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼锄列!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起惯悠,我...
    開(kāi)封第一講書(shū)人閱讀 37,912評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤邻邮,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后克婶,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體筒严,經(jīng)...
    沈念sama閱讀 44,355評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,666評(píng)論 2 327
  • 正文 我和宋清朗相戀三年情萤,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了鸭蛙。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,809評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡筋岛,死狀恐怖娶视,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情睁宰,我是刑警寧澤肪获,帶...
    沈念sama閱讀 34,504評(píng)論 4 334
  • 正文 年R本政府宣布,位于F島的核電站柒傻,受9級(jí)特大地震影響孝赫,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜红符,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,150評(píng)論 3 317
  • 文/蒙蒙 一青柄、第九天 我趴在偏房一處隱蔽的房頂上張望伐债。 院中可真熱鬧,春花似錦致开、人聲如沸峰锁。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)祖今。三九已至,卻和暖如春拣技,著一層夾襖步出監(jiān)牢的瞬間千诬,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,121評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工膏斤, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留徐绑,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,628評(píng)論 2 362
  • 正文 我出身青樓莫辨,卻偏偏與公主長(zhǎng)得像傲茄,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子沮榜,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,724評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容