網絡協議、socket、webSocket

本文爲轉載文章,原文鏈接爲https://blog.csdn.net/yjclsx/article/details/80922951

一、網絡協議

網絡協議爲計算機網絡中進行數據交換而建立的規則、標準或約定的集合。

1、OSI七層協議

OSI是一個開放性的通信系統互連參考模型,他是一個定義得非常好的協議規範。OSI模型有7層結構,從上到下分別是 7 應用層 6 表示層 5 會話層 4 傳輸層 3 網絡層 2 數據鏈路層 1 物理層。

下面的圖表顯示不同的協議在最初OSI模型中的位置:

7 應用層 例如HTTP、SMTP、SNMP、FTP、Telnet、SIP、SSH、NFS、RTSP、XMPP、Whois、ENRP

6 表示層 例如XDR、ASN.1、SMB、AFP、NCP

5 會話層 例如ASAP、TLS、SSH、ISO 8327 / CCITT X.225、RPC、NetBIOS、ASP、Winsock、BSD sockets

4 傳輸層 例如TCP、UDP、RTP、SCTP、SPX、ATP、IL

3 網絡層 例如IP、ICMP、IGMP、IPX、BGP、OSPF、RIP、IGRP、EIGRP、ARP、RARP、 X.25

2 數據鏈路層 例如以太網、令牌環、HDLC、幀中繼、ISDN、ATM、IEEE 802.11、FDDI、PPP

1 物理層 例如線路、無線電、光纖、信鴿

2、TCP/IP協議組

TCP/IP(Transmission Control Protocol/Internet Protocol)即傳輸控制協議/網間協議,定義了主機如何連入因特網及數據如何在它們之間傳輸的標準,從字面意思來看TCP/IP是TCP和IP協議的合稱,但實際上TCP/IP協議是指因特網整個TCP/IP協議族。不同於ISO模型的七個分層,TCP/IP協議參考模型把所有的TCP/IP系列協議歸類到四個抽象層中。

應用層:TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet 等等

傳輸層:TCP,UDP

網絡層:IP,ICMP,OSPF,EIGRP,IGMP

數據鏈路層:SLIP,CSLIP,PPP,MTU

3、OSI七層和TCP/IP四層的關係

3.1 OSI引入了服務、接口、協議、分層的概念,TCP/IP借鑑了OSI的這些概念建立TCP/IP模型。

3.2 OSI先有模型,後有協議,先有標準,後進行實踐;而TCP/IP則相反,先有協議和應用再提出了模型,且是參照的OSI模型。

3.3 OSI是一種理論下的模型,而TCP/IP已被廣泛使用,成爲網絡互聯事實上的標準。

3.4 OSI的應用層、表示層、會話層可以算到TCP/IP的應用層裏。

4、總結

每一抽象層建立在低一層提供的服務上,並且爲高一層提供服務。

通過上述介紹,就可以搞清楚例如HTTP協議和TCP協議的區別之類的問題了。TPC協議是一種傳輸層協議,主要解決數據如何在網絡中傳輸,而HTTP協議是應用層協議,主要解決如何包裝數據。關於TCP和HTTP協議的關係,網上有一段比較容易理解的介紹:“我們在傳輸數據時,可以直接使用(傳輸層)TCP協議,但是那樣的話,如果沒有應用層,便無法識別數據內容,如果想要使傳輸的數據有意義,則必須使用到應用層協議,應用層協議有很多,比如HTTP、FTP、TELNET等,也可以自己定義應用層協議。WEB使用HTTP協議作爲應用層協議,以封裝HTTP文本信息,然後使用TCP作爲傳輸層協議將它發到網絡上。”

TCP(Transmission Control Protocol,傳輸控制協議)是基於連接的協議,也就是說,在正式收發數據前,必須和對方建立可靠的連接。一個TCP連接必須要經過三次“對話”才能建立起來,其中的過程非常複雜,我們這裏只做簡單、形象的介紹,你只要做到能夠理解這個過程即可。我們來看看這三次對話的簡單過程:主機A向主機B發出連接請求數據包:“我想給你發數據,可以嗎?”,這是第一次對話;主機B向主機A發送同意連接和要求同步(同步就是兩臺主機一個在發送,一個在接收,協調工作)的數據包:“可以,你什麼時候發?”,這是第二次對話;主機A再發出一個數據包確認主機B的要求同步:“我現在就發,你接着吧!”,這是第三次對話。三次“對話”的目的是使數據包的發送和接收同步,經過三次“對話”之後,主機A才向主機B正式發送數據。

UDP(User Data Protocol,用戶數據報協議)是與TCP相對應的協議。它是面向非連接的協議,它不與對方建立連接,而是直接就把數據包發送過去!UDP適用於一次只傳送少量數據、對可靠性要求不高的應用環境。比如,我們經常使用“ping”命令來測試兩臺主機之間TCP/IP通信是否正常,其實“ping”命令的原理就是向對方主機發送UDP數據包,然後對方主機確認收到數據包,如果數據包是否到達的消息及時反饋回來,那麼網絡就是通的。例如,在默認狀態下,一次“ping”操作發送4個數據包(如圖2所示)。大家可以看到,發送的數據包數量是4包,收到的也是4包(因爲對方主機收到後會發回一個確認收到的數據包)。這充分說明了UDP協議是面向非連接的協議,沒有建立連接的過程。正因爲UDP協議沒有連接的過程,所以它的通信效果高;但也正因爲如此,它的可靠性不如TCP協議高。QQ登陸採用TCP協議和HTTP協議,你和好友之間發送消息時主要採用UDP協議發消息,因此有時會出現收不到消息的情況。

 

二、socket

我們經常把socket翻譯爲套接字,socket是在應用層和傳輸層之間的一個抽象層,它把TCP/IP層複雜的操作抽象爲幾個簡單的接口供應用層調用以實現進程在網絡中通信。socket是一組接口,在設計模式中,socket其實就是一個門面模式,它把複雜的TCP/IP協議族隱藏在socket接口後面,對用戶來說,一組簡單的接口就是全部,讓socket去組織數據,以符合指定的協議。

 

三、webSocket

1、簡介

WebSocket協議是基於TCP的一種新的網絡協議,和http協議一樣屬於應用層協議,它實現了瀏覽器與服務器全雙工(full-duplex)通信,也就是允許服務器主動發送信息給客戶端。我在實現二維碼掃描登錄時曾使用過,有了它就不需要通過輪詢或者建立長連接的方式來使客戶端實時獲取掃碼狀態,因爲當掃碼後,服務器端可以主動發送消息通知客戶端。

2、webSocket和http的區別

http鏈接分爲短鏈接和長鏈接,短鏈接是每次請求都要重新建立TCP鏈接,TCP又要三次握手才能建立,然後發送自己的信息。即每一個request對應一個response。長鏈接是在一定的期限內保持TCP連接不斷開。客戶端與服務器通信,必須要由客戶端發起然後服務器返回結果。客戶端是主動的,服務器是被動的。

簡單的說,WebSocket協議之前,雙工通信是通過多個http鏈接輪詢來實現的,這導致了效率低下。WebSocket解決了這個問題,他實現了多路複用,他是全雙工通信。在webSocket協議下客服端和瀏覽器可以同時發送信息。建立了WebSocket之後服務器不必在瀏覽器發送request請求之後才能發送信息到瀏覽器。這時的服務器已有主動權想什麼時候發就可以什麼時候發送信息到客戶端,而且信息當中不必再帶有head的部分信息了。與http的長鏈接通信來比,這種方式不僅能降低服務器的壓力,而且信息當中也減少了部分多餘的信息。

3、webSocket和socket的區別

就像Java和JavaScript,並沒有什麼太大的關係,但又不能說完全沒關係。可以這麼說:

  • 命名方面,Socket是一個深入人心的概念,WebSocket借用了這一概念;
  • 使用方面,完全兩個東西。

總之,可以把WebSocket想象成HTTP,HTTP和Socket什麼關係,WebSocket和Socket就是什麼關係。

最後附上一張有意思的圖片:

 

發佈了31 篇原創文章 · 獲贊 6 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章