UDP协议特点及报文格式详解

UDP协议的特点

1. 无连接

不需要对方一直处于准备接收信息的状态.好比发微信,不需要对方在线,可以直接上来就发.通信的双方不需要保存对方的信息.

2.不可靠传输

使用UDP协议将数据发出去后,不关心对方是否能否收到,发完了就完了.

3.面向数据报

将数据报作为传输数据的基本单位,一次读写只能读写一个完整的数据报.

4.全双工

一条链路,可以进行双向通信.

UDP协议报文格式

我们之前介绍了使用UDP协议,进行编码来实现客户端和服务器之间的通信.

现在我们来进一步学习UDP协议中的报文结构.UDP报文结构如下:

在上图中,把UDP报文分成了五部分:源端口号,目的端口号,UDP长度,UDP校验和,数据(如果有的话).

前四部分属于报头,我们接下来详细介绍一下:

1. 源端口号和目的端口号

这个非常容易理解,要发送一个UDP数据报,肯定要清楚这个数据报从哪里发到哪里.起点和终点一定要明确包含在其中.就像寄一份邮件,上面会写上寄出的地址和收件的地址.

这两个端口号各自占2个字节,也就是各自占16个比特位.

2. UDP长度

UDP长度描述了整个UDP数据报具体占多少个字节,我们可以通过这个量知道当前的载荷是多少字节.

UDP长度这个量也占2个字节,用两个字节来表示一个无符号整数的范围是:0~65535.这就意味着一个UDP数据报能够传输的内容上限是64KB.

但是,对于当下的需求来说,我们需要传输的数据量可能远远超过64KB.有两个方案就被提了出来:

1.在应用层将数据包拆分,发送,再由接收方接收后进行拼装.

但是这中方法的实现过于复杂,而且安全程度低,一旦出现丢包,造成的影响过大.

2. 使用TCP协议进行数据的传输.

这种方法最终被采用,因为代码的改动量小,容易实现;并且TCP对于应用层数据包的大小没有限制.我们后面介绍TCP报文结构时会再具体介绍.

那么在被问到UDP数据报中载荷最多能存储多少数据时?答:64KB-8B.立即错误!!!

我们要培养一种工程师思维,在实际开发过程中,我们判断这个数据报的载荷有没有达到上限,不是看载荷的大小是否<= 64KB-8B,而是看载荷中的数据有没有逼近64KB.如果接近64KB,那么早在未到达 64KB-8B这个值之前,早早就要作出处理了.

3. UDP校验和

 数据在网络传输过程中,是可能会"出错"的.因为二进制数据在传输之前,要先转化为电信号,光信号,电磁波.....可能受到外界环境的干扰.

比如"比特翻转",例如对于一个二进制数据,本来传输的是0,实际达到对端的是1;本来传输的是0,实际达到对端的是0.

对数据的校验:

1.能够发现是否出错.(代价较小)

2.最好发现哪一位出错,并且能够纠错.(代价更大)

UDP校验和就只能做到第一层.

校验和就是拿着数据(部分)进行一系列的计算,得到结果.如果这部分数据发生改变,得到的结果也不一样.

如果一个数据报从A发送到B,A会先拿一部分数据计算出校验和,一起发送到B.B拿到这些数据后,再按照相同的算法计算新的校验和,拿新的校验和和原来的校验和进行比对,如果不一致,就说明传输出现了问题.

UDP中使用的CRC算法作为校验和.CRC设定两个字节的变量,把数据的每个字节取出来,在这个变量上进行累加.如果结果超出两个字节,就把溢出部分舍弃.

  • 22
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值