網(wǎng)絡(luò)協(xié)議——Http粤蝎、Socket真仲、WebSocket

OSI模型

  • 應(yīng)用層:各種應(yīng)用層協(xié)議,Http诽里、WebSocket袒餐、FTP、SMTP等
  • 表示層:信息的語法語義以及他們的關(guān)聯(lián)谤狡,如加密解密灸眼、轉(zhuǎn)換翻譯、壓縮解壓縮
  • 會話層:不同機(jī)器上的用戶之間建立及管理會話
  • 傳輸層:接受上一層的數(shù)據(jù)墓懂,在必要的時候把數(shù)據(jù)進(jìn)行分割焰宣,并將這些數(shù)據(jù)提交給網(wǎng)絡(luò)層,且保證這些數(shù)據(jù)段有效到達(dá)對端捕仔。TCP匕积、UDP協(xié)議。
  • 網(wǎng)絡(luò)層:控制子網(wǎng)的運(yùn)行榜跌,如邏輯編址闪唆、分組傳輸、路由選擇钓葫。IP
    協(xié)議悄蕾。
  • 數(shù)據(jù)鏈路層:物理尋址,同時將原始比特流轉(zhuǎn)變?yōu)檫壿媯鬏斁€路。
  • 物理層:機(jī)械帆调、電子奠骄、定時接口通信信道上的原始比特流傳輸。

Http協(xié)議

Http協(xié)議番刊,超文本傳輸協(xié)議含鳞,web上一問一答的兩臺計算機(jī)之間遵循的通信規(guī)則。

  • 請求組成:請求行芹务、請求頭蝉绷、請求空行、請求主體
  • 響應(yīng)組成:響應(yīng)狀態(tài)行枣抱、響應(yīng)頭潜必、響應(yīng)空行、響應(yīng)正文

Socket協(xié)議

Socket是為了方便開發(fā)者直接使用更底層協(xié)議(一般是TCP或UDP)而存在的一個抽象層沃但。Socket實際上是對TCP/IP協(xié)議的封裝磁滚,本身并不是協(xié)議,而是一個調(diào)用接口(API)宵晚。
Socket的出現(xiàn)只是使得程序員更方便地使用TCP/IP協(xié)議棧而已垂攘,是對TCP/IP協(xié)議的抽象,從而形成了我們知道的一些最基本的函數(shù)接口淤刃,比如create晒他、listen、connect逸贾、accept陨仅、send、read和write铝侵。

主機(jī)A的應(yīng)用程序要能和主機(jī)B的應(yīng)用程序通信灼伤,必須通過Socket建立連接,而建立Socket連接必須需要底層TCP/IP協(xié)議來建立TCP連接咪鲜。建立TCP連接需要底層IP協(xié)議來尋找網(wǎng)絡(luò)中的主機(jī)狐赡。我們知道網(wǎng)絡(luò)層使用IP協(xié)議可以幫助我們根據(jù)IP地址來找到目標(biāo)主機(jī),但是一臺主機(jī)上可能運(yùn)行著多個應(yīng)用程序疟丙,如何才能與指定的應(yīng)用程序通信就要通過TCP或UDP的地址也就是端口號來指定颖侄。這樣就可以通過一個Socket實例唯一代表一個主機(jī)上的一個應(yīng)用程序的通信鏈路了。

WebSocket協(xié)議

基于Http協(xié)議的擴(kuò)展享郊,支持長連接览祖,用于建立客戶端和服務(wù)器的雙向通道。

而傳統(tǒng)的輪詢方式(即采用http協(xié)議不斷發(fā)送請求)的缺點:浪費(fèi)流量(http請求頭比較大)炊琉、浪費(fèi)資源(沒有更新也要請求)展蒂、消耗服務(wù)器
CPU占用(沒有信息也要接收請求)。

WebSocket是保證只要在服務(wù)端和客戶端建立連接后任何一端發(fā)起消息,相互推送消息玄货,效率也是極大的提高了,并且服務(wù)端和客戶端之間的標(biāo)頭信息很小悼泌,可以降低服務(wù)端的資源浪費(fèi)松捉。

Http、Socket與TCP

TCP協(xié)議對應(yīng)與傳輸層馆里,而HTTP協(xié)議對應(yīng)于應(yīng)用層隘世,從本質(zhì)上來說,二者沒有可比性鸠踪。Http協(xié)議是建立在TCP協(xié)議基礎(chǔ)之上的丙者,當(dāng)瀏覽器需要從服務(wù)器獲取網(wǎng)頁數(shù)據(jù)的時候,會發(fā)出一次Http請求营密。
Http會通過TCP建立起一個到服務(wù)器的連接通道械媒,當(dāng)本次請求需要的數(shù)據(jù)完畢后,Http會立即將TCP連接斷開评汰,這個過程是很短的纷捞。所以Http連接是一種短連接,是一種無狀態(tài)的連接被去。所謂的無狀態(tài)主儡,是指瀏覽器每次向服務(wù)器發(fā)起請求的時候,不是通過一個連接惨缆,而是每次都建立起一個新的連接糜值。如果是一個連接的話,服務(wù)器進(jìn)程中就能保持住這個連接并且在內(nèi)存中記住一些信息狀態(tài)坯墨。而每次請求結(jié)束后寂汇,連接就關(guān)閉,相關(guān)的內(nèi)容就釋放了捣染,所以記不住任何狀態(tài)健无,成為無狀態(tài)連接。

那么為什么Http是無狀態(tài)的短連接液斜,而TCP是有狀態(tài)的長連接累贤?Http不是建立在TCP的基礎(chǔ)上嗎,為什么還能是短連接少漆?原來臼膏,Http就是在每次請求完成后就把TCP連接關(guān)了,所以是短連接示损。而我們通過Socket編程使用TCP協(xié)議的時候渗磅,我們自己可以通過代碼去控制什么時候打開連接,什么時候關(guān)閉連接,只要我們不通過代碼把連接關(guān)閉始鱼,這個連接就會在客戶端和服務(wù)端的進(jìn)程中一直存在仔掸,相關(guān)狀態(tài)數(shù)據(jù)會一直保存著。

Socket實際上是對TCP/IP協(xié)議的封裝医清,本身并不是協(xié)議起暮,而是一個調(diào)用接口(API)。Socket的出現(xiàn)只是使得程序員更方便地使用TCP/IP協(xié)議棧而已会烙,是對TCP/IP協(xié)議的抽象负懦,從而形成了我們知道的一些最基本的函數(shù)接口,比如create柏腻、listen纸厉、connect、accept五嫂、send颗品、read和write。

比較形象的比喻:Http協(xié)議是轎車沃缘,提供了封裝或者顯示數(shù)據(jù)的具體形式抛猫;Socket是發(fā)動機(jī),提供了網(wǎng)絡(luò)通信的能力孩灯。從編程的角度來講闺金,為了方便,你可以直接選擇已經(jīng)制造好的轎車Http來與服務(wù)器交互峰档。但是有時候往往因為環(huán)境因素或者其它的一些定制的請求败匹,必須要使用TCP協(xié)議,這時就需要使用Socket編程讥巡,然后自己去處理獲取的數(shù)據(jù)掀亩。就像是你用已有的發(fā)動機(jī),自己造了一輛卡車欢顷,去與服務(wù)器交互槽棍。

WebSocket、HTTP與TCP

Http抬驴、WebSocket等協(xié)議屬于應(yīng)用層協(xié)議炼七,IP協(xié)議工作在網(wǎng)絡(luò)層,TCP協(xié)議工作在傳輸層布持。HTTP豌拙、WebSocket等應(yīng)用層協(xié)議,都是基于TCP協(xié)議來傳輸數(shù)據(jù)的题暖。

對于WebSocket來說按傅,它必須依賴Http協(xié)議進(jìn)行一次握手捉超,握手成功后,數(shù)據(jù)就直接從TCP通道傳輸唯绍,與Http無關(guān)了拼岳。

Socket與WebSocket

Socket其實并不是一個協(xié)議,它工作在OSI模型會話層况芒,是為了方便大家直接使用更底層協(xié)議(一般是TCP或UDP)而存在的一個抽象層惜纸。
而WebSocket是一個完整的應(yīng)用層協(xié)議,包含一套完整的api牛柒。
所以WebSocket更方便,而Socket更靈活痊乾。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末皮壁,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子哪审,更是在濱河造成了極大的恐慌蛾魄,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件湿滓,死亡現(xiàn)場離奇詭異滴须,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)叽奥,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進(jìn)店門扔水,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人朝氓,你說我怎么就攤上這事魔市。” “怎么了赵哲?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵待德,是天一觀的道長。 經(jīng)常有香客問我枫夺,道長将宪,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任橡庞,我火速辦了婚禮较坛,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘扒最。我一直安慰自己燎潮,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布扼倘。 她就那樣靜靜地躺著确封,像睡著了一般除呵。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上爪喘,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天颜曾,我揣著相機(jī)與錄音,去河邊找鬼秉剑。 笑死泛豪,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的侦鹏。 我是一名探鬼主播诡曙,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼略水!你這毒婦竟也來了价卤?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤渊涝,失蹤者是張志新(化名)和其女友劉穎慎璧,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體跨释,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡胸私,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了鳖谈。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片岁疼。...
    茶點故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖缆娃,靈堂內(nèi)的尸體忽然破棺而出五续,到底是詐尸還是另有隱情,我是刑警寧澤龄恋,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布疙驾,位于F島的核電站,受9級特大地震影響郭毕,放射性物質(zhì)發(fā)生泄漏它碎。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一显押、第九天 我趴在偏房一處隱蔽的房頂上張望扳肛。 院中可真熱鬧,春花似錦乘碑、人聲如沸挖息。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽套腹。三九已至绪抛,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間电禀,已是汗流浹背幢码。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留尖飞,地道東北人症副。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像政基,于是被迫代替她去往敵國和親贞铣。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,592評論 2 353

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