TCP vs UDP:核心區別、握手過程與應用場景(附對比圖)

🌐 引言

在網絡通信中,TCP(傳輸控制協議)和UDP(用戶數據報協議)是兩大核心傳輸層協議。它們各有優劣,適用于不同場景。本文將用圖文對比+實戰示例,幫你徹底理解兩者的區別!

🔍 一、核心區別對比表

特性TCPUDP
連接方式面向連接(需握手)無連接(直接發送)
可靠性? 可靠(確認重傳機制)? 不可靠(可能丟包)
數據順序? 保證順序? 不保證順序
傳輸效率?? 較低(需額外控制開銷)? 極高(無控制字段)
流量控制? 滑動窗口機制? 無控制
擁塞控制? 動態調整速率? 無控制
頭部大小20-60字節僅8字節
典型應用HTTP/HTTPS、FTP、SSH視頻流、DNS、在線游戲

🤝 二、TCP的三次握手與四次揮手(圖解)

1. 三次握手建立連接

Client Server SYN=1, seq=x (我要連接) SYN=1, ACK=1, seq=y, ack=x+1 (我準備好了,你呢?) ACK=1, seq=x+1, ack=y+1 (確認!開始通信) Client Server

目的:同步初始序列號(ISN),確保雙方收發能力正常。

2. 四次揮手斷開連接

Client Server FIN=1, seq=u (我要斷開) ACK=1, ack=u+1 (收到請求) FIN=1, seq=v (我也要斷開) ACK=1, ack=v+1 (確認斷開) Client Server

為什么需要四次?

因為TCP是全雙工的,兩端需分別確認關閉。

🎯 三、UDP的通信流程(圖解)

Sender Receiver 直接發送數據包(無握手) 可能丟失、亂序或重復 Sender Receiver

特點

  • 像寄平信,不關心對方是否收到
  • 頭部僅8字節(源端口+目標端口+長度+校驗和)

💡 四、如何選擇TCP還是UDP?

? 用TCP的場景

  • 需要可靠傳輸(如文件下載、網頁訪問)
  • 需保證數據順序(如數據庫同步)
  • 容忍一定延遲(如電子郵件)

? 用UDP的場景

  • 實時性優先(如視頻會議、直播)
  • 高頻小數據包(如DNS查詢、游戲戰斗數據)
  • 廣播/組播(如IPTV)

? 五、Java實戰代碼示例

1. TCP客戶端/服務端

TCP服務端(接收數據)

import java.io.*;
import java.net.*;
public class TCPServer {public static void main(String[] args) throws IOException {ServerSocket serverSocket = new ServerSocket(8888);System.out.println("TCP Server啟動,監聽端口 8888...");Socket clientSocket = serverSocket.accept();BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));String inputLine;while ((inputLine = in.readLine()) != null) {System.out.println("收到TCP消息: " + inputLine);}}
}

TCP客戶端(發送數據)

import java.io.*;
import java.net.*;
public class TCPClient {public static void main(String[] args) throws IOException {Socket socket = new Socket("localhost", 8888);PrintWriter out = new PrintWriter(socket.getOutputStream(), true);out.println("Hello TCP!");System.out.println("TCP消息已發送");socket.close();}
}

2. UDP客戶端/服務端

UDP服務端(接收數據)

import java.net.*;
public class UDPServer {public static void main(String[] args) throws IOException {DatagramSocket socket = new DatagramSocket(9999);byte[] buffer = new byte[1024];System.out.println("UDP Server啟動,監聽端口 9999...");DatagramPacket packet = new DatagramPacket(buffer, buffer.length);socket.receive(packet);String message = new String(packet.getData(), 0, packet.getLength());System.out.println("收到UDP消息: " + message);}
}

UDP客戶端(發送數據)

import java.net.*;
public class UDPClient {public static void main(String[] args) throws IOException {DatagramSocket socket = new DatagramSocket();InetAddress address = InetAddress.getByName("localhost");String message = "Hello UDP!";byte[] buffer = message.getBytes();DatagramPacket packet = new DatagramPacket(buffer, buffer.length, address, 9999);socket.send(packet);System.out.println("UDP消息已發送");}
}

📌 六、總結

  • TCP = 電話通話(可靠但慢)
  • UDP = 對講機喊話(快速但可能聽不清)
  • 選擇協議時,先問自己:“我更怕數據丟失,還是更怕延遲?”

? 互動問題

你在項目中用過UDP嗎?遇到了哪些挑戰?歡迎評論區討論!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/903401.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/903401.shtml
英文地址,請注明出處:http://en.pswp.cn/news/903401.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

STM32F103C8T6信息

STM32F103C8T6 完整參數列表 一、核心參數 內核架構? ARM Cortex-M3 32位RISC處理器 最大主頻:72 MHz(基于APB總線時鐘) 運算性能:1.25 DMIPS/MHz(Dhrystone 2.1基準) 總線與存儲? 總線寬度&#xff…

WPF-遵循MVVM框架創建圖表的顯示【保姆級】

文章速覽 1、技術棧實現步驟1、創建WPF工程項目2、引入框架 Caliburn.Micro、數據可視化庫ScottPlot.WPF3、創建文件夾,并創建相應的View & ViewModel4、創建啟動類5、將啟動類設置為啟動項6、編寫View7、編寫VM8、將VM和View中的圖表進行綁定9、備注 示例效果 …

kafka理論學習匯總

基礎知識 基本簡介 Kafka 是一個分布式流式處理平臺,是一種分布式的,基于發布/訂閱的消息系統。 Kafka特點: 1. 同時為發布和訂閱提供高吞吐量 Kafka 的設計目標是以時間復雜度為 O(1) 的方式提供消息持久化能力,即使對 TB 級以…

【亞馬遜云】AWS Wavelength 從理論講解到實驗演練

🪪 本文作者:許業寶 ?? 作者信息: 🌞 VSTECS 云解決方案架構師 | AWS Ambassador | 🪪 AWS Community Builder | 亞馬遜云科技技能云博主 ? 已獲六項 AWS 認證 | CKA、CKS認證 | …

ORACLE DATAGUARD遇到GAP增量恢復方式修復RAC環境備機的實踐

ORACLE DATAGUARD技術是一個常用的數據保護機制,在DATAGUARD運行過程中,遇到異常導致備機不同步,而主庫的歸檔日志也被清理,此時出現GAP,無法同步;就需要人工處理;對于小型數據庫重新全量同步數…

Java24 抗量子加密:后量子時代的安全基石

一、量子計算威脅與 Java 的應對 隨著量子計算機的快速發展,傳統加密算法面臨前所未有的挑戰。Shor 算法可在多項式時間內破解 RSA、ECC 等公鑰加密體系,而 Grover 算法能將對稱加密的暴力破解效率提升至平方根級別。據 NIST 預測,具備實用價…

day005

文章目錄 1. Linux系統核心文件1.1 查看系統版本信息1.1.1 /etc/os-release1.1.2 hostnamectl 1.2 查看主機名并修改1.2.1 hostname1.2.2 cat /etc/hostname1.2.3 hostnamectl 1.3 查看Linux內核版本1.3.1 uname -r1.3.2 hostnamectl 1.4 查看網卡信息并修改1.4.1 nmtui 網絡管…

常用財務分析指標列表

財務分析指標是企業財務管理和決策的重要工具,不同需求人群在各自的場景中運用這些指標來做出決策。企業管理者需要通過財務分析指標來評估企業經營狀況、制定戰略和決策;投資者利用這些指標來評估投資價值和風險;債權人通過財務分析指標來評…

刪除非今天日期文件夾--批處理腳本

echo off setlocal enabledelayedexpansion REM ----- 配置部分 ----- set “target_dirK:\360downloads\Software” set “log_file%temp%\delete_folders.log” REM ----- 管理員權限檢查 ----- NET FILE >NUL 2>&1 || ( echo 需要以管理員權限運行! …

QT創建軟件登錄界面(14)

文章目錄 一、本章說明二、登錄界面設計2.1 添加登錄窗口2.2 設置登錄窗口布局2.3 主函數中創建登錄窗口對象2.4 登錄窗口頭文件與c文件2.5 源文件添加三、注意四、源碼項目文件一、本章說明 注:本節為【基于STM的環境監測系統(節點+云服務器存儲+QT界面設計)】項目第14篇文…

小天互連即時通訊音視頻功能

小天互連即時通訊的音視頻功能是核心功能及優勢之一,小天互連即時通訊采用先進的音視頻編解碼技術,即使在網絡環境不好的情況下,也能智能優化保證會議穩定進行。因此可以讓遠程開會也變得和面對面交流一樣的便捷,極大地提升了溝通…

【LInux網絡】數據鏈路層 - 深度理解以太網和APR協議

📢博客主頁:https://blog.csdn.net/2301_779549673 📢博客倉庫:https://gitee.com/JohnKingW/linux_test/tree/master/lesson 📢歡迎點贊 👍 收藏 ?留言 📝 如有錯誤敬請指正! &…

【零基礎入門】ASP.NET Core快速搭建第一個Web應用

一、為什么選擇ASP.NET Core? 跨平臺支持:可在Windows/macOS/Linux系統運行 高性能:比傳統ASP.NET框架快10倍以上 開源生態:活躍的開發者社區和豐富的NuGet包 云原生支持:完美適配Docker和Kubernetes部署 二、開發…

AT2401C與RFX2401C問題處理資料

1、AT2401C 可以 PIN 對 PIN 替代 RFX2401C 嗎? 答:AT2401C 可以 PIN 對 PIN 替換 RFX2401C;同時 CB2401 也可以 PIN 對 PIN 替換 RFX2401C;我們主要推 AT2401C 這款芯片,如果客戶產 品需要過認證或者應用于音頻產品建…

Redis-緩存應用 本地緩存與分布式緩存的深度解析

Redis緩存場景與策略:本地緩存與分布式緩存的深度解析 在當今高并發、低延遲的互聯網架構中,緩存技術是優化系統性能的核心手段之一。Redis作為分布式緩存的標桿,與本地緩存共同構成了緩存體系的兩大支柱。然而,兩者的適用場景與…

LinuxAgent開源程序是一款智能運維助手,通過接入 DeepSeek API 實現對 Linux 終端的自然語言控制,幫助用戶更高效地進行系統運維工作

一、軟件介紹 文末提供程序和源碼下載 LinuxAgent 開源程序是基于LLM大模型的Linux智能運維助手。通過接入DeepSeek API實現對Linux終端的自然語言控制,幫助用戶更高效地進行系統運維工作。 二、版本特性對比 特性v1.4.1 1.4.1 版v2.0.3 2.0.3 版v2.0.4 2.0.4…

Shadertoy著色器移植到Three.js經驗總結

Shadertoy是一個流行的在線平臺,用于創建和分享WebGL片段著色器。里面有很多令人驚嘆的畫面,甚至3D場景。本人也移植了幾個ShaderToy上的著色器。本文將詳細介紹移植過程中需要注意的關鍵點。 1. 基本結構差異 想要移植ShaderToy的shader到three.js&am…

StarRocks SRCA 考試心得總結

文章目錄 前言0 什么是StarRcoks?1. 關于 SRCA 考試2. 備考資料與學習方式2.1 官方文檔與教程2.2 在線培訓課程2.3 實戰演練 3. 重點考試內容3.1 StarRocks 架構與原理3.2 數據導入與導出3.3 SQL 查詢優化3.4 性能調優 4. 備考建議4.1 多做實操4.2 注重考試中的細節…

什么是 Spring Profiles 以及如何在 Spring Boot 中使用:配置與實踐指南

在現代應用開發中,應用程序通常需要在不同環境(如開發、測試、生產)中運行,每個環境可能有不同的配置(如數據庫、日志級別、消息隊列)。Spring Profiles 是 Spring 框架提供的一項功能,用于根據…

Spring Cloud Gateway限流:基于Redis的請求限流實現

文章目錄 引言一、Spring Cloud Gateway限流基礎1.1 限流機制概述1.2 Redis分布式限流原理 二、實現基于Redis的限流方案2.1 環境準備與依賴配置2.2 配置限流策略2.3 自定義限流響應 三、高級應用與最佳實踐3.1 動態限流規則調整3.2 優先級與降級策略3.3 監控與告警 總結 引言 …