TCP/IP和UDP之間的區別(轉載)

来源:http://www.cnblogs.com/fengxiaojiu/archive/2017/11/16/7846332.html
-Advertisement-
Play Games

在分析兩者之間的區別之前,我們先搞清楚這兩者的關係, TCP/IP協議簇 是一種網路控制協議,簡單點說就是一種網路協議,我們網路中的電腦就是通過這套協議簇來進行數據通信的。這套協議簇裡面包含了很多協議,比如說DNS,HTTP,ARP,ICMP等,UDP協議也是其中的一種。 關於TCP/IP協議簇詳 ...


在分析兩者之間的區別之前,我們先搞清楚這兩者的關係,

TCP/IP協議簇  是一種網路控制協議,簡單點說就是一種網路協議,我們網路中的電腦就是通過這套協議簇來進行數據通信的。
這套協議簇裡面包含了很多協議,比如說DNS,HTTP,ARP,ICMP等,UDP協議也是其中的一種

關於TCP/IP協議簇詳解可以參考:http://blog.chinaunix.net/uid-30077524-id-5074334.html

1.TCP/IP協議詳解

TCP/IP協議集包括應用層,傳輸層,網路層,網路訪問層。
其中應用層包括:
超文本傳輸協議(HTTP):萬維網的基本協議.   
文件傳輸(TFTP簡單文件傳輸協議):   
遠程登錄(Telnet),提供遠程訪問其它主機功能,它允許用戶登錄     
internet主機,併在這台主機上執行命令.    
網路管理(SNMP簡單網路管理協議),該協議提供了監控網路設備的方法,以及配置管理,統計信息收集,性能管理及安全管理等.   
功能變數名稱系統(DNS),該系統用於在internet中將功能變數名稱及其公共廣播的網路節點轉換成IP地址. 
其次網路層包括:    
Internet協議(IP)     
Internet控制信息協議(ICMP)    
地址解析協議(ARP)    
反向地址解析協議(RARP)  
最後說網路訪問層:網路訪問層又稱作主機到網路層(host-to-network).網路訪問層的功能包括IP地址與物理地址硬體的映射,以及將IP封裝成幀.基於不同硬體類型的網路介面,網路訪問層定義了和物理介質的連接.

 

2.UDP協議祥解

 

UDP(User Data Protocol,用戶數據報協議)
(1) UDP是一個非連接的協議,傳輸數據之前源端和終端不建立連接,當它想傳送時就簡單地去抓取來自應用程式的數據,並儘可能快地把它扔到網路上。在發送端,UDP傳送數據的速度僅僅是受應用程式生成數據的速度、電腦的能力和傳輸帶寬的限制;在接收端,UDP把每個消息段放在隊列中,應用程式每次從隊列中讀一個消息段。
(2) 由於傳輸數據不建立連接,因此也就不需要維護連接狀態,包括收髮狀態等,因此一臺服務機可同時向多個客戶機傳輸相同的消息。
(3) UDP信息包的標題很短,只有8個位元組,相對於TCP的20個位元組信息包的額外開銷很小。
(4) 吞吐量不受擁擠控制演算法的調節,只受應用軟體生成數據的速率、傳輸帶寬、源端和終端主機性能的限制。
(5)UDP使用盡最大努力交付,即不保證可靠交付,因此主機不需要維持複雜的鏈接狀態表(這裡面有許多參數)。
(6)UDP是面向報文的。發送方的UDP對應用程式交下來的報文,在添加首部後就向下交付給IP層。既不拆分,也不合併,而是保留這些報文的邊界,因此,應用程式需要選擇合適的報文大小。
我們經常使用“ping”命令來測試兩台主機之間TCP/IP通信是否正常,其實“ping”命令的原理就是向對方主機發送UDP數據包,然後對方主機確認收到數據包,如果數據包是否到達的消息及時反饋回來,那麼網路就是通的。
UDP的包頭結構:
源埠 16位
目的埠 16位
長度 16位
校驗和 16位


3.TCP協議和UDP協議的區別


TCP(Transmission Control Protocol,傳輸控制協議)是面向連接的協議,也就是說,在收發數據前,必須和對方建立可靠的連接。一個TCP連接必須要經過三次“對話”才能建立起來,其中的過程非常複雜,只簡單的描述下這三次對話的簡單過程:主機A向主機B發出連接請求數據包:“我想給你發數據,可以嗎?”,這是第一次對話;主機B向主機A發送同意連接和要求同步(同步就是兩台主機一個在發送,一個在接收,協調工作)的數據包:“可以,你什麼時候發?”,這是第二次對話;主機A再發出一個數據包確認主機B的要求同步:“我現在就發,你接著吧!”,這是第三次對話。三次“對話”的目的是使數據包的發送和接收同步,經過三次“對話”之後,主機A才向主機B正式發送數據。
詳細點說就是:(文章大部分轉載https://www.cnblogs.com/bizhu/archive/2012/05/12/2497493.html,這位博主講解得很到位,很容易理解)
TCP三次握手過程
1 主機A通過向主機B 發送一個含有同步序列號的標誌位的數據段給主機B ,向主機B 請求建立連接,通過這個數據段,
主機A告訴主機B 兩件事:我想要和你通信;你可以用哪個序列號作為起始數據段來回應我.
2 主機B 收到主機A的請求後,用一個帶有確認應答(ACK)和同步序列號(SYN)標誌位的數據段響應主機A,也告訴主機A兩件事:
我已經收到你的請求了,你可以傳輸數據了;你要用哪佧序列號作為起始數據段來回應我
3 主機A收到這個數據段後,再發送一個確認應答,確認已收到主機B 的數據段:"我已收到回覆,我現在要開始傳輸實際數據了
這樣3次握手就完成了,主機A和主機B 就可以傳輸數據了.
3次握手的特點
沒有應用層的數據
SYN這個標誌位只有在TCP建產連接時才會被置1
握手完成後SYN標誌位被置0

TCP建立連接要進行3次握手,而斷開連接要進行4次

1 當主機A完成數據傳輸後,將控制位FIN置1,提出停止TCP連接的請求
2  主機B收到FIN後對其作出響應,確認這一方向上的TCP連接將關閉,將ACK置1
3 由B 端再提出反方向的關閉請求,將FIN置1
4 主機A對主機B的請求進行確認,將ACK置1,雙方向的關閉結束.
由TCP的三次握手和四次斷開可以看出,TCP使用面向連接的通信方式,大大提高了數據通信的可靠性,使發送數據端
和接收端在數據正式傳輸前就有了交互,為數據正式傳輸打下了可靠的基礎
名詞解釋
ACK  TCP報頭的控制位之一,對數據進行確認.確認由目的端發出,用它來告訴發送端這個序列號之前的數據段
都收到了.比如,確認號為X,則表示前X-1個數據段都收到了,只有當ACK=1時,確認號才有效,當ACK=0時,確認號無效,這時會要求重傳數據,保證數據的完整性.
SYN  同步序列號,TCP建立連接時將這個位置1
FIN  發送端完成發送任務位,當TCP完成數據傳輸需要斷開時,提出斷開連接的一方將這位置1

TCP的包頭結構
源埠 16位
目標埠 16位
序列號 32位
回應序號 32位
TCP頭長度 4位
reserved 6位
控制代碼 6位
視窗大小 16位
偏移量 16位
校驗和 16位
選項  32位(可選)
這樣我們得出了TCP包頭的最小長度,為20位元組。

4.TCP與UDP區別總結:

1、TCP面向連接(如打電話要先撥號建立連接);UDP是無連接的,即發送數據之前不需要建立連接

2、TCP提供可靠的服務。也就是說,通過TCP連接傳送的數據,無差錯,不丟失,不重覆,且按序到達;UDP盡最大努力交付,即不保證可靠交付

3、TCP面向位元組流,實際上是TCP把數據看成一連串無結構的位元組流;UDP是面向報文的
   UDP沒有擁塞控制,因此網路出現擁塞不會使源主機的發送速率降低(對實時應用很有用,如IP電話,實時視頻會議等)
4、每一條TCP連接只能是點到點的;UDP支持一對一,一對多,多對一和多對多的交互通信
5、TCP首部開銷20位元組;UDP的首部開銷小,只有8個位元組

6、TCP的邏輯通信通道是全雙工的可靠通道,UDP則是不可靠通道

5.應用領域

1,TCP在網路通信上有極強的生命力,例如遠程連接(Telnet)和文件傳輸(FTP)都需要不定長度的數據被可靠地傳輸。但是可靠的傳輸是要付出代價的,對數據內容正確性的檢驗必然占用電腦的處理時間和網路的帶寬,因此TCP傳輸的效率不如UDP高。

2,UDP操作簡單,而且僅需要較少的監護,因此通常用於區域網高可靠性的分散系統中client/server應用程式。例如視頻會議系統,並不要求音頻視頻數據絕對的正確,只要保證連貫性就可以了,這種情況下顯然使用UDP會更合理一些。

註明:本文章來自轉載加上自己的整理,有什麼疑問和問題歡迎一起討論學習

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 實現基於Keepalived高可用集群網站架構 環境:隨著業務的發展,網站的訪問量越來越大,網站訪問量已經從原來的1000QPS,變為3000QPS,目前業務已經通過集群LVS架構可做到隨時拓展,後端節點已經通過集群技術保障了可用性,但對於前端負載均衡器來說,是個比較大的安全隱患,因為當前端負載均衡 ...
  • 1.1 cobbler簡介 Cobbler是一個Linux伺服器安裝的服務,可以通過網路啟動(PXE)的方式來快速安裝、重裝物理伺服器和虛擬機,同時還可以管理DHCP,DNS等。 Cobbler可以使用命令行方式管理,也提供了基於Web的界面管理工具(cobbler-web),還提供了API介面,可 ...
  • linux中的rtc驅動位於drivers/rtc下,裡面包含了許多開發平臺的RTC驅動,我們這裡是以S3C24xx為主,所以它的RTC驅動為rtc-s3c.c 1.進入./drivers/rtc/rtc-s3c.c 還是首先進入入口函數,如下圖所示: 這裡註冊了一個“s3c2410-rtc”名稱的 ...
  • 1、下載安裝nginx 2、編輯nginx.conf文件 3、重啟或者啟動nginx 4、分別在172.100.10.21 和172.100.10.22 兩天機器人安裝配置apache+php或者nginx+php的環境 ...
  • sar命令常用格式 sar [options] [-A] [-o file] t [n] 其中: t為採樣間隔,n為採樣次數,預設值是1; -o file表示將命令結果以二進位格式存放在文件中,file 是文件名。 options 為命令行選項,sar命令常用選項如下: -A:所有報告的總和 -u: ...
  • 返回總目錄 本節包含3個手法: 1、Extract Method(提煉函數) 2、Inline Method(內聯函數) 3、Inline Temp(內聯臨時變數) Extract Method(提煉函數) 概要 你有一段代碼可以被組織在一起並獨立起來。 將這段代碼放進一個獨立函數中,並讓函數名稱解 ...
  • ASP.NET MVC程式設計自我感覺剛開始太難了,一個好好的頁面分成了好幾部分。剛開始沒有一點頭緒,只能按著源碼開始敲一遍,其中80%的代碼的含義都不知道啥意思,只能按著教材來一遍,開頭是非常痛苦,不知其然 , 更不知其所以然,出了問題就對著源碼看,看到底是哪段代碼的問題,就這樣敲了估計有大半個月 ...
  • Controller中的代碼如下var bingo = new Web1.Models.Bingo() { Title = "測試", desc = "嘻嘻", StarTime = DateTime.Now, EndTime = DateTime.Now.... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...