详细讲解网络协议:TCP和UDP什么区别?

news2025/7/10 12:14:41

该文章是学习了 B 站 up 主的视频做的总结,讲的很通俗易懂,首先感谢博主的分享。视频地址:https://www.bilibili.com/video/BV1kV411j7hA/?spm_id_from=333.337.search-card.all.click&vd_source=0a3d4c746a63d737330e738fa043eaf6

重新认知了一下 TCP 和 UDP 的原理以及区别,做一个简单的总结。

一、作用

首先:tcp 和 udp 都是工作再传输层,用于程序之间传输数据的。数据一般包含:文件类型,视频类型,jpg 图片等。

img

二、区别

  • TCP 是基于连接的,而 UDP 是基于非连接的。

  • tcp 传输数据稳定可靠,适用于对网络通讯质量要求较高的场景,需要准确无误的传输给对方。比如,传输文件,发送邮件,浏览网页等等

  • udp 的优点是速度快,但是可能产生丢包,所以适用于对实时性要求较高但是对少量丢包并没有太大要求的场景。比如:域名查询,语音通话,视屏直播等。udp 还有一个非常重要的应用场景就是隧道网络,比如:vpn,VXLAN.

举个例子 ------ 以人与人之间的通信为例:

  • UDP 协议就相当于是写信给对方,寄出去信件之后不能知道对方是否收到信件,信件内容是否完整,也不能得到及时反馈。
  • TCP 协议就像是打电话通信,在这一系列流程都能得到及时反馈,并能确保对方及时接收到。如下图:

img

三、TCP 通信的过程:

TCP 是如何保证以上过程的? 分为三个步骤,三次握手,传输确认,四次挥手。三次握手是建立连接的过程。

四、三次握手:

当客户端向服务端发起连接时,会先发一包连接请求数据,过去询问一下,能否与你建立连接?这包数据称之为 SYN 包,如果对端同意连接,则回复一包 SYN+ACK 包,客户端收到之后,发送一包 ACK 包,连接建立,因为这个过程中互相发送了三包数据,所以称之为三次握手。

img

为什么要三次握手而不是两次握手?

这是为了防止,因为已失效的请求报文,突然又传到服务器,引起错误,这是什么意思?
假设采用两次握手建立连接,客户端向服务端发送一个 syn 包请求建立连接,因为某些未知的原因,并没有到达服务器,在中间某个网络节点产生了滞留,为了建立连接,客户端会重发 syn 包,这次的数据包正常送达,服务端发送 syn+ack 之后就建立起了连接,但是第一包数据阻塞的网络突然恢复,第一包 syn 包又送达到服务端,这是服务端会认为客户端又发起了一个新的连接,从而在两次握手之后进入等待数据状态,服务端认为是两个连接,而客户端认为是一个连接,造成了状态不一致,如果在三次握手的情况下,服务端收不到最后的 ack 包,自然不会认为连接建立成功,所以三次握手本质上来说就是为了解决网络信道不可靠的问题,为了在不可靠的信道上建立起可靠的连接,经过三次握手之后,客户端和服务端都进入了数据传输状态。

五、数据传输:

数据传输:

一包数据可能会被拆成多包发送, 如何处理丢包问题,这些数据包到达的先后顺序不同,如何处理乱序问题?针对这些问题,tcp 协议为每一个连接建立了发送缓冲区,从建立链接后的第一个字节的序列号为 0,后面每个字节的序列号就会增加 1,发送数据时,从数据缓冲区取一部分数据组成发送报文,在 tcp 协议头中会附带序列号和长度,接收端在收到数据后需要回复确认报文,确认报文中的ack 等于接受序列号加长度,也就是下包数据发送的起始序列号,这样一问一答的发送方式,能够使发送端确认发送的数据已经被对方收到,发送端也可以发送一次的连续的多包数据,接受端只需要回复一次 ack 就可以了如图:

img

六、四次挥手:

img

处于连接状态的客户端和服务端,都可以发起关闭连接请求,此时需要四次挥手来进行连接关闭,假设客户端主动发起连接关闭请求,他给服务端发起一包 FIN 包,标识要关闭连接,自己进入终止等待 1 状态,服务端收到 FIN 包发送一包 ACK 包,标识自己进入了关闭等待状态,客户端进入终止等待 2 状态。这是第二次挥手,服务端此时还可以发送未发送的数据,而客户端还可以接受数据,待服务端发送完数据之后,发送一包 FIN 包,最后进入确认状态,这是第 3 次挥手,客户端收到之后回复 ACK 包,进入超时等待状态,经过超时时间后关闭连接,而服务端收到 ACK 包后,立即关闭连接,这是第四次挥手。

为什么客户端要等待超时时间这是为了保证对方已经收到 ACK 包。因为假设客户端发送完最后一包 ACK 包后释放了连接,一旦 ACK 包在网络中丢失,服务端将一直停留在 最后确认状态,如果等待一段时间,这时服务端会因为没有收到 ack 包重发 FIN 包,客户端会响应 这个 FIN 包进行重发 ack 包,并刷新超时时间,这个机制跟第三次握手一样。也是为了保证在不可靠的网络链路中进行可靠的连接断开确认

七、UDP 协议:

udp: 首先 udp 协议是非连接的,发送数据就是把简单的数据包封装一下,然后从网卡发出去就可以了,数据包之间并没有状态上的联系,正因为 udp 这种简单的处理方式,导致他的性能损耗非常少,对于 cpu, 内存资源的占用也远小于 tcp, 但是对于网络传输过程中产生的丢包,udp 并不能保证,所以 udp 在 传输稳定性上要弱于 tcp

所以,tcp 和 udp 的主要区别:

tcp 传输数据稳定可靠,适用于对网络通讯质量要求较高的场景,需要准确无误的传输给对方,比如,传输文件,发送邮件,浏览网页等等,

udp 的优点是速度快,但是可能产生丢包,所以适用于对实时性要求较高但是对少量丢包并没有太大要求的场景。比如:域名查询,语音通话,视屏直播等。udp 还有一个非常重要的应用场景就是隧道网络,比如:vpn,VXLAN.

img

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

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

相关文章

【HDU No. 3567】八数码 II Eight II

【HDU No. 3567】八数码 II Eight II 杭电OJ 题目地址 【题意】 八数码,也叫作“九宫格”,来自一个古老的游戏。在这个游戏中,你将得到一个33的棋盘和8个方块。方块的编号为1~8,其中一块方块丢失,称之为“…

【python】基础复习

注:最后有面试挑战,看看自己掌握了吗 文章目录python的应用基础语法编码标识符python保留字第一个注释多行语句数字(Number)类型字符串(String)print 默认输出是换行的,如果要实现不换行需要在变量末尾加上 end"":impor…

猿创征文|在校大学生学习UI设计必备工具及日常生活中使用的软件

嗨,大家好,我是异星球的小怪同志 一个想法有点乱七八糟的小怪 如果觉得对你有帮助,请支持一波。 希望未来可以一起学习交流。 我是一名在校大二的学生,目前在学习关于UI设计方向的一些课程,平时会用到UI设计必备的工…

我终于读懂了适配器模式。。。

文章目录🗾🌆什么是适配器模式?🏯类适配器模式🏰对象适配器模式⛺️接口适配器模式🏭适配器模式在SpringMVC 框架应用的源码剖析🗼适配器模式的注意事项和细节🌆什么是适配器模式&am…

基于SDN环境下的DDoS异常攻击的检测与缓解--实验

基于SDN环境下的DDoS异常攻击的检测与缓解--实验基于SDN环境下的DDoS异常攻击的检测与缓解--实验1.安装floodlight2.安装sFlow-RT流量监控设备3.命令行安装curl工具4.构建拓扑5.DDoS 攻击检测6.DDoS 攻击防御7.总结申明: 未经许可,禁止以任何形式转载&am…

PNG怎么转换成PDF?这篇文章教会你

有时候我们需要查找一些图片资料并将它打印出来,但是在网上的图片大多是以PNG格式存在的,这个时候,我们就需要先利用一些转换软件把PNG转换成PDF文件的格式,从而方便我们进行打印。那么你们知道PNG转PDF怎么转换吗?今天…

第四章:前缀和、差分(数列)

前缀和差分一、前缀和1、 什么是前缀和2、 前缀和的作用3、 前缀和的例题和模板(1)一维数组的前缀和C版C版(2)二维数组的前缀和a.思路:b.题目和模板:C版C版二、差分1、什么是差分?2、差分有什么…

FFplay文档解读-43-视频过滤器十八

29.170 telecine 将电视电影处理应用于视频。 此过滤器接受以下选项: first_field选项解释top, ttop field firstbottom, b底部字段优先默认值为top pattern一串数字,表示希望应用的下拉模式。 默认值为23。 Some typical patterns:NTSC output (30i…

传统纸业如何实现数字化,S2B2C系统网站赋能渠道提升供应链管理效率

一千多年前,我们老祖宗发明了造纸术,纸张成为方便、廉价的信息载体,由此影响了中国乃至世界文明的进程。如今,随着信息技术的普及,纸张作为信息载体的功能日益弱化,但作为一种环保材料将会更广泛地融入我们…

通过宠物商店理解java面向对象

前言:本篇博客,适合刚刚学完java基础语法的但是,对于面向对象,理解不够深刻的读者,本文通过经典的宠物商店,来让读者深刻的理解,面向对象,IS-A,HAS-A法则。本文不仅仅是简…

Spring更简单保存和获取bean对象的方法(注解)

Spring更简单保存和获取bean对象的方法前置准备将bean对象更为简单地保存到Spring容器中(使用注解)【使用类注解】 (是写在类前的)为什么要这么多类注解?类注解之间的关系使用类注解 Bean 命名规则使用方法注解(Bean)不…

[MySQL]数据库的约束与表的设计

专栏简介 :MySql数据库从入门到进阶. 题目来源:leetcode,牛客,剑指offer. 创作目标:记录学习MySql学习历程 希望在提升自己的同时,帮助他人,,与大家一起共同进步,互相成长. 学历代表过去,能力代表现在,学习能力代表未来! 文章目录 1.数据库约束 1.1 约束类型 1.2 null 约束 1.…

Redis面试题

目录 面试题:谈谈你对Redis的理解? 面试题:Redis的基本数据类型 Redis的基本数据类型以及它们的应用场景: 面试题:redis内存淘汰机制 面试题:Redis持久化机制 RDB AOF 面试题:Redis写时复…

相似度系列-3:传统方法ROUGE ROUGE: A Package for Automatic Evaluation of Summaries

文章目录ROUGE: A Package for Automatic Evaluation of Summariesintroduction基础模型Rouge-NRouge_NmultiROUGE-L: Longest Common Subs equence1**Sentence-level LCS**2**Summary-Level LCS**ROUGE-W: Weighted Longest Common SubsequenceROUGE-S: Skip-Bigram Co-Occurr…

Python小总结

Python小总结一、open(一)open的定义:open是Python的内置函数,一般用于本地文件的读写操作。(二)open例子:二、with open(一)用途:with open是Python用来打开…

04 数学软件与建模---最优化模型

一、优化模型的数学描述 二、优化模型的分类 1.根据是否存在约束条件 有约束问题和无约束问题。 2.根据设计变量的性质 静态问题和动态问题。 3.根据目标函数和约束条件表达式的性质 线性规划,非线性规划,二…

PiL测试实战(上)| 模型生成代码的单元级PiL测试

前言 对于嵌入式代码,为了测试软件能否在目标芯片上实现预期的功能,通常需要进行PiL测试(Processor-in-the-Loop-Testing)。 目前市面上较为常见的嵌入式软件调试工具有PLS UDE和LAUTERBACH Trace32等。UDE和Trace32可以很好的完…

通俗易懂话GC-C#的内存管理

昨天和一个朋友聊到图像处理软件内存占用多的问题,然后很自然聊到了GC,回想起以往很初学者都问到类似的问题: 1、C#自己就会垃圾回收,为什么我还要关心垃圾回收? 2、GC可以回收垃圾,但回收的时候又会让线…

js深浅拷贝:保证赋值后改变第二个变量的值,不影响第一个变量的值

对于基本数据来说,将一个变量赋值给另一个变量,第二个变量值改变了,不会影响第一个变量;但对于复杂类型中的对象来讲,将一个对象赋值给另外一个对象,其实是将放对象内容的地址赋值给了第二个对象&#xff0…

Amazon EKS绑定alb 使用aws-load-balancer-controller(Ingress Controller)对外提供服务

1、创建AWS Load Balancer Controller 的 IAM 策略 亚马逊相关文档 下载地址 打开 策略 点击 创建策略 打开 IAM_Policy.json 复制内容粘贴到 json 点击下一步:标签 然后一直下一步 在下图中名称填写 AWSLoadBalancerControllerIAMPolicy 你也可以自定义名称。然后创建策略。…