简简单单的UDP

devtools/2024/11/13 18:09:40/

前言

上一篇了解了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.ppmy.cn/devtools/133339.html

相关文章

PyQt5入门级超详细教程中篇

PyQt5入门级超详细教程 中篇:信号槽机制与表格数据展示 接上篇: 第4部分:事件处理与信号槽机制 4.1 什么是信号与槽? 在 PyQt5 中,信号(Signal) 和 槽(Slot) 是处理事…

conda环境迁移,修改conda路径(附带脚本)

方法1 现将文件夹移动到对应用户的~目录下(或其他目录)mv /home/asushiro/miniconda3 /root/miniconda3建立软链接 然后创建软链接,相当于快捷方式ln -s /root/miniconda3 /home/aushiro/miniconda3方法2 将对应miniconda中的文件路径全部改…

golang 实现比特币内核:实现基于椭圆曲线的数字签名和验证

我们已经展示了,给定生成点 G,并选择一个足够大的标量 e,我们可以轻松计算出 P=e*G,但是当你拥有 G 和 P 时,几乎不可能得到 e。这是椭圆曲线加密的基础。 所选择的标量 k 被称为私钥,而 Q 是公钥。注意,k 是一个256位的整数,而 Q 包含两部分:一个是 x 坐标,另一个是…

联合物种分布模型HMSC开展单物种和多物种分析技术细节及HMSC包的实际应用;群落生态学数据分析、物种分布预测、假说验证等

目录 专题1:R/Rstudio简介及入门 夯实基础 专题2:群落生态学及数据统计分析概述 专题3:联合物种分布模型Hmsc及群落数据贝叶斯统计 专题4:单物种(物种水平)/单变量Hmsc贝叶斯统计 专题5:多…

ESLint 使用教程(四):ESLint 有哪些执行时机?

前言 ESLint 作为一个静态代码分析工具,可以帮助我们发现和修复代码中的问题,保持代码风格的一致性。然而,ESLint的最佳实践不仅仅在于了解其功能,更在于掌握其执行时机。本文将详细介绍ESLint在不同开发阶段的执行时机&#xff…

关于git使用的图文教程(包括基本使用,处理冲突问题等等)超详细

目录 用户签名,初始化git git提交流程图 提交到本地库 版本穿梭 分支操作 分支合并冲突 团队协作 github的使用 推送代码 克隆 拉取代码 团队协作冲突 团队协作之分支管理 推送分支到分支: 拉去远程库分支到本地库: 本地删除远程分支&am…

MySQL变量详解

MySQL变量详解 MySQL 中的变量主要用于在 SQL 语句中存储和传递值,可以显著提高数据库操作的灵活性和效率。MySQL 支持多种类型的变量,每种变量都有其特定的用途和作用范围。本文将详细介绍 MySQL 中几种主要变量的使用方法和注意事项。 1. 用户定义的…

web——[GXYCTF2019]Ping Ping Ping1——过滤和绕过

0x00 考点 0、命令联合执行 ; 前面的执行完执行后面的 | 管道符,上一条命令的输出,作为下一条命令的参数(显示后面的执行结果) || 当前面的执行出错时(为假)执行后面的 & 将任…