UDP协议详解

目录

UDP协议报文结构

端口号

报文长度

校验和

 生成校验和的算法

MD5的特点


UDP协议报文结构

UDP会把载荷数据(也就是通过 UDP socekt,send方法拿来的数据基础上,再前面拼装(相当于字符串拼接此处是二进制的)上几个字节的报头

UDP报头里包含了一些特定的属性,这些属性携带了一些重要的信息
不同的协议,功能不同,报头中带有的属性信息就不同,对于UDP来说,报头一共8个字节,分成四个部分:源端口号,目的端口号,报文长度,校验和 

UDP协议是一个无连接,不可靠,面向数据报,全双工协议.

端口号

端口号传输层协议的概念,每个进程(程序)属于自己端口号,起到的效果就是区分一个主机上具体的应用程序.因此我们要求同一个主机上,一个端口号不能被多个进程绑定

UDP协议中包含源端口号,和目的端口号,他们都是用2个字节,也就是16个bit位来表示的,因此这里的端口号的取值范围是0->65535,注意0->1023这个范围的端口,被称为"知名端口号/具体端口号",这些端口号都已经分配给了一些广泛使用的知名的应用程序了,因此我们自己写的程序绑定的端口号需要从1024开始

报文长度

报文长度也是由2个字节表示的,范围同样是0->65535,换算一下单位,也就是64KB.也就是说一个UDP数据报最多只能传输64KB的数据

如果我们需要传输的数据大于64KB怎么办呢?

1.需要在应用层,通过代码的方式针对应用层数据报进行手动的分包,拆成多个包,通过多个UDP数据报来进行传输(本来send一次,现在要send多次)

2.不用UDP协议,使用TCP协议

校验和

网络传输的本质是光信号/电信号,在传输过程中,可能会受到一些物理因素的影响,在这些干扰因素的影响下,可能会发生"比特翻转",也就是原来要传输二进制1,发生比特翻转,就变成了0,原来要传输二进制0,发生比特翻转,就变成了1,此时我们传输过后得到的数据就变了,数据的含义也就不同了,本来数据报是想开启功能,可能就变成了关闭功能了

这种现象是客观存在的,不可避免的,我们能做的就是在发生比特翻转,数据改变了的时候,能够及时的识别出当前的数据是否出现问题.

此时我们就需要校验和了,校验和的作用就是验证传输的数据是否是正确的

校验和是如何鉴别我们的数据是否出现了问题的呢?

检验和会针对数据内容进行一系列的数学运算,得到一个比较短的结果(比如2字节),如果数据内容一定,得到的校验和结果就一定,如果数据变了,得到的检验和也就变了

 生成校验和的算法

1.CRC 循环冗余校验,把数据每个字节,循环往上累加,如果累加益处了,高位就不要了

2.MD5 有一系列公式,来进行更复杂的运算,最后得到一个定长的结果

MD5的特点

1.定长:无论原始数据有多长,得到的md5的值都是固定长度(4字节版本,也有8字节版本)

2.冲突概率小 原始数据哪怕变动一个地方,一个bit位,算出来的MD5天差地别(MD5让结果更分散了)

3.不可逆,通过原始数据计算出MD5很容易,但是想要通过MD5计算出原始数据非常难(计算量极大,理论上不可以完成)

4.可以用来计算校验和,也可以计算hash值,还可以当作一种加密方式

### UDP协议工作机制详解 用户数据报协议(User Datagram Protocol, UDP)是一种无连接的传输层协议,属于OSI七层模型中的第四层。与TCP相比,UDP的设计目标是提供一种轻量级、低延迟的通信方式,适用于对速度要求较高而对可靠性要求较低的应用场景。 #### 1. 基本特性 UDP的主要特点是其无连接性和不可靠性。这意味着发送方无需等待接收方的确认即可直接发送数据包[^3]。这种设计使得UDP在某些特定应用中表现出更高的效率和更低的开销。然而,由于缺乏重传机制和错误校验能力,UDP无法保证数据包按序到达或完全送达。 #### 2. 数据结构 一个典型的UDP数据报由首部字段和数据部分组成。其中,首部固定长度为8字节,包含源端口号、目的端口号、长度以及检验和四个字段。以下是具体描述: - **源端口(Source Port)**: 占用两个八位组(即16比特),用来标识发送进程的身份; - **目的端口(Destination Port)**: 同样占用两个八位组,表示接收进程的身份; - **总长度(Total Length)**: 记录整个数据报的大小,包括头部和负载两部分内容; - **校验和(Checksum)**: 可选字段,用于检测IP头以外的数据是否有误码发生;如果未启用,则该值应设为全0。 ```c struct udphdr { uint16_t source; /* Source port */ uint16_t dest; /* Destination port */ uint16_t len; /* Datagram length (header + data) */ uint16_t check; /* Checksum of header and data */ }; ``` #### 3. 应用场景 尽管UDP不具备像TCP那样强大的保障措施,但它仍然广泛应用于多种领域,比如实时音视频通话(VoIP)、在线游戏、域名解析服务DNS查询响应等场合。这些情况下往往更看重及时反馈而非绝对准确性。 #### 4. 缺点分析 当然,任何事物都有利弊两面,对于采用UDP协议来说也不例外。主要缺点如下: - 容易丢失分组或者重复收到相同的信息片段; - 接收次序混乱可能导致重组困难甚至失败; - 对于大规模文件下载之类的任务而言并不适合因为缺少必要的流量控制手段来防止拥塞现象的发生。 综上所述,虽然UDP存在诸多局限之处,但由于其实现简单快捷的特点使其成为众多现代互联网应用程序不可或缺的一部分。
评论 34
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值