当前位置: 首页 > news >正文

【网络协议】聊聊UDP协议

前面的几篇文章讲述了链路层和IP层,主要的话其实就是MAC地址,以及通过IP地址求MAC地址的ARP协议。PING的底层协议 ICMP
。动态分配IP协议 DHCP等。而从今天开始我们开始讲述传输层协议,传输层主要就是UDP和TCP。

TCP 和 UDP 有哪些区别?

面试中常问到的其实就是TCP和UDP的区别,首先一个特别明显的区别就是TCP是面向连接的,UDP是无连接的
连接其实就是在客户端和服务端之间维护连接,通过建立一定的数据结构来维护双方交互的状态,用这样的数据结构来保证所谓的面向连接的特性。

第二点:TCP提供可靠交付,IP层其实没有保证数据的可靠性,TCP传输层保证来传输的数据,无差错、不丢失、不重复,并且按序到达。而UDP不保证可靠传输。并且不按顺序到达。

第三点:TCP是面向字节流,发送的是一个一个的流,UDP是一个一个的数据报。

第三点:TCP具备拥塞控制,也就是会根据丢包以及网络稳定情况进行调整自己发送数据的快慢。UDP其实不管三七二十一,只管发送。

第四点:TCP是一个有状态服务。会明确记录包又没有到达,UDP是无状态的服务。

在这里插入图片描述

UDP 包头是什么样的?

当目标机器收到包后,会不断取下MAC头,IP头。在IP头中标识的是UDP和TCP。就可以从中开始解析数据,但是处理完UDP数据之后,应该把数据交给谁处理,内核的事情处理完毕之后,应该交给应用程序,每个应用程序都有自己的端口,正是通过目的端口号进行区分的。
所以UDP的格式是源端口号,目的端口号,剩下就是UDP长度以及UDP校验和。
在这里插入图片描述

UDP 的三大特点

沟通简单,默认认为网络世界是美好的,不容易丢弃。
可以互相传输数据,可以发送给其他人,也可以收到其他人发送的数据。
不具备网络情况进行灵活处理。

UDP 的三大使用场景

虽然UDP不保证数据的可靠传输,但是针对一些场景来说,其实也非常适合使用UDP进行传输数据。

1.网络情况比较稳定的情况 或者对于丢包场景不敏感的应用。而DHCP其实基于UDP协议的。获取IP协议是内网请求,所以针对这种场景比较适合。
2.不需要建立连接,就可以广播的应用。可以承载广播或者多播的协议,DHCP就是一种广播的形式。
3.处理速度快,时延低,可以容忍少数丢包,,因为不需要关心数据是否丢失等情况,所以不处理复杂的应用场景。

UDP使用场景案例

网页或者 APP 的访问

原来网页和APP是基于HTTP的,HTTP基于TCP,建立连接比较耗费资源,所以提出来QUIC (quick udp internet connections)快速UDP互联网连接。目的是降低网络通信的延迟,提供更好的用户互动体验。

流媒体的协议

直播视频中其实最重要的就是实时性,可以间断的丢包,选择性的丢帧。所以很多直播应用,都采用的是UDP实现自己的视频传输协议。

实时游戏

游戏场景其实也是实时性比较高,游戏对实时要求较为严格的情况下,采用自定义的可靠 UDP 协议,自定义重传策略,能够把丢包产生的延迟降到最低,尽量减少网络问题对游戏性造成的影响。

IoT 物联网

移动通信领域

小结

本篇主要简单介绍了TCP和UDP的区别,在于TCP为保证数据的可靠传输有自己的一套机制,而UDP不是基于连接的,所以对于实时性场景一般都是采用UDP进行使用。

相关文章:

  • 从InnoDB索引的数据结构,去理解索引
  • 调试记录 单片机GD32F103C8T6(兆易创新) 程序烧写完成但是没有现象 (自己做的板子)
  • Netty优化-rpc
  • idea 提升效率的常用快捷键 汇总
  • Kafka KRaft模式探索
  • 帆软report JS实现填报控件只能填写一次
  • mac电脑怎么永久性彻底删除文件?
  • 二十三种设计模式全面解析-抽象工厂模式:创造无限可能的工厂之道
  • 首次cmake 多目录构建失败
  • 图像无损放大画质修复工具 Topaz Photo AI「Mac」
  • 基于闪电搜索算法的无人机航迹规划-附代码
  • 设计模式之适配器模式
  • 【开源框架】Glide的图片加载流程
  • Spring Kafka生产者实现
  • React-快速搭建开发环境
  • co.js - 让异步代码同步化
  • ECS应用管理最佳实践
  • Mocha测试初探
  • MySQL几个简单SQL的优化
  • Netty+SpringBoot+FastDFS+Html5实现聊天App(六)
  • Node.js 新计划:使用 V8 snapshot 将启动速度提升 8 倍
  • Python爬虫--- 1.3 BS4库的解析器
  • WinRAR存在严重的安全漏洞影响5亿用户
  • 关于Java中分层中遇到的一些问题
  • 基于Android乐音识别(2)
  • 记一次用 NodeJs 实现模拟登录的思路
  • 检测对象或数组
  • 一道面试题引发的“血案”
  • 原生js练习题---第五课
  • const的用法,特别是用在函数前面与后面的区别
  • LevelDB 入门 —— 全面了解 LevelDB 的功能特性
  • Prometheus VS InfluxDB
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • 关于Kubernetes Dashboard漏洞CVE-2018-18264的修复公告
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • #HarmonyOS:Web组件的使用
  • #LLM入门|Prompt#1.7_文本拓展_Expanding
  • #vue3 实现前端下载excel文件模板功能
  • #我与Java虚拟机的故事#连载13:有这本书就够了
  • (007)XHTML文档之标题——h1~h6
  • (1)(1.9) MSP (version 4.2)
  • (16)UiBot:智能化软件机器人(以头歌抓取课程数据为例)
  • (20)目标检测算法之YOLOv5计算预选框、详解anchor计算
  • (3)nginx 配置(nginx.conf)
  • (4)(4.6) Triducer
  • (4)STL算法之比较
  • (java版)排序算法----【冒泡,选择,插入,希尔,快速排序,归并排序,基数排序】超详细~~
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (十二)devops持续集成开发——jenkins的全局工具配置之sonar qube环境安装及配置
  • (四)搭建容器云管理平台笔记—安装ETCD(不使用证书)
  • (一) springboot详细介绍
  • .NET HttpWebRequest、WebClient、HttpClient
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)...
  • .NetCore Flurl.Http 升级到4.0后 https 无法建立SSL连接
  • .net经典笔试题