详解 UDP 协议

简介: 详解 UDP 协议

一、传输层中的 UDP 协议



UDP:User Datagram Protocol ( 用户数据报协议 )


1. UDP 协议端格式


57c1e5f54d524745b28b852a7bf4b5c8.png


注意几个点:


  • 源端口号相当于发件人的号码
  • 目的端口号相当于收件人的号码
  • 一个 UDP 数据报的最大长度为 64KB


430de87686c545838c73d47e49f4d53e.png


2. 对于校验和进行一些拓展


在网络编程中传输的数据,受网络波动、网络传输的延迟性等影响,可能会造成在传输数据的过程中,出现一些问题。网络传输的数据本质都是一些 【 0 / 1 】的比特流,这些 bit 流都是通过光信号或者电信号来表示的。如果传输过程中,受到干扰, 就容易出现 " 比特翻转 " 的情况 ( 磁场、辐射… ) ,这就会使得 0 转换成 1,1 转换成 0


而校验和这一机制,其实就是为了验证当前的数据是不是出现问题了。


对校验和举个例子:


我现在去超市买东西,我准备买 【 铅笔 + 矿泉水 + 薯片 + 牙刷 】这四样商品,在出发前,我心中牢记有四样商品要买,当到柜台结账之前,我把手中的商品数一数,发现是四件,说明是对的,如果是三件或五件,那么就是错了…


但是这就有一个弊端,当我把矿泉水买成果汁了,但结果还是四样商品,那么就还是出错了…那么,检验和这一机制的存在一定能证伪。当传输之前的数据相加为 A ,传输之后的数据相加为 B ,两者不同,说明是出错了。而传输之前的数据相加为 A ,传输之后的数据相加为 A ,这不能保证中间的数据没有改变!


3. 拓展


那么在网络编程中,怎么才能既验证中间数据,又能验证结果呢?接下来,我们一起来看看两种校验和的方式。


(1) 了解 crc 校验和


CRC:Cyclic Redundancy Check ( 循环冗余码校验 )


现在有一串数据,把其当作二进制的数据,依次按照字节为单位取出数据,然后将这些数据进行累加。( 在累加的过程中,若溢出了,则溢出的部分就舍弃 )

传输数据的时候,把【 数据 与 crc 校验和 】一起传输给目标,当接收方收到了【 数据 与 crc 校验和 】,接收方就需要验证一下, 查看当前的数据是否是对的。


此时接收方是这么做的:接收方按照同样的算法,再针对数据部分,计算一遍 crc 校验和,把这个新计算的结果和收到的 crc 校验和进行对比,看看结果是不是一致的。


本质上,就是在网络传输数据之前,算一遍 crc,接收数据之后,也算一遍 crc 。如果这个数据在传输之前和传输之后,数据内容不变,那么新计算的 crc 也是一致的。如果传输过程中出现了比特翻转,接收到的数据和传输之前的数据就不一样,此时,前后两份 crc 大概率是不相同的。


(2) md5 算法


md5 算法是一种哈希算法,确切地说:它是一个 " 非对称的哈希算法 ",md5 算法的应用场景非常多,用作校验和只是其中的一个场景。我们之前学过的数据结构常用的是针对整数的哈希算法,数据结构中见的最基础的可能就是通过数组求余数。而 md5 算法就是一个典型的字符串哈希算法。

md5 算法本质上是针对数据进行一系列的数学变换…我们暂且不考虑数学运算,我们看看其对应的特性,以及为什么它可以作为检验和的功能。


md5 算法的特性


  • 定长:无论输入的字符串是多长多短,得到的 md5值 都是固定长度。
  • 分散:只要输入的字符串,哪怕只变化了一点点,得到的 md5 值 都会差别巨大,当然,这也是当前哈希算法的核心所在。
  • 不可逆:给定原字符串,很容易得到 md5 值;但给定了 md5值,恢复出原始的字符串的概率几乎为 0


那么,md5 的分散性就可以用作检验和,为什么呢?

因为两个数据相同的 md5 值是相同的。那么如果两个数据不同,哪怕只是有一点差别,这时两者的 md5值 差别就很大,以此来作为网络传输前后数据的检验。另外,md5 算法也可以用作密码学的场景。

目录
相关文章
|
4月前
|
存储 网络协议 算法
UDP 协议和 TCP 协议
本文介绍了UDP和TCP协议的基本结构与特性。UDP协议具有简单的报文结构,包括报头和载荷,报头由源端口、目的端口、报文长度和校验和组成。UDP使用CRC校验和来检测传输错误。相比之下,TCP协议提供更可靠的传输服务,其结构复杂,包含序列号、确认序号和标志位等字段。TCP通过确认应答和超时重传来保证数据传输的可靠性,并采用三次握手建立连接,四次挥手断开连接,确保通信的稳定性和完整性。
124 1
UDP 协议和 TCP 协议
|
13天前
|
XML JSON 算法
【JavaEE】——自定义协议方案、UDP协议
自定义协议,序列化,xml方案,json方案,protobuffer方案,UDP协议,校验和,比特翻转,CRC算法,md5算法
|
26天前
|
存储 网络协议 安全
用于 syslog 收集的协议:TCP、UDP、RELP
系统日志是从Linux/Unix设备及网络设备生成的日志,可通过syslog服务器集中管理。日志传输支持UDP、TCP和RELP协议。UDP无连接且不可靠,不推荐使用;TCP可靠,常用于rsyslog和syslog-ng;RELP提供可靠传输和反向确认。集中管理日志有助于故障排除和安全审计,EventLog Analyzer等工具可自动收集、解析和分析日志。
108 2
|
2月前
|
监控 网络协议 网络性能优化
网络通信的核心选择:TCP与UDP协议深度解析
在网络通信领域,TCP(传输控制协议)和UDP(用户数据报协议)是两种基础且截然不同的传输层协议。它们各自的特点和适用场景对于网络工程师和开发者来说至关重要。本文将深入探讨TCP和UDP的核心区别,并分析它们在实际应用中的选择依据。
67 3
|
2月前
|
网络协议 SEO
TCP连接管理与UDP协议IP协议与ethernet协议
TCP、UDP、IP和Ethernet协议是网络通信的基石,各自负责不同的功能和层次。TCP通过三次握手和四次挥手实现可靠的连接管理,适用于需要数据完整性的场景;UDP提供不可靠的传输服务,适用于低延迟要求的实时通信;IP协议负责数据包的寻址和路由,是网络层的重要协议;Ethernet协议定义了局域网的数据帧传输方式,广泛应用于局域网设备之间的通信。理解这些协议的工作原理和应用场景,有助于设计和维护高效可靠的网络系统。
53 4
|
4月前
|
网络协议
UDP 协议
UDP 协议
153 58
|
3月前
|
网络协议 网络性能优化 C#
C# 一分钟浅谈:UDP 与 TCP 协议区别
【10月更文挑战第8天】在网络编程中,传输层协议的选择对应用程序的性能和可靠性至关重要。本文介绍了 TCP 和 UDP 两种常用协议的基础概念、区别及应用场景,并通过 C# 代码示例详细说明了如何处理常见的问题和易错点。TCP 适用于需要可靠传输和顺序保证的场景,而 UDP 适用于对延迟敏感且可以容忍一定数据丢失的实时应用。
63 1
|
3月前
|
网络协议 算法 数据格式
【TCP/IP】UDP协议数据格式和报文格式
【TCP/IP】UDP协议数据格式和报文格式
219 3
|
3月前
|
存储 网络协议 算法
更深层次理解传输层两协议【UDP | TCP】【UDP 缓冲区 | TCP 8种策略 | 三次握手四次挥手】
UDP和TCP各有所长,UDP以其低延迟、轻量级的特点适用于对实时性要求极高的应用,而TCP凭借其强大的错误检测、流量控制和拥塞控制机制,确保了数据的可靠传输,适用于文件传输、网页浏览等场景。理解它们的工作原理,特别是UDP的缓冲区管理和TCP的8种策略,对于优化网络应用的性能、确保数据的高效和可靠传输至关重要。开发者在选择传输层协议时,应根据实际需求权衡利弊,合理利用这两项关键技术。
104 5
|
3月前
|
JavaScript 安全 Java
谈谈UDP、HTTP、SSL、TLS协议在java中的实际应用
下面我将详细介绍UDP、HTTP、SSL、TLS协议及其工作原理,并提供Java代码示例(由于Deno是一个基于Node.js的运行时,Java代码无法直接在Deno中运行,但可以通过理解Java示例来类比Deno中的实现)。
96 1