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

引言

在计算机网络的世界中,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.mzph.cn/web/64285.shtml

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

相关文章

代码思想之快慢路径

处理业务代码的过程中,对业务代码有了一些调整,后续发现这是一种代码思想 在一段复杂的逻辑里,我把查询redis操作写在了前面, 业务逻辑: 如果需要不打压就退出本次处理 查询redis拿到商品需要打压的次数 如果次数 …

纯 HTML+CSS+JS 实现一个炫酷的圣诞树动画特效

纯 HTMLCSSJS 实现一个炫酷的圣诞树动画特效 前言 圣诞节快到了,今天给大家带来一个简单但是效果不错的圣诞树动画特效。这个特效完全使用原生 HTML、CSS 和 JavaScript 实现,包含闪烁的星星、随机彩灯等元素,非常适合节日气氛!…

【RAG实战】语言模型基础

语言模型赋予了计算机理解和生成人类语言的能力。它结合了统计学原理和深度神经网络技术,通过对大量的样本数据进行复杂的概率分布分析来学习语言结构的内在模式和相关性。具体地,语言模型可根据上下文中已出现的词序列,使用概率推断来预测接…

富芮坤FR800X系列之PWM输出程序应用设计

文章目录 前言1.设计背景2.简介3.如何设计控制调光的接口呢4.硬件设计5.软件设计5.1.软件流程图5.2.软件代码 6.小结 前言 版权归作者所有、未经允许、请勿转载。 读者对象: 本文档主要适用以下工程师: 嵌入式系统工程师 单片机软件工程师 IOT固…

Ftrans数据摆渡系统 搭建安全便捷跨网文件传输通道

一、专业数据摆渡系统对企业的意义 专业的数据摆渡系统对企业具有重要意义,主要体现在以下几个方面‌: 1、‌数据安全性‌:数据摆渡系统通过加密传输、访问控制和审计日志等功能,确保数据在传输和存储过程中的安全性。 2、‌高…

EasyPoi 使用$fe:模板语法生成Word动态行

1 Maven 依赖 <dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-spring-boot-starter</artifactId><version>4.0.0</version> </dependency> 2 application.yml spring:main:allow-bean-definition-over…

python 渗透开发工具之SQLMapApi Server不同IP服务启动方式处理 解决方案SqlMapApiServer外网不能访问的情况

目录 说在前面 什么是 SQLMapAPI 说明 sqlmapApi能干什么 sqlmapApi 服务安装相关 kali-sqlmap存放位置 正常启动sqlmap-api server SqlMapApi-Server 解决外网不能访问情况 说在前面 什么是sqlmap 这个在前面已经说过了&#xff0c;如果这个不知道&#xff0c;就可以…

使用 Webpack 优雅的构建微前端应用❕

Module Federation 通常译作“模块联邦”&#xff0c;是 Webpack 5 新引入的一种远程模块动态加载、运行技术。MF 允许我们将原本单个巨大应用按我们理想的方式拆分成多个体积更小、职责更内聚的小应用形式&#xff0c;理想情况下各个应用能够实现独立部署、独立开发(不同应用甚…

Boost之log日志使用

不讲理论&#xff0c;直接上在程序中可用代码&#xff1a; 一、引入Boost模块 开发环境&#xff1a;Visual Studio 2017 Boost库版本&#xff1a;1.68.0 安装方式&#xff1a;Nuget 安装命令&#xff1a; #只安装下面几个即可 Install-package boost -version 1.68.0 Install…

【Python】使用匿名函数Lambda解析html源码的任意元素(Seleinium ,BeautifulSoup皆适用)

一直都发现lambda函数非常好用&#xff0c;它可以用简洁的方式编写小函数&#xff0c;无需写冗长的过程就可以获取结果。干脆利落&#xff01; 它允许我们定义一个匿名函数&#xff0c;在调用一次性的函数时非常有用。 最近整理了一些&#xff0c;lambda函数结合BeautifulSou…

互联网路由架构

大家觉得有意义和帮助记得及时关注和点赞!!! 本书致力于解决实际问题&#xff0c;书中包含大量的架构图、拓扑图和真实场景示例&#xff0c;内容全面 且易于上手&#xff0c;是不可多得的良心之作。本书目的是使读者成为将自有网络集成到全球互联网 领域的专家。 以下是笔记内…

【Flutter_Web】Flutter编译Web第三篇(网络请求篇):dio如何改造方法,变成web之后数据如何处理

前言 Flutter端在处理网络请求的时候&#xff0c;最常用的库当然是Dio了&#xff0c;那么在改造成web端的时候&#xff0c;最先处理的必然是网络请求&#xff0c;否则没有数据去处理驱动实图渲染。 官方链接 pub https://pub.dev/packages/diogithub https://github.com/c…

项目上传到gitcode

首先需要在个人设置里面找到令牌 记住自己的账号和访问令牌&#xff08;一长串&#xff09;&#xff0c;后面git要输入这个&#xff0c; 账号是下面这个 来到自己的仓库 #查看远程仓库&#xff0c;是不是自己的云仓库 git remote -v # 创建新分支 git checkout -b llf # 三步…

【Git学习】windows系统下git init后没有看到生成的.git文件夹

[问题] git init 命令后看不到.git文件夹 [原因] 文件夹设置隐藏 [解决办法] Win11 win10

vscode添加全局宏定义

利用vscode编辑代码时&#xff0c;设置了禁用非活动区域着色后&#xff0c;在一些编译脚本中配置的宏又识别不了 遇到#ifdef包住的代码就会变暗色&#xff0c;想查看代码不是很方便。如下图&#xff1a; 一 解决&#xff1a; 在vscode中添加全局宏定义。 二 步骤&#xff1a…

数字后端培训项目Floorplan常见问题系列专题续集1

今天继续给大家分享下数字IC后端设计实现floorplan阶段常见问题系列专题。这些问题都是来自于咱们社区IC后端训练营学员提问的问题库。目前这部分问题库已经积累了4年了&#xff0c;后面会陆续分享这方面的问题。 希望对大家的数字后端学习和工作有所帮助。 数字后端项目Floor…

【递归,搜索与回溯算法 综合练习】深入理解暴搜决策树:递归,搜索与回溯算法综合小专题(二)

优美的排列 题目解析 算法原理 解法 &#xff1a;暴搜 决策树 红色剪枝&#xff1a;用于剪去该节点的值在对应分支中&#xff0c;已经被使用的情况&#xff0c;可以定义一个 check[ ] 紫色剪枝&#xff1a;perm[i] 不能够被 i 整除&#xff0c;i 不能够被 per…

视频会议是如何实现屏幕标注功能的?

现在主流的视频会议软件都有屏幕标注功能&#xff0c;屏幕标注功能给屏幕分享者讲解分享内容时提供了极大的方便。那我们以傲瑞视频会议&#xff08;OrayMeeting&#xff09;为例&#xff0c;来讲解屏幕标注是如何实现的。 傲瑞会议的PC端&#xff08;Windows、信创Linux、银河…

改进爬山算法之四:概率爬山法(Probabilistic Hill Climbing,PHC)

概率爬山法(Probabilistic Hill Climbing,PHC)是一种局部搜索算法,它结合了随机性和贪婪搜索的特点,是对爬山算法(Hill Climbing Algorithm)的一种变体或扩展。与传统的爬山法不同,PHC不是总是选择最优的邻居作为下一步的移动,而是以一定的概率选择最优邻居,同时以一…

Unity中实现人物残影效果

今天火柴人联盟3公测了&#xff0c;看到一个残影的效果&#xff0c;很有意思&#xff0c;上网查询了一下实现方式&#xff0c; 实现思路&#xff1a; 将角色的网格复制出来&#xff0c;然后放置到新建的物体的MeshFilter组件上&#xff0c;每隔几十毫秒在玩家的位置生成一个&a…