網絡基礎:TCP協議、UDP協議、均屬於傳輸層協議;TCP和UDP協議有何不同?


傳輸層

  • 傳輸層的主要工作是定義端口,標識應用程序身份,並將數據包交給對應的應用程序實現端口到端口的通信,並且傳輸層引入了TCP/UDP協議。

1. 如果有大量數據包、數據包大?時間很長,網絡中斷,怎么控制重新傳輸?怎么確保數據包正確完整---傳輸層

  • 傳輸層封裝數據包,通過定義的 TCP、UDP 協議實現按序一個一個發送,保證數據完整正確性;    

2. QQ發消息,你必須使用QQ接受消息,才可以正常通信;但是電腦中不是只運行了QQ,還有其他程序,怎么確定由誰來處理消息

  • 傳輸層定義端口的概念-- HTTP-tcp-80端口、https是tcp的443端口?--交給特定應用處理

 

TCP協議

  • TCP (Transmission Control Protocol)傳輸控制協議,顧名思義,就是要對數據的傳輸進行一定的控制.

    

上圖為 TCP協議的基本信息

  • 源目端口:源端口=本地端口、目的端口=目標主機端口;-----尋找應用的作用
  • 序號:TCP 數據包很大的時候,需要分段(比如分為3段),進行三段分開發送;我怎么確認這些碎片的順序,就會用到序號,到達目的主機時需要進行重組,重組后才可以使用這些數據
  •  確認號:答復確認消息---比如微信發紅包后不知道對方有沒有收到,需要給我反饋。沒有收到也是一個反饋,收到了就會收到確認消息
  •  標志位:
  • ACK=1(燈亮-ACK消息-回應消息)、
  • FIN=0(燈不亮):(結束連接的包需要把 FIN 置位 1)
  • SYN=1 什么類型的包:發起連接請求的包(sym包)、接受請求的包都需要把 SYN 置位 1,FIN=1(結束連接的包需要把 FIN 置位 1)

     

客戶端 client 和 服務器 server 初始都是關閉狀態
客戶端茫茫人海中看到了服務器,要服務器進行通信,通信之前需要進行連接,連接之前需要通過三次握手來建立連接

一次握手:

  • 客戶端要給服務器發起連接,消息內包括:什么類型的消息 SYN=1(亮燈)說明是一個發起連接請求的包請求報文,還會帶一個編號是J(seq=j),服務器收到消息(星寶SYN=1),后服務器狀態會發生改變Sym_REVD,說明我被客戶端給撩了;

二次握手:

  • 服務器給客戶端回應,回應要發(安可包)ACK=1(亮燈)SYN =1,會把你的確認號帶着ack=j+1,和服務器自己的序列號seq=k-------后狀態會發生改變Sym_REVD

三次握手:

  • 客戶端需要回應服務器,我應經收到了你的消息是確認包:ACK=1(確認包)ack=k+1(基於服務器的標識)------已建立鏈接

三次握手比如:

男生     女生

-------------------> 認識你,交往請求消息
<------------------- 我知道了,我也同意--確認消息
-------------------> 我也知道,開心~~牽手成功! ! ! |        三次揮手建立鏈接之后,就可以發送數據 

 

===========  建立鏈接之后,經過一段時間,需要斷開鏈接

斷開連接需要 FIN = 1(譯:份包)

  • 客戶端告訴服務器我們要分手請求:FIN=1,swq=n
  • 服務器回應客戶端可以:回應包ACK=1,序列號seq=n+1
  • 服務器也發給客戶端一個分手請求:FIN=1,swq=m
  • 客戶端回應服務器拜拜就拜拜:回應包 ACK=1,seq=m+1
  1. 對不起,我不喜歡你了
  2. 好的,我知道你不喜歡我了
  3. 你知道了,那分手吧,再見
  4. 好吧,分手吧,再也不見

 

整體流程:

1、TCP 協議 和 UDP 協議的區別?

TCP 協議 和 UDP協議,都是傳輸層的兩個協議,它們的區別主要有一下三個方面來體現:

第一,TCP協議是面向連接的,也就是說向我們在打電話之前一樣,要先建一個撥號連接;

   而 UDP協議是面向無連接的,就是說在發送順序之前,UDP不需要建立鏈接;

第二,TCP協議是一個可靠的傳輸協議,它可以保證傳輸的一個正確性,保證我們的不丟包不重復,而且數據是按順序到達的;

  而 UDP協議是一個不可靠的協議,它是不保證我們的數據能夠可靠完整的到達,他只是盡最大的努力去完成交付的;

第三,因為 TCP協議的以上兩個特點,所以 TCP協議的傳輸效率會比較低;而對應的 UDP協議傳輸效率會比較高;

如果有一些場景,它注重一個傳輸速度,而不在乎丟包的話,一般會選擇 UDP協議來進行傳輸;比如:ip電話、流媒體等

 

2、TCP 協議的三次握手過程?

TCP協議 在建立鏈接的時候,需要進行三次握手的過程,

第一次握手,是客戶端向服務器端發起的,這是用來發起一個鏈接建立的請求,那么這個報文中的 SYN 為會被標記為:1,所以我們把它常叫做 SYN包;

第二次握手,是由服務器向客戶端發起的,是來確認服務器的一個請求鏈接的,這個報文中的 ACK位 還有 SYN位都被標記為:1,所以常叫做 SYN-ACK 報文;

第三次握手,是客戶端向服務器發起的,這是歲服務器的上一個報文的一個確認報文,這個報文中的一個 ACK位被標記為:1,所以常叫做 ACK 包;

以上就是 TCP 協議的三次握手的一個過程;

 

3、TCP 協議的四次揮手過程?

當 TCP協議 完成了數據的發送之后,就會嘗試去斷開鏈接,此時會經歷四次揮手的過程:

第一次揮手:是客戶端向服務器發起的,這個時候客戶端已經完成了數據發送,會發起一個包,去進行一個鏈接斷開的請求,這個報文中的 FIN位 被標記為:1,所以叫做 FIN 包;

第二次揮手:是服務器發送給客戶端的,這個報文是用來確認上一個客戶端用來斷開鏈接請求的一個報文,所以它是一個 ACK 報文;

第三次揮手:是服務器發送給客戶端的,那么這個時候服務的數據,也發送完畢的話,他也會想客戶端發起一個斷開連接的請求,在這個報文中的 FIN位 也被標記為:1,所以是一個 FIN 包;

第四次揮手:是客戶端發送給服務器的,是用來確認服務器的上一個斷開連接的一個請求報文,所以這次揮手也是一個 ACK 報文;

以上就是 TCP 協議四次揮手的一個過程;

 

4、為什么握手需要三次,揮手卻要四次?

TCP 三次握手的過程是它建立鏈接的過程,建立鏈接我只需要確認客戶端和服務器都在,雙方可以通信就可以了,所以握手需要三次;

但是四次揮手,是 TCP 結束了數據發送要斷開鏈接的時候的一個過程,所以我要確保,我即結束了發送數據,也結束了接受數據,

開始咱們的客戶端結束了數據發送,他回去告知服務器,那這個時候我們的客戶端,其實還是可以接受數據的,服務器收到客戶端結束發送數據的請求之后,客戶端只是會停止去接收數據,

但是此時服務器其實還可以再發送數據的,所以如果服務器它也發送完了,那就需要你想客戶端發送一次,FIN包 來告知客戶端,其實我的數據也發送完了,我也要斷開連接了;

那此時客戶端收到了服務器這個 FIN包之后,那么客戶端也會進行一個確認,此時然后雙方才都會去,關閉發送和接受的一個通道;

所以揮手需要四次

 

UDP協議

  • UDP (User Datagram Protocol)用戶數據報協議。
  • UDP 不需要連接---無連接協議 -- 不可靠的協議
  • 目的:速度快  ---  但是有些丟包
  • 什么場景:
    • 視屏、IP電話、流媒體  ---  不在乎丟包,只要不卡
  • 什么協議使用 UDP 連接
    • VOIP電話、DNS(域名解析協議)、SNMP(簡單網絡管理協議)、DHCP(動態分配地址)

    

 TCP  vs  UDP

  tcp 有很正規的握手和揮手的鏈接過程,所以是面向連接的協議;http 是基於tcp80端口的可靠的應用層協議;tcp 是可靠的 每個包都標了一個記號,這個包丟了還可以進行重傳;如果傳輸數據量比較大時 需要可靠的場景進行傳輸;速度慢沒關系,必須可靠;

  udp 是面向非連接的,會丟包,不可靠的;傳輸量小,但是速度很快;要求速度快,丟包了也無所謂;

  

 

*******請大家尊重原創,如要轉載,請注明出處:轉載自:https://www.cnblogs.com/shouhu/   謝謝!!******* 


免責聲明!

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



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