弄明白socket和websocket

TCP/IP協(xié)議棧主要分為四層:應(yīng)用層、傳輸層磨隘、網(wǎng)絡(luò)層缤底、數(shù)據(jù)鏈路層,每層都有相應(yīng)的協(xié)議番捂,如下圖

IP:

網(wǎng)絡(luò)層協(xié)議个唧;(高速公路)

TCP和UDP:

傳輸層協(xié)議;(卡車)

HTTP:

應(yīng)用層協(xié)議设预;(貨物)徙歼。HTTP(超文本傳輸協(xié)議)是利用TCP在兩臺電腦(通常是Web服務(wù)器和客戶端)之間傳輸信息的協(xié)議”钫恚客戶端使用Web瀏覽器發(fā)起HTTP請求給Web服務(wù)器鲁沥,Web服務(wù)器發(fā)送被請求的信息給客戶端。

SOCKET:

套接字耕魄,TCP/IP網(wǎng)絡(luò)的API画恰。(港口碼頭/車站)Socket是應(yīng)用層與TCP/IP協(xié)議族通信的中間軟件抽象層,它是一組接口吸奴。socket是在應(yīng)用層和傳輸層之間的一個抽象層允扇,它把TCP/IP層復(fù)雜的操作抽象為幾個簡單的接口供應(yīng)用層調(diào)用已實(shí)現(xiàn)進(jìn)程在網(wǎng)絡(luò)中通信。

TCP/IP:

代表傳輸控制協(xié)議/網(wǎng)際協(xié)議则奥,指的是一系列協(xié)議考润,TCP/IP 模型在 OSI 模型的基礎(chǔ)上進(jìn)行了簡化,變成了四層读处,從下到上分別為:網(wǎng)絡(luò)接口層糊治、網(wǎng)絡(luò)層、傳輸層罚舱、應(yīng)用層井辜。

TCP/UDP區(qū)別:

TCP

(傳輸控制協(xié)議,Transmission Control Protocol):(類似打電話)

面向連接管闷、傳輸可靠(保證數(shù)據(jù)正確性)粥脚、有序(保證數(shù)據(jù)順序)、傳輸大量數(shù)據(jù)(流模式)包个、速度慢刷允、對系統(tǒng)資源的要求多,程序結(jié)構(gòu)較復(fù)雜碧囊,

每一條TCP連接只能是點(diǎn)到點(diǎn)的树灶,

TCP首部開銷20字節(jié)。

UDP

(用戶數(shù)據(jù)報協(xié)議糯而,User Data Protocol):(類似發(fā)短信)

面向非連接 天通、傳輸不可靠(可能丟包)、無序歧蒋、傳輸少量數(shù)據(jù)(數(shù)據(jù)報模式)土砂、速度快,對系統(tǒng)資源的要求少谜洽,程序結(jié)構(gòu)較簡單 萝映,

UDP支持一對一,一對多阐虚,多對一和多對多的交互通信序臂,

UDP的首部開銷小,只有8個字節(jié)实束。


WebSocket protocol 是HTML5一種新的協(xié)議奥秆。它實(shí)現(xiàn)了瀏覽器與服務(wù)器全雙工通信(full-duplex)。一開始的握手需要借助HTTP請求完成咸灿」苟————百度百科

目的:即時通訊,替代輪詢

Websocket協(xié)議解決了服務(wù)器與客戶端全雙工通信的問題避矢。

注:什么是單工悼瘾、半雙工、全工通信审胸?

信息只能單向傳送為單工亥宿;

信息能雙向傳送但不能同時雙向傳送稱為半雙工;

信息能夠同時雙向傳送則稱為全雙工砂沛。

websocket協(xié)議解析

websocket協(xié)議包含兩部分:一部分是“握手”烫扼,一部分是“數(shù)據(jù)傳輸”。

應(yīng)用場景:網(wǎng)站上的即時通訊是很常見的碍庵,比如網(wǎng)頁的QQ映企,聊天系統(tǒng)等。按照以往的技術(shù)能力通常是采用輪詢静浴、Comet技術(shù)解決卑吭。

HTTP協(xié)議是非持久化的,單向的網(wǎng)絡(luò)協(xié)議马绝,在建立連接后只允許瀏覽器向服務(wù)器發(fā)出請求后豆赏,服務(wù)器才能返回相應(yīng)的數(shù)據(jù)。當(dāng)需要即時通訊時富稻,通過輪詢在特定的時間間隔(如1秒)掷邦,由瀏覽器向服務(wù)器發(fā)送Request請求,然后將最新的數(shù)據(jù)返回給瀏覽器椭赋。這樣的方法最明顯的缺點(diǎn)就是需要不斷的發(fā)送請求抚岗,而且通常HTTP request的Header是非常長的,為了傳輸一個很小的數(shù)據(jù) 需要付出巨大的代價哪怔,是很不合算的宣蔚,占用了很多的寬帶向抢。

缺點(diǎn):會導(dǎo)致過多不必要的請求,浪費(fèi)流量和服務(wù)器資源胚委,每一次請求挟鸠、應(yīng)答,都浪費(fèi)了一定流量在相同的頭部信息上

然而WebSocket的出現(xiàn)可以彌補(bǔ)這一缺點(diǎn)亩冬。在WebSocket中艘希,只需要服務(wù)器和瀏覽器通過HTTP協(xié)議進(jìn)行一個握手的動作,然后單獨(dú)建立一條TCP的通信通道進(jìn)行數(shù)據(jù)的傳送硅急。

原理:WebSocket同HTTP一樣也是應(yīng)用層的協(xié)議覆享,但是它是一種雙向通信協(xié)議,是建立在TCP之上的营袜。

連接過程 —— 握手過程

1. 瀏覽器撒顿、服務(wù)器建立TCP連接,三次握手荚板。這是通信的基礎(chǔ)核蘸,傳輸控制層,若失敗后續(xù)都不執(zhí)行啸驯。

2. TCP連接成功后客扎,瀏覽器通過HTTP協(xié)議向服務(wù)器傳送WebSocket支持的版本號等信息。(開始前的HTTP握手)

3. 服務(wù)器收到客戶端的握手請求后罚斗,同樣采用HTTP協(xié)議回饋數(shù)據(jù)徙鱼。

4. 當(dāng)收到了連接成功的消息后,通過TCP通道進(jìn)行傳輸通信针姿。

WebSocket與HTTP的關(guān)系

相同點(diǎn)

都是一樣基于TCP的袱吆,都是可靠性傳輸協(xié)議。

都是應(yīng)用層協(xié)議距淫。

不同點(diǎn)

WebSocket是雙向通信協(xié)議绞绒,模擬Socket協(xié)議,可以雙向發(fā)送或接受信息榕暇。HTTP是單向的蓬衡。

WebSocket是需要握手進(jìn)行建立連接的。

HTTP 協(xié)議有一個缺陷:通信只能由客戶端發(fā)起彤枢,做不到服務(wù)器主動向客戶端推送信息狰晚。

WebSocket 協(xié)議在2008年誕生,2011年成為國際標(biāo)準(zhǔn)缴啡。所有瀏覽器都已經(jīng)支持了壁晒。

它的最大特點(diǎn)就是,服務(wù)器可以主動向客戶端推送信息业栅,客戶端也可以主動向服務(wù)器發(fā)送信息秒咐,是真正的雙向平等對話谬晕,屬于服務(wù)器推送技術(shù)的一種。

相對于傳統(tǒng) HTTP 每次請求-應(yīng)答都需要客戶端與服務(wù)端建立連接的模式携取,WebSocket 是類似 Socket 的 TCP 長連接的通訊模式攒钳,一旦 WebSocket 連接建立后,后續(xù)數(shù)據(jù)都以幀序列的形式傳輸歹茶。在客戶端斷開 WebSocket 連接或 Server 端斷掉連接前,不需要客戶端和服務(wù)端重新發(fā)起連接請求你弦。在海量并發(fā)及客戶端與服務(wù)器交互負(fù)載流量大的情況下惊豺,極大的節(jié)省了網(wǎng)絡(luò)帶寬資源的消耗,有明顯的性能優(yōu)勢禽作,且客戶端發(fā)送和接受消息是在同一個持久連接上發(fā)起尸昧,實(shí)時性優(yōu)勢明顯。

聯(lián)系

WebSocket在建立握手時旷偿,數(shù)據(jù)是通過HTTP傳輸?shù)呐胨住5墙⒅螅谡嬲齻鬏敃r候是不需要HTTP協(xié)議的萍程。

WebSocket與Socket的關(guān)系

Socket其實(shí)并不是一個協(xié)議幢妄,而是為了方便使用TCP或UDP而抽象出來的一層,是位于應(yīng)用層和傳輸控制層之間的一組接口茫负。Socket是應(yīng)用層與TCP/IP協(xié)議族通信的中間軟件抽象層蕉鸳,它是一組接口。在設(shè)計(jì)模式中忍法,Socket其實(shí)就是一個門面模式潮尝,它把復(fù)雜的TCP/IP協(xié)議族隱藏在Socket接口后面,對用戶來說饿序,一組簡單的接口就是全部勉失,讓Socket去組織數(shù)據(jù),以符合指定的協(xié)議原探。當(dāng)兩臺主機(jī)通信時乱凿,必須通過Socket連接,Socket則利用TCP/IP協(xié)議建立TCP連接咽弦。TCP連接則更依靠于底層的IP協(xié)議告匠,IP協(xié)議的連接則依賴于鏈路層等更低層次。WebSocket則是一個典型的應(yīng)用層協(xié)議离唬。Socket是傳輸控制層協(xié)議后专,WebSocket是應(yīng)用層協(xié)議。

HTML5與WebSocket的關(guān)系

WebSocket API 是 HTML5 標(biāo)準(zhǔn)的一部分输莺, 但這并不代表 WebSocket 一定要用在 HTML 中戚哎,或者只能在基于瀏覽器的應(yīng)用程序中使用裸诽。實(shí)際上,許多語言型凳、框架和服務(wù)器都提供了 WebSocket 支持丈冬,例如:

* 基于 C 的 libwebsocket.org

* 基于 Node.js 的 Socket.io

* 基于 Python 的 ws4py

* 基于 C++ 的 WebSocket++

* Apache 對 WebSocket 的支持: Apache Module mod_proxy_wstunnel

* Nginx 對 WebSockets 的支持: NGINX as a WebSockets Proxy 、 NGINX Announces Support for WebSocket Protocol 甘畅、WebSocket proxying

* lighttpd 對 WebSocket 的支持:mod_websocket

WebSocket 機(jī)制

WebSocket 是 HTML5 一種新的協(xié)議埂蕊。它實(shí)現(xiàn)了瀏覽器與服務(wù)器全雙工通信,能更好的節(jié)省服務(wù)器資源和帶寬并達(dá)到實(shí)時通訊疏唾,它建立在 TCP 之上蓄氧,同 HTTP 一樣通過 TCP 來傳輸數(shù)據(jù),但是它和 HTTP 最大不同是:

WebSocket 是一種雙向通信協(xié)議槐脏,在建立連接后喉童,WebSocket 服務(wù)器和 Browser/Client Agent 都能主動的向?qū)Ψ桨l(fā)送或接收數(shù)據(jù),就像 Socket 一樣顿天;WebSocket 需要類似 TCP 的客戶端和服務(wù)器端通過握手連接堂氯,連接成功后才能相互通信。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末牌废,一起剝皮案震驚了整個濱河市咽白,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌鸟缕,老刑警劉巖局扶,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異叁扫,居然都是意外死亡三妈,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進(jìn)店門莫绣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來畴蒲,“玉大人,你說我怎么就攤上這事对室∧T铮” “怎么了?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵掩宜,是天一觀的道長蔫骂。 經(jīng)常有香客問我,道長牺汤,這世上最難降的妖魔是什么辽旋? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上补胚,老公的妹妹穿的比我還像新娘码耐。我一直安慰自己,他們只是感情好溶其,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布骚腥。 她就那樣靜靜地躺著,像睡著了一般瓶逃。 火紅的嫁衣襯著肌膚如雪束铭。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天厢绝,我揣著相機(jī)與錄音契沫,去河邊找鬼。 笑死代芜,一個胖子當(dāng)著我的面吹牛埠褪,可吹牛的內(nèi)容都是我干的浓利。 我是一名探鬼主播挤庇,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼贷掖!你這毒婦竟也來了嫡秕?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤苹威,失蹤者是張志新(化名)和其女友劉穎昆咽,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體牙甫,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡掷酗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了窟哺。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片泻轰。...
    茶點(diǎn)故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖且轨,靈堂內(nèi)的尸體忽然破棺而出浮声,到底是詐尸還是另有隱情,我是刑警寧澤旋奢,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布泳挥,位于F島的核電站,受9級特大地震影響至朗,放射性物質(zhì)發(fā)生泄漏屉符。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望筑煮。 院中可真熱鬧辛蚊,春花似錦、人聲如沸真仲。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽秸应。三九已至虑凛,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間软啼,已是汗流浹背桑谍。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留祸挪,地道東北人锣披。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像贿条,于是被迫代替她去往敵國和親雹仿。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評論 2 354

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