网络面试-0x12 UDP和TCP的区别以及应用场景

news/2024/11/16 17:21:33/

一、 UDP (user datagram protocol)用户数据报协议

①: 一种简单的面向数据报的通讯协议,即:应用层传下来的报文,不合并,不拆分,只是在其上面加上首部后就交给了下面的网络层。无论应用层交给UDP多长的报文,它统统发送,一次发送一个报文。
②: 接收方,接到后直接去除首部,交给上面的应用层就完成任务
③:UDP报头包含4个字段,每个字段占用2个字节,标题段,开销小

alt

特点: 1)UDP不提供复杂的控制机制,利用IP提供面向无连接的通讯服务 —— 连接
2)传输途中出现丢包, UDP也不负责重发 —— 丢包不处理
3)当报的到达顺序出现乱序时,UDP没有纠正的能力 —— 无纠正能力
4)接收方接收到数据的那一刻,立即按照原样发送到网络上的一种机制。即使是出现网络拥堵的情况,UDP 也无法进行流量控制等避免网络拥塞的行为。 —— 网络拥塞无法处理

二、 TCP (Transmissioin Control Protocl)传输控制协议

①:一种可靠、面向字节流的通讯协议,把上面应用层交下来的数据看成无结构的字节流来发送。
②:可以想象成为流水形式,发送方TCP 会将数据放入“蓄水池”(缓存区),等到可以发送的时候发送,不能发送就等着。
③:TCP会根据网络的拥塞状态来确定每个报文段的大小。
④:报文首部有20个字节,额外开销大。

alt

特点: 1)TCP充分地实现了数据传输时各种控制功能,可以进行丢包时重发控制,还可以对次序乱掉的分包进行顺序控制,而这些在UDP中都没有 —— 丢包处理、纠正处理
2)TCP是面向连接的协议,只有确认通讯对端存在时才会发送数据,从而可以控制通信流量的浪费 —— 可避免拥塞的控制
3)根据TCP这些机制,IPO这种无连接的网络上也能够实现高可靠性的通讯(主要通过:校验和、序列号、确认应答、重发控制、连接管理以及窗口控制等机制实现)—— 基于无连接的IP进行高可靠的协议的需要处理的

三 、区别

类型TCPUDP
是否面向连接
是否可靠性
传输形式字节流数据报文段
传输效率
所需要资源
双工性全双工1对1、 1对多、多对一、多对多
流量控制滑动窗口
控制拥塞慢启动、拥塞避免、快重传、快恢复
首部字节20~ 608个字节
应用场景文件传输、邮件传输即使通讯、域名转换
  1. 连接:TCP面向连接,3次握手,4次挥手; UDP是面向无连接,数据传输前后不连接,发送端只负责将数据发送到网络,接收端从消息队列读取。
  2. 可靠:TCP 提供可靠的服务,传输过程采用流量控制、编号、确认、计时器等手段确保数据误差错、不丢失。 UDP则尽可能传递数据,但并不保证传递给付给对方
  3. 传输数据:TCP面向字节流,将应用层报文看成一串无结构的字节流,分解为多个TCP报文段传输后,在目的站重新装配; UDP协议面向报文,不拆分应用层报文,只保留报文边界,一次发送一个报文了,接受方去除报文首部,原封不动将报文交给上层应用。
  4. 双工:TCP只能够点对点双攻通信,UDP支持1-1/1-n/n-1/n-n的交互通信。

四、应用场景

alt

TCP 使用对效率要求低,对准确性要求高或要求也有链接的场景
UDP 对效率要求高,对准确性要求低的场景

本文由 mdnice 多平台发布


http://www.ppmy.cn/news/19.html

相关文章

b站黑马JavaScript的Ajax案例代码——聊天机器人案例

目录 目标效果: 更换的新接口: 1.机器人智能回复接口:http://www.liulongbin.top:3006/api/robot 2.机器人语音接口:http://www.liulongbin.top:3006/api/synthesize 重点原理: 1.jQuery中trim方法 2.jquery中a…

React.useCallback(function,array)使用,React中的函数组件和类组件的取值(快照or最新值)

目录 React.useCallback(function,array) React.memo 示例1 示例2 React中的函数组件和类组件的取值(快照or最新值) 闭包例子 修改React例子 React.useCallback(function,array) 返回一个函数,只有在array中的依赖项变化的时候才会更…

html实现ezuikit.js萤石云直播监控,ezuikit.js实时监控实现,萤石云实时监控简单实现

效果图 实现 下面的播放url获取:登录萤石云->控制台->我的资源->设备列表->列表中:查看通道->监控地址 appKey和appSecret获取:登录萤石云->控制台->我的账号->应用信息->右侧:应用密钥 下载ezuikit…

外卖项目(项目优化3)12---前后端分离开发

目录 问题描述:184 一、前后端分离开发 185 1.1介绍 185 1.2开发流程 1.3前端技术栈 二、YAPI 186 2.1介绍 2.2使用方式 三、Swagger 187 3.1介绍 3.2使用方式(步骤) 3.3Swagger---常用注解 188 四、项目部署 189 4.1部署架构…

美团面试应届生第二问:Volatile有什么作用?

文章目录volatile有什么作用?可见性证明指令重排证明不能保证原子性证明Volatile与Synchronized的区别volatile有什么作用? 保证线程的可见性禁止指令重排但是不能保证原子性 可见性证明 有如下静态成员变量num,初始值为0;有两…

38、Java——汽车租赁系统(JDBC+MySQL+Apache DBUtils)

​ ✅作者简介:热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:乐趣国学的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏:Java案例…

Python 面向对象简介

什么是面向对象? 面向对象是一种编程思想,在开发过程中关注的不是解决问题的步骤和过程,而是参与解决问题的对象和它们具备的行为。 01 面向过程和面向对象的区别 1、面向过程 面向过程在开发过程中关注的是解决问题的步骤和过程&#xf…

只会 Python 不行,不会 Python 万万不行

当下的环境大家有目共睹,未来一段时间情况如何,想必不少人心里也清楚,技术人走到中年,难免会焦虑,职场上干得不爽,但是跳槽也不容易,加上不少企业裁员,换个满意的工作更是难上加难。…