TCP、Socket、Http、WebSocket

概覽

  • TCP是傳輸層協(xié)議;零件和工具
  • Socket是會話層API,封裝了TCP;基于TCP組裝完的發(fā)動機,可以自己實現(xiàn)卡車或者飛機,更加靈活
  • Http是應(yīng)用層協(xié)議,短連接,單向;基于TCP組裝完的完整轎車
  • WebSocket是應(yīng)用層協(xié)議,長連接,雙向;基于TCP組裝完的完整改裝轎車,最開始依賴Http協(xié)議進行一次握手,后續(xù)就都是TCP,與Http無關(guān)
  • WebSocket API是HEML5標準的一部分,但這并不代表 WebSocket 只能在基于瀏覽器的應(yīng)用程序中使用。

詳細描述

OSI模型
  • 應(yīng)用層:各種應(yīng)用層協(xié)議

    Http、WebSocket、FTP、SMTP

  • 表示層:信息的語法語義以及他們的關(guān)聯(lián),如加密解密、轉(zhuǎn)換翻譯、壓縮解壓縮

  • 會話層:不同機器上的用戶之間建立及管理會話

    Socket

  • 傳輸層:接受上一層的數(shù)據(jù),在必要的時候把數(shù)據(jù)進行分割,并將這些數(shù)據(jù)提交給網(wǎng)絡(luò)層

    TCP、UDP

  • 網(wǎng)絡(luò)層:控制子網(wǎng)的運行,如邏輯編址、分組傳輸、路由選擇

    IP

  • 數(shù)據(jù)鏈路層:物理尋址,同時將原始比特流轉(zhuǎn)變?yōu)檫壿媯鬏斁€路。

  • 物理層:機械、電子、定時接口通信信道上的原始比特流傳輸。

1679993443339.png
TCP/IP協(xié)議是什么

TCP/IP協(xié)議被組織成四個概念層,TCP/IP 協(xié)議可以看做是對 OSI 模型的一種簡化

ICP/IP協(xié)議族并不包含物理層和數(shù)據(jù)鏈路層,因此它不能獨立完成整個計算機網(wǎng)絡(luò)系統(tǒng)的功能,必須與許多其他的協(xié)議協(xié)同工作

  • 應(yīng)用層:對應(yīng)于OSI七層參考模型的應(yīng)用層和表達層

HTTP、FTP、SMTP等

  • 傳輸層: 對應(yīng)于OSI七層參考模型的傳輸層,它提供兩種端到端的通信服務(wù)

    TCP、UDP

  • 網(wǎng)間層:對應(yīng)于OSI七層參考模型的網(wǎng)絡(luò)層。本層包含IP協(xié)議、RIP協(xié)議,負責數(shù)據(jù)的包裝、尋址和路由。同時還包含ICMP用來提供網(wǎng)絡(luò)診斷信息

IP、ICMP

  • 網(wǎng)絡(luò)接口: 包括用于協(xié)作IP數(shù)據(jù)在已有網(wǎng)絡(luò)介質(zhì)上傳輸?shù)膮f(xié)議。實際上TCP/IP標準并不定義與ISO數(shù)據(jù)鏈路層和物理層相對應(yīng)的功能。相反,它定義像地址解析協(xié)議(Address Resolution Protocol,ARP)這樣的協(xié)議,提供TCP/IP協(xié)議的數(shù)據(jù)結(jié)構(gòu)和實際物理硬件之間的接口

    ARP、RARP等

Socket是什么

Socket是API調(diào)用接口,Socket 并不是一個協(xié)議,Socket實際上是對TCP/IP協(xié)議的封裝, 從而形成了我們知道的一些最基本的函數(shù)接口,比如create、listen、connect、accept、send、read和write

socket.gif

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

socket-traffic.gif
Http是什么

Http是應(yīng)用層協(xié)議, 短連接,單向,超文本傳輸協(xié)議, web上一問一答的兩臺計算機之間遵循的通信規(guī)則

  • 請求組成:請求行、請求頭、請求空行、請求主體
  • 響應(yīng)組成:響應(yīng)狀態(tài)行、響應(yīng)頭、響應(yīng)空行、響應(yīng)正文
WebSocket是什么

WebSocket是應(yīng)用層協(xié)議,長連接,雙向,是基于Http協(xié)議的擴展,用于建立客戶端和服務(wù)器的雙向通道

引入原因: http協(xié)議是一種單向的網(wǎng)絡(luò)協(xié)議,在建立連接后,它只允許客戶端向服務(wù)端發(fā)出請求資源后,服務(wù)端才能返回相應(yīng)的數(shù)據(jù);而服務(wù)端不能主動推送數(shù)據(jù)給客戶端。這樣設(shè)計的原因當初是為了防止客戶端受到廣告商強行塞加服務(wù)給客戶端

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

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

WebSocket必須依賴Http協(xié)議進行一次握手,握手成功后,數(shù)據(jù)就直接從TCP通道傳輸,與Http無關(guān)了

WebSocket與Web關(guān)系

WebSocket API是HEML5標準的一部分,但這并不代表 WebSocket 一定要用在 HTML 中,或者只能在基于瀏覽器的應(yīng)用程序中使用。

實際上,許多語言、框架和服務(wù)器都提供了 WebSocket 支持,例如:


文檔參考

網(wǎng)絡(luò)協(xié)議——Http、Socket、WebSocket - 簡書 (jianshu.com)

Socket 與 WebSocket | ZRONG's BLOG (zengrong.net)

(113條消息) OSI七層模型詳解小鵬加油的博客-CSDN博客

(113條消息) WebSocket(2)--為什么引入WebSocket協(xié)議_尹立的博客-CSDN博客

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容