TCP UDP socket http webSocket 之間的關系


---恢復內容開始---

OSI&TCP/IP模型

要弄清tcp udp socket http websocket之間的關系,首先要知道經典的OSI七層模型,與之對應的是TCP/IP的四層模型。

 

OSI 模型包括了七層,而 TCP/IP 模型只有四層。雖然它們具有功能相當的網絡層、傳輸層和應用層,但其它層並不相同。 

  我們一般使用的網絡數據傳輸由下而上共有七層,分別為物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層、應用層,也被依次稱為 OSI 第一層、第二層、⋯⋯、 第七層。

  TCP/IP 模型中沒有專門的表示層和會話層,它將與這兩層相關的表達、編碼和會話控制等功能包含到了應用層中去完成。另外,TCP/IP 模型還將 OSI 的數據鏈路層和物理層包括到了一個網絡訪問層中。 

  OSI 模型在網絡層支持無連接和面向連接的兩種服務,而在傳輸層僅支持面向連接的服 務。TCP/IP 模型在互聯網層則只支持無連接的一種服務,但在傳輸層支持面向連接和無連 接兩種服務。 

  TCP/IP 由於有較少的層次,因而顯得更簡單,並且作為從因特網(INTERNET)上發展起來的協議,已經成了網絡互連的事實標准。但是,目前還沒有實際網絡是建立在 OSI 七層模型基礎上的,OSI 僅僅作為理論的參考模型被廣泛使用。

 

從圖中可以看出,tcp udp工作在傳輸層,http websocket工作在應用層,而socket不屬於七層模型中的任一層,可以理解為socket工作在傳輸層與應用層中間的隱含層中。

幾者之間的關系

socket本身不是一種協議,而是對傳輸層中的TCP/UDP協議進行了封裝,對用戶隱藏了內部TCP/UDP是如何傳輸的,只提供一套接口(API)給程序員調用,從而完成socket編程。通過socket接口,我們才能使用TCP/UDP協議。

關於socketTCP/UDP的關系,類似操作系統與接口之間的關系:
TCP/IP只是一個協議棧,就像操作系統的運行機制一樣,必須要具體實現,同時還要提供對外的操作接口。這個就像操作系統會提供標准的編程接口,比如win32編程接口一樣,TCP/IP也要提供可供程序員做網絡開發所用的接口,這就是Socket編程接口。

 

而我們通常瀏覽網頁用到的http協議,是建立在TCP協議之上的一種應用層協議。http協議最顯著的特點是它是一種無狀態連接,客戶端發送的每次請求都需要服務器回送響應,在請求結束后,會主動釋放連接,是一種“短連接”。

幾者之間的關系概況

對於幾者之間的關系,可以概況為:

http websocket等應用層協議通過socket接口從而調用tcp udp等傳輸層協議,從而達到網絡通信。

tcp udp =》 socket =》 http websocket

總結

綜上所述,我們編程不會直接去調用tcp udp,而是通過他們封裝好的接口socket去通信。可以說,現在幾乎網絡上所有的通信,底層都是通過socket完成的,一切皆Socket

 

 

 

 

補充。。。

tcp和udp的區別

  TCP是面向連接的、傳輸可靠(保證數據正確性且保證數據順序)、用於傳輸大量數據(流模式)、速度慢,建立連接需要開銷較多(時間,系統資源)。

  TCP是一種流模式的協議,是面向連接的,也就是說,在連接持續的過程中,Socket 中收到的數據都是由同一台主機發出的(劫持什么的不考慮),因此,知道保證數據是有序的到達就行了,至於每次讀取多少數據不關心。

  TCP:面向連接、傳輸可靠(保證數據正確性,保證數據順序)、用於傳輸大量數據(流模式)、速度慢,建立連接需要開銷較多(時間,系統資源)。

  UDP:面向非連接、傳輸不可靠、用於傳輸少量數據(數據包模式)、速度快。

  關於TCP是一種流模式的協議,UDP是一種數據報模式的協議,這里要說明一下,TCP是面向連接的,也就是說,在連接持續的過程中,socket 中收到的數據都是由同一台主機發出的(劫持什么的不考慮),因此,知道保證數據是有序的到達就行了,至於每次讀取多少數據自己看着辦。

  而UDP是無連接的協議,也就是說,只要知道接收端的IP和端口,且網絡是可達的,任何主機都可以向接收端發送數據。這時候,如果一次能讀取超過一個報文的數據,則會亂套。比如,主機A向發送了報文P1,主機B發送了報文P2,如果能夠讀取超過一個報文的數據,那么就會將P1和P2的數據合並在了一 起,這樣的數據是沒有意義的。

 

TCP三次握手

所謂三次握手(Three-way Handshake),是指建立一個TCP連接時,需要客戶端和服務器總共發送3個包。

  三次握手的目的是連接服務器指定端口,建立TCP連接,並同步連接雙方的序列號和確認號並交換 TCP 窗口大小信息.在 Socket 編程中,客戶端執行connect()時。將觸發三次握手。 

首先了解一下幾個標志,SYN(synchronous),同步標志,ACK (Acknowledgement),即確認標志,seq應該是Sequence Number,序列號的意思,另外還有四次握手的fin,應該是final,表示結束標志。

  第一次握手:客戶端發送一個TCP的SYN標志位置1的包指明客戶打算連接的服務器的端口,以及初始序號X,保存在包頭的序列號(Sequence Number)字段里。

  第二次握手:服務器發回確認包(ACK)應答。即SYN標志位和ACK標志位均為1同時,將確認序號(Acknowledgement Number)設置為客戶的序列號加1以,即X+1。

  第三次握手:客戶端再次發送確認包(ACK) SYN標志位為0,ACK標志位為1。並且把服務器發來ACK的序號字段+1,放在確定字段中發送給對方.並且在數據段放寫序列號的+1。

 

常用的Socket類型有兩種:流式Socket(SOCK_STREAM)和數據報式Socket(SOCK_DGRAM)。流式是一種面向連接的 Socket,針對於面向連接的TCP服務應用;數據報式 Socket 是一種無連接的 Socket ,對應於無連接的UDP服務應用。

 

---恢復內容結束---


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM