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值,还可以当作一种加密方式

  • 18
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 34
    评论
评论 34
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值