TCP 和 UDP 的区别:解析网络传输协议

news2024/12/28 10:51:20

引言

在计算机网络的世界中,TCP(Transmission Control Protocol,传输控制协议)和 UDP(User Datagram Protocol,用户数据报协议)是两种极为重要且应用广泛的传输层协议。它们在功能、特性以及适用场景等诸多方面存在着明显的区别,下面我们就来详细探讨一下这两者之间的差异。

一、基本概念

TCP

TCP 是一种面向连接的、可靠的、基于字节流的传输层协议。它就如同在网络通信的两端建立起了一条虚拟的 “管道”,在数据传输之前,需要先通过三次握手来建立连接,确保通信双方都已经准备就绪,能够进行稳定的数据交互。在传输过程中,TCP 会对发送的数据进行编号、确认、重传等一系列操作来保证数据能够准确无误地从发送端到达接收端。而且,数据是按照顺序依次接收的,接收端会将接收到的数据按照发送的顺序重新组装起来,就好像把打乱的拼图块按正确顺序拼接完整一样。当数据传输完毕后,还会通过四次挥手来优雅地断开连接。

UDP

UDP 则是一种无连接的、不可靠的、基于数据报的传输层协议。它不需要像 TCP 那样事先建立连接,发送端可以随时向网络中发送数据报,就好比在人群中随意喊话,并不提前确认对方是否在听或者准备好了接收信息。UDP 也不会对数据报进行编号、确认和重传等操作,数据报有可能会在传输过程中丢失、重复或者乱序到达接收端,接收方收到的数据报就是发送方发送时的原样,并不会去整理顺序等,所以使用 UDP 传输数据时并不能保证数据一定能完整无误地被接收。

二、可靠性对比

TCP 的可靠性保障
  • 确认机制:TCP 每发送一段数据,都会等待接收方发送回确认信息(ACK),只有收到了对应的数据确认,发送方才会继续发送下一部分数据,这样能确保每一个字节的数据都被对方正确接收了。例如,你发送一份重要文件,接收方每收到一部分都会回复说 “这部分我收到了,可以发下一部分了”,这样就保证了文件完整传输。
  • 重传机制:如果发送方在一定时间内没有收到接收方的确认消息,就会认为该部分数据可能丢失了,进而会重新发送这部分数据,以此来应对网络中可能出现的数据丢失情况,最大限度地保证数据的完整性。
  • 顺序保障:接收端会按照数据的编号顺序来整理接收到的数据,保证数据是按照发送的顺序依次排列的,不会出现混乱的情况,就像我们按照页码顺序阅读一本书一样,保证内容的连贯性。
UDP 的不可靠性表现

由于 UDP 没有上述的确认、重传以及顺序保障机制,所以它无法确保数据一定能准确无误地到达接收端。例如,在实时视频流传输中使用 UDP 时,偶尔出现一两个画面的数据丢失,可能只是画面短暂的卡顿或者花屏,但后续的数据依然在继续传输,它更注重实时性而不是数据的绝对完整可靠。

三、连接特性对比

TCP 的面向连接特性

TCP 在通信之前,必须通过三次握手的过程来建立连接。发送方首先发送一个带有 SYN(同步序列号)标志的数据包,表示希望建立连接;接收方收到后回复一个 SYN + ACK 的数据包,表示同意建立连接并对发送方进行确认;最后发送方再回复一个 ACK 数据包,至此连接正式建立。在通信结束后,还需要经过四次挥手来断开连接,整个过程就像是打电话,先拨号建立通话线路(三次握手),通话结束后挂断电话(四次挥手),这种面向连接的方式使得通信过程更加有序和可靠,但同时也带来了一定的开销,比如建立和断开连接时占用的时间和网络资源。

UDP 的无连接特性

UDP 不需要建立连接就可以直接发送数据,就像发传单一样,不管对方有没有准备好,直接把传单(数据报)发出去就行。这种方式使得 UDP 在发送数据时非常迅速,能够快速地将数据投送到网络中,尤其适用于那些对实时性要求极高、偶尔丢失一点数据也不影响整体功能的应用场景,比如实时的在线游戏操作指令发送等,操作指令更注重快速送达让游戏及时响应,而不是绝对保证每个指令都一定被接收。

四、数据传输形式对比

TCP 的字节流传输

TCP 把要传输的数据看作是一连串的字节,这些字节按照顺序依次传输,接收端也是按照字节流的顺序来进行组装和解读数据。例如,发送端发送一段文字信息,接收端会根据字节的先后顺序完整地还原出这段文字内容,就像用线穿珠子一样,珠子按照顺序串起来形成完整的一串项链(完整的数据)。

UDP 的数据报传输

UDP 是以数据报为单位来进行传输的,每个数据报都是独立的个体,有自己固定的格式和大小限制等,发送端发送的数据报在网络中是各自独立传输的,接收端收到的数据报也是独立存在的,不会像 TCP 那样将它们组装成连续的字节流,更像是一个个单独的包裹被分别投递和接收。

五、首部开销对比

TCP 首部

TCP 的首部相对比较长,一般为 20 字节(如果有选项字段会更长),它包含了很多用于实现可靠传输、流量控制、连接管理等功能的字段,比如源端口、目的端口、序列号、确认号、首部长度、标志位(如 SYN、ACK、FIN 等)、窗口大小、校验和、紧急指针等。这些字段虽然有助于保证数据传输的质量和连接的有效管理,但也使得 TCP 首部在传输时占用了一定的网络带宽和资源。

UDP 首部

UDP 的首部则比较简洁,仅仅只有 8 个字节,包含源端口、目的端口、长度和校验和这几个基本字段。因为 UDP 不需要像 TCP 那样复杂的功能支持,所以其首部开销很小,能更高效地利用网络带宽来传输数据本身,尤其适合那些对数据量传输效率要求较高且对可靠性要求不是特别严格的场景。

六、适用场景对比

TCP 的适用场景
  • 文件传输:例如通过 FTP(文件传输协议)来传输大文件时,需要确保文件的每一个字节都准确无误地到达目的地,TCP 的可靠性保障能很好地满足这一需求,避免文件出现损坏、丢失数据等情况。
  • 网页浏览:当我们在浏览器中访问网页时,浏览器使用 HTTP(超文本传输协议),而 HTTP 通常是基于 TCP 协议的,这样能保证网页的 HTML、CSS、图片等各种资源完整且有序地传输过来,让我们看到完整、正确的网页页面。
  • 电子邮件传输:像 SMTP(简单邮件传输协议)、POP3(邮局协议版本 3)等用于电子邮件收发的协议大多也是基于 TCP 的,保证邮件内容准确地从发件人发送到收件人的邮箱中,不会出现邮件内容丢失或者错乱的情况。
UDP 的适用场景
  • 实时视频和音频流传输:如在线直播、视频会议等场景,虽然偶尔丢失一些视频帧或者音频片段可能会稍微影响观看体验,但更重要的是要保证实时性,让画面和声音能够及时传递给观众,UDP 的快速传输和低延迟特性就很适合这类应用,即使有少量数据丢失也不会对整体的实时播放造成严重破坏。
  • 实时在线游戏:在游戏中玩家发送操作指令时,需要指令能快速送达服务器以便游戏能立即做出响应,稍微的指令丢失可以通过游戏自身的一些机制来弥补(比如角色位置的快速调整等),所以 UDP 能更好地满足游戏对实时操作响应的要求。
  • 域名系统(DNS)查询:当我们在浏览器中输入网址后,计算机需要通过 DNS 来查询对应的 IP 地址,这个查询过程一般使用 UDP,因为 DNS 查询通常数据量较小,而且更注重快速得到结果,偶尔的查询失败可以通过再次发起查询来解决,UDP 的高效传输能加快查询速度。

综上所述,TCP 和 UDP 作为网络传输层的两大重要协议,各有其独特的优缺点和适用场景。在实际的网络应用开发和部署中,需要根据具体的业务需求来选择合适的协议,以便在可靠性、实时性、资源利用等多个方面达到最佳的平衡,确保网络通信的高效与顺畅

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2266881.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

学习threejs,PerspectiveCamera透视相机和OrthographicCamera正交相机对比

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️THREE.PerspectiveCamera透…

apifox

请求头head 如果传json串的话,需要将Content-Type覆盖为application/json 请求体body 有一个场景:我先创建任务,返回值为任务id,接着我要去根据任务id 删除这个任务 如果创建任务api的返回值中,任务id是以数组/ 对象…

虚幻引擎结构之ULevel

在虚幻引擎中,场景的组织和管理是通过子关卡(Sublevel)来实现的。这种设计不仅提高了资源管理的灵活性,还优化了游戏性能,特别是在处理大型复杂场景时。 1. 场景划分模式 虚幻引擎采用基于子关卡的场景划分模式。每个…

基于SpringBoot在线音乐系统平台功能实现十七

一、前言介绍: 1.1 项目摘要 随着互联网技术的迅猛发展和普及,人们对音乐的获取和欣赏方式发生了巨大改变。传统的音乐播放方式,如CD、磁带或本地下载的音乐文件,已经不能满足用户日益增长的需求。用户更希望通过网络直接获取各…

圣诞树的装饰挑战:非线性分析能阻止圣诞树倒塌吗?

节日带来了独特的机会让我们看到工程原理可以在意想不到的地方大展身手,比如装饰圣诞树。 实际上,Altair 技术专家 Matthew Sauer 在装饰他家的圣诞树时就遇到了这样的机会。从一个节日传统开始,很快就变成了一个引人入胜的非线性分析案例研究…

线性代数行列式

目录 二阶与三阶行列式 二元线性方程组与二阶行列式 三阶行列式 全排列和对换 排列及其逆序数 对换 n阶行列式的定义 行列式的性质 二阶与三阶行列式 二元线性方程组与二阶行列式 若是采用消元法解x1、x2的话则得到以下式子 有二阶行列式的规律可得:分…

京东零售数据可视化平台产品实践与思考

导读 本次分享题目为京东零售数据可视化平台产品实践与思考。 主要包括以下四个部分: 1. 平台产品能力介绍 2. 业务赋能案例分享 3. 平台建设挑战与展望 作者:梁臣 京东 数据产品架构师 01平台产品能力介绍 1. 产品矩阵 数据可视化产品是一种利用…

对外发PDF设置打开次数

在线 Host PDF 文件并对链接进行限制——保障文件安全的最佳解决方案 在数字化办公和远程协作日益普及的今天,如何安全高效地分享 PDF 文件成为许多用户关注的重点。MaiPDF 作为一款功能强大的在线工具,不仅支持在线 host PDF 文件,还提供多…

在国产电脑上运行PDFSAM软件使用pdf分割合并交替混合处理pdf文档

软件下载地址: https://sourceforge.net/projects/pdfsam/files/ 需要注意事项,系统需要java环境,确认系统有java环境,根据软件版本需求安装对应的java运行环境。 下载pdfsam-4.3.4-linux.tar.gz安装包,解压,将runt…

leetcode-42.接雨水-day19

思路:将一整个区域分成若干个小区域看,高低起伏 1.记录每个板子上的雨水数量,最后相加求和。h板高 2.-->由于每个板子区间能装多少水取决于他的最大前缀板高和最大后缀板高, 3. 然后根据短板效应,则每个板子区间最多…

Postman接口测试02|接口用例设计

目录 六、接口用例设计 1、接口测试的测试点(测试维度) 1️⃣功能测试 2️⃣性能测试 3️⃣安全测试 2、设计方法与思路 3、单接口测试用例 4、业务场景测试用例 1️⃣分析测试点 2️⃣添加员工 3️⃣查询员工、修改员工 4️⃣删除员工、查询…

自定义kali:增加60+常用渗透工具,哥斯拉特战版,cs魔改应有尽有,菜单栏启动

前言: 集合了六十多个工具,有师傅说需要,特搞来,我是脚本小子我爱用 介绍: 主要在菜单增加了非常多别人现成的工具,工具名单: 信息收集: 密探渗透测试工具 水泽 ehole 灯塔 …

数据结构(Java)——链表

1.概念及结构 链表是一种 物理存储结构上非连续 存储结构,数据元素的 逻辑顺序 是通过链表中的 引用链接 次序实现的 。 2.分类 链表的结构非常多样,以下情况组合起来就有 8 种链表结构: (1)单向或者双向 (…

Linux 文件的特殊权限—Sticky Bit(SBIT)权限

本文为Ubuntu Linux操作系统- 第十九期~~ 其他特殊权限: 【SUID 权限】和【SGID 权限】 更多Linux 相关内容请点击👉【Linux专栏】~ 主页:【练小杰的CSDN】 文章目录 Sticky(SBIT)权限基本概念Sticky Bit 的表示方式举例 设置和取…

PPT画图——如何设置导致图片为600dpi

winr,输入regedit打开注册表 按路径找,HKEY_CURRENT_USER\Software\Microsoft\Office\XX.0\PowerPoint\Options(xx为版本号,16.0 or 15.0或则其他)。名称命名:ExportBitmapResolution 保存即可,…

小米汽车加速出海,官网建设引领海外市场布局!

面对国内市场的饱和态势,中国企业出海步伐纷纷加速,小米也是其中的一员。Canalys数据显示,2024年第三季度,小米以13.8%的市场份额占比,实现了连续17个季度位居全球前三的成绩。 据“36 氪汽车”报道,小米汽…

Cocos Creator 试玩广告开发 第二弹

上一篇的项目是2d的,现在谈谈对于3d试玩项目的一些经历。 相对于2d来说,3d的项目更接近于Unity的开发,但是也有很多不一样的地方,具体的也可以参考Cocos给他官方示例。 Unity 开发者入门 Cocos Creator 快速指南 | Cocos Creator…

CTFshow—爆破

Web21 直接访问页面的话会弹窗需要输入密码验证,抓个包看看,发现是Authorization认证,Authorization请求头用于验证是否有从服务器访问所需数据的权限。 把Authorization后面的数据进行base64解码,就是我们刚刚输入的账号密码。 …

docker-开源nocodb,使用已有数据库

使用已有数据库 创建本地数据库 数据库:nocodb 用户:nocodb 密码:xxxxxx修改docker-compose.yml 默认网关的 IP 地址是 172.17.0.1(适用于 bridge 网络模式)version: "2.1" services:nocodb:environment:…

UGUI简单动画制作

一、最终效果 UI简单动画制作 二、制作过程 1、打开动画制作窗口 2、新建一个动画 3、给一个对象制作动画 4、创建动画控制器进行不同动画变换控制 5、书写脚本,通过按钮来进行不同动画切换 using System.Collections; using System.Collections.Generic; using U…