UDP协议详解

目录

前言:

再谈协议

UDP协议

 比较知名的校验和

小结:


前言:

    UDP和TCP作为传输层非常知名的两个协议,那么将数据从应用层到传输层数据是怎样进行打包的?具体都会增加一些什么样的报头,下面内容详细介绍。

再谈协议

    所谓协议就是双方约定的一种数据组织的格式。发送方按照约定来将数据进行封装,接收方同样也按照这样的格式进行解析。UDP是传输层协议,而上面的应用层也有相应的协议。一般应用层协议都是自定义的。

    应用层业务是错综复杂的,没有办法使用一个大协议去规定所有业务的数据格式(很难有一个通用的协议,满足所有业务需求)。需要根据不同场景,不同业务使用相对适合的协议去约定数据的组织格式。

自定义协议首先要明确两点:

    1)结合需求分析清楚,请求响应(客户端,服务器之间)要传递哪些数据。

    2)明确数据以什么样的格式组织。客户端按照这样的协议组织数据,服务端同样按照这样格式去解析数据。

典型的数据组织格式:

    1)XML标签化的数据组织方式,使用标签来表示键值对,用嵌套的方式表示树形结构。

    2)json现在比较流行的数据组织格式。针对XML进行改进,使用大括号的方式来组织。

    3)protobuffer谷歌研发的一种数据组织格式。二进制数据表示方式,针对数据通过二进制表示方式进行压缩。直观的不能观察,但是占用空间小,传输的带宽就降低了。

UDP协议

    UDP协议针对要发送的数据进行封装,原始数据称为“载荷”(payload)。所封装的一些数据称为“报头”。

    这张图在一些技术书籍上很常见,但实际这样画不是很确切。(书上为了排版方便)

解释:

1)

    源端口,目的端口是一次通信中的五元组之二。指定发送方端口和接收方端口。

    由于只有两个字节,无符号数范围就是0 -- 65535。因此端口号就需要在这个范围内, 0 -- 1023范围内端口号被称为知名端口号,就是比较知名的程序使用的端口号。我们在设置端口号不建议使用知名端口号,虽然知名端口号并没有全部使用完0 -- 1023范围内的所有端口,但是也是很可能产生端口冲突,导致程序抛异常。

2)

    UDP报文长度指的是整个报文的长度。由于两个字节最大表示数据是65535,那么UDP报文长度最大也就是64kb。使用UDP一次最大传输64kb大小的报文。

    那么如果我们要传输的数据大于64kb呢?将报文进行拆包,控制每个报文大小在64k以内。或者直接将UDP协议改为TCP协议传输。

3)

    校验和,验证数据传输是否正确。高电平或者低电平,波长大的光信号或者波长小的光信号表示1和0,由于物理原因可能存在“比特位反转”0变1或者1变0。那么传输的数据就会有很大的差别。

    校验和就是针对数据进行一系列数学运算,得到一个数字(如果数据不一致得到的数字也不一致)。在数据发送时也将校验和发送过去,然后得到的数据再进行一次校验和计算,比较这次计算的校验和和发送的校验和,看是否一致。这样就能判断数据是否发送正确。

 比较知名的校验和

1)CRC(循环冗余校验)

    简单粗暴,把数据的每个字节,循环往上累加。如果累加溢出了,高位就不要了。容易计算,但效果不是很理想。想想如果一位1变0,一位0变1,累加的数据也是不变的,就会出现问题。

2)MD5

    MD5通过一系列公式进行数学计算。

特点:

    1.定长:无论原始数据多长,得到的MD5值都是固定长度。

    2.冲突概率小:原始数据只要变动一小部分,计算的MD5值都会差别很大(MD5结果更加分散)。

    3.不可逆:通过MD5值还原成始数据,这个操作很难(计算量非常大)。一些简单的数据通过打表的方式可以还原一些。打表就是把常见的转换记录下来,然后查表转换。

3)SHA1

特点:

    1.不可以从消息摘要中复原信息。(不可逆)

    2.两个不同的消息不会产生同样的消息摘要,所以可以用摘要来校验信息是否正确。

小结:

    理解封装的过程,会对我们进行网络编程有很大促进作用。

  • 15
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小小太空人w

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值