TCP 和 UDP,哪个更胜一筹?
myzbx 2025-04-24 05:32 10 浏览
作为 TCP/IP 中两个最具有代表性的传输层协议,TCP 和 UDP 经常被拿出来相互比较。这些协议具体有什么区别,又是什么作用呢?
在 IT 圈混迹多年的小伙伴们,对 TCP 和 UDP 肯定再熟悉不过了。作为计算机网络专业毕业多年的二狗子,除了自己 OSI 七层和 TCP/IP 四层模型,就是对网络协议印象比较深刻了。在面试中,网络协议也是我们必须要掌握的知识。作为 TCP/IP 中两个最具有代表性的传输层协议,TCP 和 UDP 经常被拿出来相互比较。
今天我们就来简单聊聊 TCP 和 UDP,不过在讲 TCP 和 UDP之前,我们先来了解一下 TCP/IP。
收藏的129页kcp优秀博文和下面视频,免费分享,私信【1】获取
TCP/IP 网络模型
网络设备之间要互相通信,双方就必须用相同的方法。比如,如何探测到通信目标、由哪一边先发起通信、使用哪种语言进行通信、怎样结束通信等规则都需要事先确定。不同的硬件、操作系统之间的通信,所有的这一切都需要一种规则。而这种规则就称之为协议(Protocol)。
TCP/IP 是互联网相关的各类协议族的总称,它以两个原始协议:传输控制协议(TCP)和Internet 协议(IP)来命名。比如:TCP,UDP,IP,FTP,HTTP,ICMP,SMTP 等都属于 TCP/IP 族内的协议。TCP/IP 模型是互联网的基础,它可以划分为四层,分别为链路层、网络层、传输层和应用层。
- 链路层:负责封装和解封装 IP 报文,发送和接受 ARP/RARP 报文等。
- 网络层:负责路由以及把分组报文发送给目标网络或主机。
- 传输层:负责对报文进行分组和重组,并以 TCP 或 UDP 协议格式封装成报文。
- 应用层:负责向用户提供应用程序,比如 HTTP、FTP、Telnet、DNS、SMTP 等。
下面我们主要来介绍一下传输层协议:TCP 和 UDP。
TCP
TCP 全称为传输控制协议(Transmission Control Protocol),它由 IETF 的 RFC 793 定义,是一种面向连接的点对点传输通信协议,它以有序顺序将数据包作为非结构化字节流发送。
TCP 通过使用序列号和确认消息,从发送节点提供有关传输到目标节点的数据包的传递的信息。TCP 确保数据的可靠性,端到端传递,重新排序和重传,直到达到超时条件或接收到数据包的确认为止。
TCP 是 Internet 上最常用的协议。当我们在浏览器中请求网页时,计算机会显示 TCP 数据包发送到 Web 服务器的地址,要求它将网页返还给我们。Web 服务器通过发送 TCP 数据包流进行响应,然后浏览器将这些数据包缝合在一起形成网页。TCP 的全部意义在于它的可靠性,它通过对数据包编号来对其进行排序,而且它会通过让服务器将响应发送回浏览器说“已收到”来进行错误检查。因此在传输过程中不会丢失或破坏任何数据。
我们接下来看下 TCP 的连接过程:
1.TCP 的连接过程(三次握手)
- 主机 A 通过将 TCP SYN 数据包发送到主机 B 来建立连接。其中包含了随机序列号(4321),该号标记了 A 将要发送数据的序号的开始。
- B 接收到数据包并以自己的序列号(5501)进行响应。响应中还包含确认号,该号是 A 的序列号加 1(4322)。
- A 通过发送确认号来确认服务器的响应,该确认号是 B 的序列号加 1(5502)。
2.TCP 终止连接
TCP 是全双工的,在断开连接时两端都需要发送 FIN 和 ACK。
- 若客户端 A 认为数据发送完成,则它需要向服务端 B 发送连接释放请求。
- B 收到连接释放请求后,会告诉应用层要释放 TCP 链接。然后会发送 ACK 包,并进入 CLOSE_WAIT 状态,此时表明 A 到 B 的连接已经释放,不再接收 A 发的数据了。但是因为 TCP 连接是双向的,所以 B 仍旧可以发送数据给 A。
- B 如果此时还有没发完的数据会继续发送,完毕后会向 A 发送连接释放请求,然后 B 便进入 LAST-ACK 状态。
- A 收到释放请求后,向 B 发送确认应答,此时 A 进入 TIME-WAIT 状态。该状态会持续 2MSL(最大段生存期,指报文段在网络中生存的时间,超时会被抛弃) 时间,若该时间段内没有 B 的重发请求的话,就进入 CLOSED 状态。当 B 收到确认应答后,也便进入 CLOSED 状态。
UDP
用户数据报协议(User Datagram Protocol)是一种无连接的传输层通信协议,用于建立低容错和丢失等待时间的连接,可以在网络内或跨网络传递服务或数据包。UDP 有不提供数据包分组、组装和不能对数据包进行排序的缺点。也就是说,当报文发送之后,是无法得知其是否安全完整到达的。
当应用程序使用 UDP 时,数据包仅发送到目标。发送者不必等待确保接收者已收到该数据包,它会继续发送下一个数据包。如果目标错过了一些数据包,则它们只会被丢掉,发送者不会重新发送它们。这也意味着设备可以更快地进行通信。
例如在游戏中,如果我们因为网络原因错过了接收一些 UDP 数据包,那当收到较新的数据包时,游戏画面可能会跳帧。如果错过了旧数据包,错过了就是错过了,因为就算没有我们,游戏也会继续运行。在游戏中重要的是正在发生的事情,而不是几秒钟前发生的事情。抛弃一些错误有助于加快游戏连接速度并减少延迟。
大多数应用程序都需要 TCP 的可靠性和纠错机制,但是某些应用程序也需要 UDP 的高效性和降低开销。我们可以通过一些诸如 Wireshark、Fiddler 等网络分析工具,就可以看到发送和接收不同类型的数据包。
TCP vs UDP
TCP 和 UDP 有许多区别和相似之处。它们都是通过 Internet 发送数据包的最常用的协议。并且它们都在 TCP/IP 协议栈的传输层上工作。
一个简单的例子,可以清楚地了解两者的差异:
假设有两座房子,House1 和 House2,并且必须从 H1 发送一封信到 H2。但是这两座房子之间有一条河。现在我们如何寄信?
解决方案 1:在河上架桥,然后将其交付。
解决方案 2:通过鸽子运送。
将第一个解决方案视为 TCP,必须进行连接(桥)才能传递数据(信)。
这样得到的数据是可靠的,因为它可以直接到达另一端而不会丢失或者出错。
第二种解决方案类似 UDP,无需连接即可发送数据。与需要建立连接(桥)的 TCP 相比,该过程更快。但是数据并不可靠:因为我们并不知道这只鸽子是否会朝正确的方向前进,或者会在途中掉信或遇到一些其他问题。
简单总结下 TCP 和 UDP 的区别:
**连接和无连接:**TCP 是面向连接的协议,而 UDP 是无连接协议。TCP 可以在发送数据之前在发送方和接收方之间建立连接。而 UDP 在发送数据之前不会先建立连接。
**可靠性:**TCP 是可靠的。使用 TCP 协议发送的数据可以保证传递到接收。如果数据在传输过程中丢失,它会恢复数据并重新发送。TCP 还将检查数据包中的错误并跟踪数据包,以保证数据不会丢失或损坏。
而 UDP 是不可靠的,它不能提供有保证质量的传递,并且数据报包可能会在传输中损坏或丢失。
**流量控制:**TCP 使用流控制机制来确保发送者不会一次发送太多数据包而压倒接收者。TCP 将数据存储在发送缓冲区中,并在接收缓冲区中接收数据。当应用程序准备就绪时,它将从接收缓冲区读取数据。如果接收缓冲区已满,则接收器将无法处理更多数据并将其丢弃。为了保持可以发送给接收方的数据量,接收方会告诉发送方接收缓冲区中有多少剩余空间(接收窗口)。每次接收到数据包时,都会使用当前接收窗口的值向发送方发送一条消息。UDP 不提供流控制。使用 UDP,数据包以连续流的形式到达或被丢弃。
**速度:**TCP 比 UDP 慢,因为它“顾虑”比较多:TCP 必须建立连接,进行错误检查,并确保按照发送顺序接收文件。而 UDP 则更简单,更高效。
**使用场景:**TCP 最适合用于对时序不太关心的,且要求高可靠性的应用程序。
- 万维网(HTTP,HTTPS)
- 安全外壳(SSH)
- 文件传输协议(FTP)
- 电子邮件(SMTP,IMAP / POP)
UDP 最适合需要速度和效率的应用程序。
- 串流影片
- 线上游戏
- 现场直播
- 域名系统(DNS)
- 互联网协议语音(VoIP)
- 普通文件传输协议(TFTP)
聊了这么多,相信你对 TCP 和 UDP 也有了基本的了解,那么你认为:TCP 和 UDP,哪个更胜一筹呢?
- 上一篇:TCP/IP联网门禁一体机说明
- 下一篇:网络大神眼中的TCP/IP协议与UDP协议
相关推荐
- 一键生成高颜值图表!让你的文字瞬间有画面感,职场人必备!
-
哈喽,打工人们!忙碌的周中,大熊又来给你们带来一个超实用的效率神器啦!这次的宝藏网站绝对是那种用过就离不开的"真香"型产品!假设你明天就要做重要汇报,可面对一大堆密密麻麻的文字材料,你...
- 批量将 Word 转换为 PDF/Excel/Txt/图片等多种格式
-
Word文档是我们工作中经常会打交道的一种文档格式,我们也经常会有需要对Word文档进行格式转换的需求,比如将Word格式转换为PDF、将Word文档转换为Excel、将Word...
- 绝了!一键用AI生成高颜值动态PPT(附详细步骤+Prompt)
-
大家好,我是一名酷爱研究AI的产品经理,最近我有个新发现:那些花了你3天做出来的PPT,现在用AI可以1小时搞定!而且颜值还高!为什么AI做PPT比传统方式效率高10倍?我用一张图就能告诉你:AI生成...
- ztext - 简单几行代码创建酷炫3D特效文字的开源JS库
-
把网页上的文字变成酷炫的3D风格,还能制作旋转动效,有了ztext.js,只需要几行代码。ztext能做什么ztext.js是一个能把常规的平面文字变成3D样式的前端开源代码库,让开发者...
- 文字内插入小图片,也太可爱了吧(文字中怎么插图片)
-
图文排版H5手机版秀米有小伙伴留言问添加图片的时候可不可以把图片添加到文字之间比如下面这句话中的小贴纸图片后面可以接着输入文字其实吧这就是咱们的『文字内插入小图片』功能嘛可以用来在文字内加个表情包又...
- Linux环境下C++代码性能分析方法(linux怎么写c++代码)
-
技术背景在开发C++应用程序时,找出代码中运行缓慢的部分是进行性能优化的关键。在Linux系统上,有多种工具和方法可用于对C++代码进行性能分析,每种方法都有其特点和适用场景。实现步骤手动中断调试法在...
- SVG互动图文,让你的文章更有趣!教你4种简单易学的黑科技玩法!
-
如果你是一个公众号创作者,那么你一定想知道如何让你的文章更加吸引人,更加有趣,更加有创意。你可能已经尝试过各种图文排版技巧,但是你是否知道,有一种黑科技可以让你的文章变得更加酷炫,更加互动,更加爆款?...
- Videoscribe怎么实现实心中文汉字的手绘制作
-
很多朋友在制作手绘视频的时候,不知道怎么输入实心的中文汉字,之前我们已经给大家分享了怎么输入汉字的方法,但是有一点遗憾的是输出的汉字是空心的手绘展示,在视觉上并不是非常的美观。经过大家不断的探索,终于...
- 一款用于将文本转化成图表的现代化脚本语言
-
大家好,又见面了,我是GitHub精选君!今天要给大家推荐一个GitHub开源项目terrastruct/d2,该项目在GitHub有超过10.3kStar,用一句话介绍该项目就是:...
- 探秘 Web 水印技术(制作水印网站)
-
作者:fransli,腾讯PCG前端开发工程师Web水印技术在信息安全和版权保护等领域有着广泛的应用,对防止信息泄露或知识产品被侵犯有重要意义。水印根据可见性可分为可见水印和不可见水印(盲水印)...
- 不忍心卸载的五款神仙工具(不忍心卸载的五款神仙工具是什么)
-
001.效率工具uTools-装机必备的生产力工具集uTools是一款非常强大的可以装下几乎所有效率工具的电脑生产力工具集,目前拥有Windows、Mac和Linux三个版本。软件界面...
- 「SVG」飞花令!这份最高检工作报告“超有料”
-
原标题:【SVG】飞花令!这份最高检工作报告“超有料”栏目主编:秦红文字编辑:沈佳灵来源:作者:最高人民检察院...
- svg|2025政府工作报告,有没有你关心的数据?
-
··<setattributeName="visibility"begin="click+0s"dur="1ms"fill="freeze"restart="never"to="hi...
- videoscribe只能输入英文,如何输入中文文本?
-
videoscribe只能输入英文,如何输入中文文本?打开VideoScribe软件,打开要添加中文字体的位置。打开Photoshop并在文件中创建一个新的透明背景图层。注意:必须是透明背景层。...
- 五个流行的SVG在线编辑器(svg编辑工具)
-
随着响应网络的发展,越来越多的高质量的SVG在线编辑器被公众所熟知。SVG矢量图形也越来越受欢迎,以便在任何设备上呈现图像,甚至一些易于使用的SVG在线编辑器,可以替代PS,本文总结了五种流行的SVG...
- 一周热门
- 最近发表
- 标签列表
-
- HTML 简介 (30)
- HTML 响应式设计 (31)
- HTML URL 编码 (32)
- HTML Web 服务器 (31)
- HTML 表单属性 (32)
- HTML 音频 (31)
- HTML5 支持 (33)
- HTML API (36)
- HTML 总结 (32)
- HTML 全局属性 (32)
- HTML 事件 (31)
- HTML 画布 (32)
- HTTP 方法 (30)
- 键盘快捷键 (30)
- CSS 语法 (35)
- CSS 选择器 (30)
- CSS 轮廓 (30)
- CSS 轮廓宽度 (31)
- CSS 谷歌字体 (33)
- CSS 链接 (31)
- CSS 中级教程 (30)
- CSS 定位 (31)
- CSS 图片库 (32)
- CSS 图像精灵 (31)
- SVG 文本 (32)