网络编程双雄争霸:TCP 的“强迫症”与 UDP 的“速度与激情”

2027年新疆职业院校技能大赛“网络系统管理”A模块网络构建真题 2027年新疆职业院校技能大赛“网络系统管理”A模块——网络构建真题,仅供学习使用。 阅读详情

前言

在计算机网络的世界里(特别是传输层),有两个性格迥异的“快递员”统治着数据的发送与接收:一个是做事滴水不漏、患有严重强迫症的 TCP,另一个是追求极致速度、不管不顾的 UDP。

无论你是做 Web 开发、即时通讯,还是嵌入式物联网(IoT),这道选择题永远绕不开。今天我们就来一场硬核对比,看看在你的项目中,到底该选谁?


一、 TCP:患有“强迫症”的可靠管家

TCP (Transmission Control Protocol,传输控制协议) 是一个面向连接的协议。它的座右铭是:“哪怕慢一点,也不能丢东西,更不能乱序!”

1. 核心机制:三次握手与四次挥手

TCP 最著名的就是它的礼貌。在发送数据前,它必须先建立连接:

  1. 客户端:“在吗?我想给你发数据。”(SYN)

  2. 服务端:“在的,我准备好了,你发吧。”(SYN + ACK)

  3. 客户端:“好嘞,那我开始了。”(ACK)

只有这三步走完,数据通道才算打通。

2. “强迫症”的表现(可靠性保障)
  • 确认应答(ACK):每发一个包,接收方必须回一个“收到了”。如果发送方没收到回复,它会认为包丢了,然后重传。

  • 流量控制:如果你发得太快,接收方处理不过来,TCP 会自动降低发送速度(滑动窗口)。

  • 拥塞控制:如果网络堵车了,TCP 也会自动减速,防止网络瘫痪。

  • 数据排序:网线上的数据到达顺序可能是乱的(先发的后到),TCP 会在接收端把它们重新排好序,再交给应用层。

比喻:TCP 就像打电话。你必须确认对方接通了才能说话,如果你说了一句对方没听清(丢包),你会再说一遍,直到对方说“嗯,听清了”。


二、 UDP:崇尚“速度与激情”的狂野车手

UDP (User Datagram Protocol,用户数据报协议) 是一个无连接的协议。它的座右铭是:“发出去就完事了,收没收到我不管!”

1. 核心机制:发后即忘 (Fire and Forget)

UDP 不需要握手,不需要挥手,也没有复杂的连接状态。 你给它一个 IP 和端口,它把数据打包往网线上一扔,任务就结束了。

2. “狂野”的表现
  • 无连接:省去了建立连接的延时(RTT)。

  • 头部开销小:TCP 头部至少 20 字节,UDP 头部只有 8 字节。

  • 不保证可靠:丢包了?UDP 不管。乱序了?UDP 不管。

  • 支持广播/多播:TCP 只能一对一,UDP 可以像村口大喇叭一样,一个人喊,全村(局域网)都能听到。

比喻:UDP 就像寄明信片或者视频直播。你把卡片扔进邮筒,它可能会寄丢,你也不知道对方啥时候能收到。在直播里,偶尔花屏一下(丢几个包)没关系,只要画面流畅就行,没必要为了那一帧画面卡住整个直播。

三、 巅峰对决:一张表看懂区别

特性TCP (传输控制协议)UDP (用户数据报协议)
连接性面向连接 (Connection-oriented)无连接 (Connectionless)
可靠性高 (不丢包、不乱序、无错误)低 (尽力而为,可能丢包)
速度较慢 (握手、重传、拥塞控制拖慢速度)极快 (没有额外负担)
头部开销20 ~ 60 字节8 字节 (极其轻量)
数据模式流模式 (Stream):像水流一样无边界数据报 (Datagram):一个个独立的包
应用场景网页(HTTP)、文件传输(FTP)、邮件(SMTP)视频会议、游戏、DNS、广播

四、 代码视角的差异 (C++ Socket)

在代码层面,两者的初始化只有一行之差,但逻辑天差地别。

1. TCP Socket

你需要指定 SOCK_STREAM。

// 创建 Socket
int sockfd = socket(AF_INET, SOCK_STREAM, 0); 

// 必须连接
connect(sockfd, (struct sockaddr*)&server_addr, sizeof(server_addr));

// 发送数据 (像写文件一样)
send(sockfd, buffer, len, 0);
2. UDP Socket

你需要指定 SOCK_DGRAM。

// 创建 Socket
int sockfd = socket(AF_INET, SOCK_DGRAM, 0); 

// 不需要 connect,直接指定发给谁
sendto(sockfd, buffer, len, 0, (struct sockaddr*)&dest_addr, sizeof(dest_addr));

五、 灵魂拷问:我该选谁?

在做架构设计时,请遵循以下原则:

  1. 选 TCP,如果...

    • 你需要数据绝对准确(比如传输 OTA 固件包,错一个比特机器就变砖)。

    • 你需要传输文件或长文本。

    • 你不在乎那几十毫秒的延时。

  2. 选 UDP,如果...

    • 你需要实时性(比如控制机器人的手柄指令,延迟比准确更重要。这一秒的指令丢了,下一秒新的指令马上就来了)。

    • 你需要极高的吞吐量且允许少量丢包(比如视频流)。

    • 你需要做局域网设备发现(广播)。

  3. 高级玩法:RUDP (Reliable UDP)

    • 游戏行业常用的“黑科技”。基于 UDP 开发,但自己在应用层写代码实现了重传机制(模仿 TCP)。既要 UDP 的快,又要 TCP 的稳(比如 QUIC 协议)。


总结

  • TCP 是穿西装打领带的律师,严谨、繁琐,但值得信赖。

  • UDP 是骑摩托车的快递员,风驰电掣,偶尔会掉个包裹,但胜在够快。

理解了这两者的脾气,你才能在网络编程的世界里游刃有余。

linux 内核vxlan收发包流程 1.vxlan口收包处理流程 前面几章详细介绍了vxlan接口的使用,而且已经知道vxlan是 MAC IN UDP中的封装,因此,在解封装之前,一切按照原有流程走,在此复习一下内核收发包流程(驱动层的数据处理这次不再解析,直接从__netif_receive_skb_core开始) #物理网卡处理中断,触发softirq i40e_intr └─napi_schedule_irqoff #i40e softirq把包放到per cpu backlog,触发softirq i40e_napi_p 阅读详情

相关推荐

Camera metadata

Camera metadata

weixin_42136255的博客 2529

四路 CAN 转 4G 网关

SG‑CAN‑4G‑410 为**四路隔离 CAN 转 4G 工业网关**,把 CAN2.0A/B 报文封装成 TCP/UDP 报文,通过 4G 无线网络实现 CAN 总线远程监控、远程控制。四路 CAN 相互独立;以太网仅用于本地配置,不做业务数据传输;支持移动 / 联通 / 电信 4G 网络。

S2003120416的博客 165

彩票预测的可能性与算法分析

彩票作为一种以随机数为基础的赌博形式,吸引了大量希望一夜暴富的参与者。尽管许多人希望通过某种方式预测彩票结果,以增加中奖几率,但彩票预测的可能性依然是一个充满争议和误解的话题。本文将探讨彩票是否能够预测的理论依据,分析可能的预测算法,并解释这些算法为何在实际应用中难以奏效。

m0_38012434的博客 2万+

【计算机网络】断点续传是怎么做到的:从 Range 请求到分片上传的完整机制

断点续传在下载侧靠的是 HTTP 现成的 Range 协议,Content-Range 保证偏移对得上,If-Range 防止文件变更导致的错误拼接;上传侧没有标准,需要自己设计 init/part/complete 三段式交互,核心是让服务端记住“哪些块已经收下”,从而把失败粒度从整个文件降到单个分片。 这套机制可以迁移到任何长耗时操作的设计上。判断方法很简单:先问失败粒度是多少。如果一次操作失败就得从头再来,那它迟早会在生产环境里出问题——传输、批量导入、数据迁移、长事务,都是同一个道理。把大操作切成

2503_94545876的博客 525

USB-Type-C PCB布局布线设计规范

USB Type-C连接器有24个引脚。图1和图2分别显示了USB Type-C插座和插头的插针。母头/母座公头/插头可以很明显看出,插口内的Pin功能相对于中心对称。公头插入母头,无论正反插,引脚功能都完美契合。而且电源VBUS/GND都拥有4个Pin,最大支持5A电流,在保证高速数据传输的同时也提高了电流承载能力。表 1 和表 2 分别汇总了在 USB Type-C 型插座和插头上所使用的信号列表。

weixin_63005522的博客 8278

保姆级教程:用R语言自动化处理FAERS季度数据(从文件合并到删除废弃Case)

本文提供了一份详细的R语言教程,指导如何自动化处理FAERS季度数据,包括文件合并和删除废弃Case。通过使用tidyverse、fs等R包,构建健壮的自动化流程,特别适合药物安全监测领域的数据分析师。教程涵盖环境准备、智能合并多季度数据、精准删除废弃Case等关键步骤,并提供了错误处理与日志记录的实用技巧。

weixin_42701915的博客 126

汽车电子标定与测量的核心基石XCP协议

控制逻辑(算法)与标定参数(数据)。如果每次优化参数都要修改源码、重新编译并刷写Flash,整个研发周期的效率将趋近于零。标定(Calibration)技术正是为了解决这一痛点而生。它允许工程师在ECU运行过程中,动态观察内部变量(测量,Measurement),并在不中断运行的前提下实时修改控制变量(标定,Calibration)。在这一领域,XCP(Universal Measurement and Calibration Protocol,通用测量与标定协议)是公认的行业标准与核心基石。

diansandaosilaodanan的博客 379

5分钟搞懂基因组规模代谢网络(GSMM):从数据库选择到模型构建全流程

本文详细解析基因组规模代谢网络(GSMM)构建的全流程,从数据库选择到模型优化。重点介绍MetaCyc、BiGG等主流数据库的黄金三角评估法则,对比自上而下与自下而上两种建模方法,并提供模型修剪、仿真优化的实用技巧与避坑指南,帮助研究者高效构建精准代谢网络模型。

weixin_30872157的博客 137

【Linux网络】TCP 服务器并发处理多客户端:从 fork 分发到双重 fork 彻底消灭僵尸进程

拆解 TCP 服务器并发演进链:fork 分发连接、SIGCHLD 循环回收僵尸、双重 fork 交孙进程给 init 收养,并给出模型选型与线上排错对照。

2301_78967866的博客 426

粒子群算法实战:用Matlab解决旅行商问题(TSP)的完整代码解析

本文提供了使用粒子群算法解决旅行商问题的完整Matlab实战指南。通过将连续空间的粒子群算法进行离散化改造,采用基于交换序的策略来更新粒子位置与速度,并给出了从问题定义、数据结构设计、核心函数实现到主迭代循环的详细代码解析。文章还探讨了参数调优、性能优化及处理复杂TSP变体的进阶思路,为物流规划、路径优化等领域的工程应用提供了可直接复用的解决方案。

m2n3o4p5的博客 350

2022(一等奖)B360基于Arcpy与SVM的滑坡易发性评价

此外,在ArcGIS平台下,“易发性图预测(多进程)”工具的运行时间为2h 48m 3s,“易发性图预测(单进程)”工具的运行时间为5h 19m 27s,运行时间缩短了近2h 31m 24s,运行效率提高了47.39%。在ArcGIS Pro平台下,“易发性图预测(多进程)”工具的运行时间为20m 12s,“易发性图预测(单进程)”工具的运行时间为1h 26m 47s,将运行时间缩短了近1h 6m 35s,运行效率提高了76.72%。滑坡的发生受各种影响因素的影响,目前,影响因素的选择没有一个统一的标准。

2301_77310370的博客 1467

Linux 服务器性能排查手册(2026):CPU、内存、磁盘IO、网络四大瓶颈定位

iptables 四表五链模型、firewalld zone 信任级别、云安全组与主机防火墙的关系与优先级,避坑改了防火墙把自己挡在服务器外面的翻车事故。

2502_91473995的博客 321

Pixhawk RPi CM4 Baseboard 树莓派CM4安装Ubuntu20.04 server 配置ros mavros mavsdk

cm4配置ros mavros连接pixhawk4 Pixhawk RPi CM4 Baseboard

baidu_41704597的博客 2128

AI 芯片片上网络 NoC 深度解析:flit、虚通道与拥塞控制如何决定 GPU/TPU/LPU 的算力利用率

AI芯片算力瓶颈不在FLOPS,而在片上网络(NoC)——数据搬运的能耗与延迟决定MFU上限。物理限制下,长线延迟不随工艺缩小,迫使NoC将全局布线拆为可流水的短链路;能量账显示,一跳传输耗能可达数十次乘加操作。拓扑选择直接影响性能:二维mesh虽布线可行,但均匀流量下每节点可用带宽按1/√N衰减,实测仅达标称值30%。虚通道、双网设计、静态调度(如Groq)等技术旨在突破此瓶颈。从总线到crossbar再到多跳NoC,本质是用延迟换可行性。未来趋势:专用通路(脉动阵列)、晶圆级集成(Cerebras)、跨

我的博客 85

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

台湾行情数据API接入教程

想用程序获取台股行情,很多人第一步会搜“台股资料 API 推荐”,结果发现选择不少:证交所有免费接口,Yahoo Finance 也能查,券商还有自己的 API。真正写代码时才发现,有的数据只到收盘,有的延迟 20 分钟,有的必须先开户。本文先梳理台湾行情数据的几种获取渠道,再用 Python 从零搭一个可以运行的台股数据脚本:查代码清单、取实时报价和盘口、拉历史K线、做复权、用 WebSocket 接收实时推送,最后结合台积电 ADR 和新台币汇率计算跨市场溢价。

qq_34102871的博客 302

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Qt网络编程实战指南:从底层Socket到现代异步架构的选型与避坑

本文梳理Qt网络编程的核心模块与演进路线,对比QTcpSocket与QNetworkAccessManager的使用边界,结合HTTP请求与TCP长连接的完整示例,说明信号槽、内存管理与事件循环的配合方式。重点记录连接池设计、证书校验、线程亲和性等实际开发中的关键决策点,帮助读者在C/S或跨平台项目中建立稳定的网络层基座。

2402_83344867的博客 291

从母钟到子钟:NTP 网络时钟系统架构与软件接口

本文从工程角度简要介绍公共场所的时间同步需求、NTP协议的定位,以及典型LED同步时钟的系统架构与硬件设计,以讯鹏科技4寸与5寸同步时钟为例。

SPZHCS的博客 153

DPVS 报文黑匣子与 Crash 自动拉黑:给转发面装上“飞行记录仪“

谁打挂了我(crash dump)、他之前发了什么(慢路径环)、他还会再来(入口拉黑)。设计上我们始终坚持两条原则:记录与决策分离(黑匣子永远只说不做),以及误伤成本优先于漏放成本(三道闸门全部通过才拉黑,expire 到期自动解封)。性能上,全量快路径摘要 + 入口查表的综合开销低于 1.3%,在 FIP 网关的流量水位下不可感知。飞行记录仪的价值不在于飞机正常飞行的时候,而在于它让每一次事故都变成一次改进。对转发面来说,同样如此。

zyun360的博客 270

HTTP、SSE、WebSocket、Socket.IO:实时通信方案深度对比与选型指南

HTTP 是基础,是整个 Web 的底座;SSE 是单向推送的轻量最优解;WebSocket 是高性能双向实时通信的底层标准;Socket.IO 是一套降低开发门槛、抹平环境差异的上层框架。技术选型永远不是“哪个技术更酷”,而是匹配业务的实时性、交互方向、网络环境、团队维护成本。简单需求优先轻方案,复杂双向实时再上 WebSocket;如果追求快速落地、兼容各种奇葩网络,Socket.IO 是很好的选择。

changshuaihua001的博客 346

Linux网络编程:TCP多线程远程命令执行与线程池改造

前面已经实现了 TCP Echo Server,并且通过多进程和多线程解决了多个客户端连接的问题。不过目前服务器的业务还是比较简单,客户端发送什么,服务器就返回什么。这次在原来的多线程服务器上继续做一些改动,实现一个简单的远程命令执行功能。这次主要学习了两个内容。第一个是多线程远程命令执行。通过 Command 类封装命令的接收、检查、执行和结果返回,并使用 set 对允许执行的命令进行限制。第二个是线程池版本的 TCP Echo Server。通过和std::bind。

2501_93388101的博客 367

计算机毕业论文系统测试怎么写:从测试用例设计到对比实验,让“工作量“看得见

本文系统阐述计算机毕业论文中“系统测试”章节的撰写方法,涵盖功能测试用例设计(等价类、边界值、判定表)、性能测试压测方案与关键指标(平均响应时间、P99、吞吐量)、对比实验设计原则及评价指标选取。强调通过量化数据、阶梯加压曲线、瓶颈定位与多维度对比,真实展现研究工作量与技术深度,提供可直接套用的测试用例表与实验方案模板,助力论文脱颖而出。

wuwangzhiduoshao的博客 301

亚远景-欧盟 NIS2 与 CRA 双法规生效,车载出口企业网络安全与过程合规建设要点

亚远景结合法规要求与车载行业特性,梳理双法规对整车与零部件出口企业的核心影响,说明如何以 ISO/SAE 21434 为核心、以 ASPICE 为过程底座,搭建满足欧盟要求的网络安全与过程合规体系。

yayuanjingkeji的博客 187

23 网络性能与 QoS:带宽、时延、吞吐计算与保障机制

带宽是上限、不是实际速度;时延由传输、传播、处理、排队四段组成。一道题让你算端到端时延和吞吐,关键是先找到瓶颈在哪一跳。QoS 靠分类、标记、队列、调度四步保障,配一张瓶颈定位+容量规划图,再跟 3 道真题。

weixin_46316564的博客 221

python如何编通讯程序

通讯程序需要处理IP地址和端口。IP地址用于标识网络上的设备,端口用于标识设备上的服务。编写通讯程序时,需要选择合适的端口号并确保它不与其他服务冲突。此外

2601_96798011的博客 178

五个压测工具简介

本文对比五款主流性能测试工具:JMeter(开源全能,适合接口与复杂业务压测)、sysbench(数据库基准调优标杆,轻量高效)、ab(极简HTTP压测,快速摸底)、LoadRunner(商业企业级,支持复杂场景与特殊协议)、mysqlslap(MySQL内置,快速验证并发能力)。各具优势,适用于不同场景,开发者可根据需求选择。

呆萌很的博客 185

reqrio协议指纹库ja3 ja4

HTTP 层的行为参数看起来琐碎,但每一条都是可比对的信号:Header 的名称大小写与排列顺序、Cookie 的存储与携带策略、重定向的跟随层数与跨域处理、压缩算法的支持范围(gzip、Deflate、Brotli、Zstd)、请求体的编码方式(表单、JSON、文本、二进制、Base64、十六进制、URL 编码)。更进一步的是流式模型——把 HTTP/1.1、HTTP/2、HTTP/3 的处理统一成同一种“流”,可以同时发出多个请求,再按需接收响应,这对需要精细控制时序的采集场景很有价值。

2603_96485347的博客 271

秋招学习笔记 day109

在三次握手阶段,首先初始状态下,是 close 的服务端进入 listen 状态,然后客户端是发送一个序号以及 SYN 标志,然后进入 SYN_SENT 阶段,服务端收到之后发送一个 ACK,它 ACK 是客户端发的序号加一,然后发送 ACK 标志,以及自己的 SYN 标志。SYN 进入 SYN_RECEIVE 阶段之后,客户端收到服务端的确认之后,返回最后的确认和 SYN,这时候可以写数据,这时候客户端进入 ESTABLISHED 的状态,然后服务端收到确认后也是一样的。但是事实上,不知道就是不知道。

m0_57222081的博客 188
上一篇: C++ 现代编程:彻底搞懂 std::function 与 using 的万能封装术
下一篇: 【STM32硬核调试】打造嵌入式“黑匣子”:系统崩溃时自动保存日志至Flash (附源码)
Max_uuc
博客等级 码龄5年 198粉丝 207原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值