简简单单的UDP

前言

上一篇了解了TCP的三次握手过程,目的、以及如何保证可靠性、序列号与ACK的作用,最后离开的时候四次挥手的内容,这还只是TCP内容中的冰山一角,是不是觉得TCP这个协议非常复杂,这一篇我们来了解下传输层另外一个协议UDP。

 「模拟器、工具合集」复制整段内容
链接:https://docs.qq.com/sheet/DV0xxTmFDRFVoY1dQ?tab=7ulgil

UDP数据报

UDP相对TCP来说是一个非常简单的协议,它的特点正好跟TCP相反,TCP提供面向连接的提供可靠性服务,而UDP则是无连接、可靠性没有保证。单独讲解UDP其实没多少内容,我们从另外一个角度来了解了解UDP。

(1)对比TCP,UDP有什么区别呢
  • 先来看看UDP的头部

图片

  • 源目端口号:用于表示当时双方通信使用的端口号

  • UDP长度:包含整个UDP的头部加数据。

  • 校验和:校验UDP数据报在传输中是否有错误。

看起来是不是特别简单,没有多余的可选字段、控制字段,也体现了无连接、无可靠性保证的特性,没有对应的字段来提供这样的功能。

  • TCP与UDP协议的主要区别比较

(1)连接

  • TCP面向连接,传输数据的时候需要先建立连接

  • UDP不需要连接,应用层下发数据就传输。

(2)可靠性

  • TCP可以通过三次握手和重传机制保证数据的可靠性,保证数据无差错、不丢失、不重复、按顺到达

  • UDP尽最大努力传输,不提供可靠性功能

(3)服务对象

  • TCP是一对一的两点服务,每一个客户端与服务器都是一个独立的连接通道。

  • UDP没有连接,所以支持一对一、一对多、多对多的交互。

(4)开销

  • TCP头部跟IP头部一样,默认20个字节,如果有可选项则会更大。

  • UDP头部固定只有8个字节,开销小。

(5)有序性

  • TCP可以通过三次握手随机生成的序列号来保证消息包的顺序。

  • UDP没有该功能

(6)分片

  • TCP数据大小如果大于协商的MSS大小,会在传输层进行分片,接收端收到后,同样由TCP组装,如果中途丢失一个分片,只需要重传丢失的这个分片部分。

  • UDP数据大小如果大于MTU,则会在IP层进行分片,接收端收到以后,在IP层重组,然后发送给传输层UDP,如果中途丢失一个分片,则整个相关的数据包都需要重传,传输效率非常差。 

(7)速度

  • TCP需要创建三次握手连接,以及断开的时候需要四次挥手,对于延迟跟开销会大些。

  • UDP没有连接一说,有数据就发,所以速度相对比较快。

(2)为什么有了TCP还需要UDP呢?
  • 假设只有TCP传输协议,没有UDP,你正好在跟一个哥们语音,中途可能由于小区网络高峰期的原因,导致网络不太稳定,可能有1~2秒的语音丢失,这个其实可以接受的,对于人类来说完全可以通过整段话的意思推断出那1~2秒的丢失内容,这个时候如果传输协议使用的是TCP的话,TCP通过序列号或者ACK的回应,发现中间有几个数据丢失了,它会将这个数据重新发送,可能你都把一段话听完了,这个时候突然收到对方补发的数据,很有可能导致听不懂这段话的意思,原本中间丢失的1~2秒是不会影响理解这整段话的意思。

TCP还有一个特性,它收到一个数据后并不是马上会交给应用层处理,而是等接收的数据多点一并交给应用层处理,在实时性上就体现的很不好,大家都用过微信的语音通话,你说的同时,这个消息会实时的发出去给对方,如果在语音通信中使用TCP,根据这个特性,你在跟对方建立通信语音后,互相打了招呼后,准备说事情,这个事情占用的时间比较长,可能说了1分钟多,那可能TCP会把你说前面30秒的数据先传过去,然后在把后面的传过去,这对用户来说体验感是非常不好的。

所以像视频、语音这些多媒体的通信大部分都使用的UDP协议,或者是UDP与TCP共用,就是避免上面的事情发生,因为视频、语音丢失一个画面或者某几秒语音对于用户来说都可以接受,这正是因为UDP的特点就是面向无连接,有数据下来就直接发送,简单又高效。

  • 其实你可以发现UDP的特点跟IP是一样的,都是尽力而为去转发,不提供可靠性功能,那有的朋友可能会有疑问,为什么不直接使用IP就行了,还特意设计一个类似的UDP传输协议出来。我们都知道访问一个应用层服务是通过IP+端口号来进行的,而IP协议中的Protocol字段,只有8位,最大值255,显然不能够满足需求的,UDP可以实现端口复用,并且呢对于应用程序调用来说也起来也方便。

(3)一个小实验抓包看看

图片

拉两台PC,设置好对应的地址后,开启抓包,双击PC1,找到UDP发包工具,这里目的MAC填写PC2的(双击PC2直接复制),填写好IP地址跟端口号就可以发送了。

图片

通过抓包也能看到,UDP协议结构非常的简单。

“承上启下”

在网络使用中,除了常见的视频、语音这些多媒体应用使用UDP协议外,比如常用的DNS、电脑、手机同步时间的NTP协议,以及给终端分配地址的DHCP协议都是使用的UDP,下一篇了解下两个应用层的协议,一个DNS、一个DHCP。

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

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

相关文章

淘宝/天猫按图搜索商品:taobao.item_search_img API的奇幻之旅

在这个看脸的时代,我们不仅对人要看颜值,连买东西都要“看脸”了。没错,我说的就是淘宝/天猫的按图搜索商品功能——taobao.item_search_img API。这个功能就像是电商平台的“人脸识别”,只不过它认的是商品的颜值。下面&#xff…

软件工程 软考

开发大型软件系统适用螺旋模型或者RUP模型 螺旋模型强调了风险分析,特别适用于庞大而复杂的、高风险的管理信息系统的开发。喷泉模型是一种以用户需求为动力,以对象为为驱动的模型,主要用于描述面向对象的软件开发过程。该模型的各个阶段没有…

STM32F405RGT6单片机原理图、PCB免费分享

大学时机创比赛时画的板子,比到一半因为疫情回家,无后续,,,已打板验证过,使用stm32f405rgt6做主控 下载文件资源如下 原理图文件 pcb文件 外壳模型文件 stm32f405例程 功能 以下功能全部验证通过 4路…

写一个记录函数执行时间的装饰器

装饰器,这可是Python开发中绕不开的经典话题,不论你是写代码的老手,还是刚入行的萌新,都得和它打上几轮交道。而记录函数执行时间这个功能,更是装饰器中的“常客”。 今天我就带大家来全面解锁一下这块儿的知识&#…

Python 桌面应用开发:使用 Tkinter 创建 GUI 应用程序

Python 桌面应用开发:使用 Tkinter 创建 GUI 应用程序 引言 随着计算机技术的飞速发展,桌面应用程序依然在许多领域中发挥着重要作用。Python 作为一种强大的编程语言,提供了多种工具和库来创建桌面应用程序。其中,Tkinter 是 P…

vue3入门知识(一)

vue3简介 性能的提升 打包大小减少41%初次渲染快55%,更新渲染快133%内存减少54% 源码的升级 使用Proxy代替defineProperty实现响应式重写虚拟DOM的实现和Tree-Shaking 新的特性 1. Composition API(组合API) setupref与reactivecomput…

AI与就业:技术革命下的职业转型与挑战

内容概要 在当今时代,人工智能的迅猛发展正在深刻影响着我们的就业市场。这一技术革命不仅让我们看到了未来的职业转型,还引发了对于新兴技能需求的深思。随着AI技术的普及,许多传统行业面临着巨大的变革压力,同时也为新兴领域创…

小白初入Android_studio所遇到的坑以及怎么解决

1. 安装Android_studio 参考:Android Studio 安装配置教程 - Windows(详细版)-CSDN博客 Android Studio超级详细讲解下载、安装配置教程(建议收藏)_androidstudio-CSDN博客 想下旧版本的android_studio的地址(仅供参考&#xf…

Uubntu下的Boost库安装及使用

一、Boost库介绍 Boost库是为C语言标准库提供扩展的一些C程序库的总称。 Boost库由Boost社区组织开发、维护。其目的是为C程序员提供免费、同行审查的、可移植的程序库。Boost库可以与C标准库共同工作,并且为其提供扩展功能。Boost库使用Boost License来授权使用&…

【王木头】最大似然估计、最大后验估计

目录 一、最大似然估计(MLE) 二、最大后验估计(MAP) 三、MLE 和 MAP 的本质区别 四、当先验是均匀分布时,MLE 和 MAP 等价 五、总结 本文理论参考王木头的视频: 贝叶斯解释“L1和L2正则化”&#xff…

「QT」几何数据类 之 QPointF 浮点型点类

✨博客主页何曾参静谧的博客📌文章专栏「QT」QT5程序设计📚全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasolid…

数据结构与算法——Java实现 54.力扣1008题——前序遍历构造二叉搜索树

不要谩骂以前的自己 他当时一个人站在雾里也很迷茫 ​​​​​​​ ​​​​​​​ ​​​​​​​—— 24.11.6 1008. 前序遍历构造二叉搜索树 给定一个整数数组,它表示BST(即 二叉搜索树 )的 先序遍历 ,构造树并返回其根。 保证 对于给定…

【Leecode】Leecode刷题之路第46天之全排列

题目出处 46-全排列-题目出处 题目描述 个人解法 思路: todo代码示例:(Java) todo复杂度分析 todo官方解法 46-全排列-官方解法 预备知识 回溯法:一种通过探索所有可能的候选解来找出所有的解的算法。如果候选解…

势不可挡 创新引领 | 生信科技SOLIDWORKS 2025新品发布会·苏州站精彩回顾

2024年11月01日,由生信科技举办的SOLIDWORKS 2025新产品发布会在江苏苏州圆满落幕。现场邀请到制造业的专家学者们一同感受SOLIDWORKS 2025最新功能,探索制造业数字化转型之路。 在苏州站活动开场,达索系统专业客户事业部华东区渠道经理马腾飞…

CatLIP,加速2.7倍!采用分类损失的CLIP水准的预训练视觉编码器

CatLIP,加速2.7倍!采用分类损失的CLIP水准的预训练视觉编码器 FesianXu 20241018 at Wechat Search Team 前言 传统的CLIP采用对比学习的方式进行预训练,通常需要汇聚多张节点的多张设备的特征向量以进行打分矩阵的计算,训练速度…

linux笔记(selinux)

一、概述 定义SELinux(Security - Enhanced Linux)是一种基于 Linux 内核的强制访问控制(MAC)安全机制。它为 Linux 系统提供了更细粒度的安全策略,增强了系统的安全性。目的主要目的是限制进程对系统资源(…

江西省补贴性线上职业技能培训管理平台(刷课系统)

江西省补贴性线上职业技能培训管理平台(刷课系统) 目的是为了刷这个网课 此系统有两个版本一个是脚本运行,另外一个是可视化界面运行 可视化运行 技术栈:flask、vue3 原理: 通过分析网站接口,对某些接口加密的参数进行逆向破解,从而修改请求…

Scala 中 set 的实战应用 :图书管理系统

1. 创建书籍集合 首先,我们创建一个可变的书籍集合,用于存储图书馆中的书籍信息。在Scala中,mutable.Set可以用来创建一个可变的集合。 val books mutable.Set("朝花惜拾", "活着") 2. 添加书籍 我们可以使用操作符…

简单介绍一下mvvm mvc mvp以及区别、历史

MVC(Model - View - Controller) 因MVC架构的灵活性,架构图形式很多,仅供参考 历史: MVC 是最早出现的软件架构模式之一,其历史可以追溯到 20 世纪 70 年代,最初被用于 Smalltalk - 80 环境。…

“高级Java编程复习指南:深入理解并发编程、JVM优化与分布式系统架构“

我的个人主页 接下来我将方享四道由易到难的编程题,进入我们的JavaSE复习之旅。 1:大小写转换------题目链接 解题思路: 在ASCII码表中,⼤写字⺟A-Z的Ascii码值为65- 90,⼩写字⺟a-z的Ascii码值为97-122。每个字 ⺟…