UDP协议

引言

  本文中只关于IPv4;UDP是一种保留消息边界的简单的面向数据报的传输层协议。它不提供差错纠正、队列管理、重复消除、流量控制和拥塞控制。总之,能没有的都没了。但它提供了差错检测,是一种端到端的校验和。因此使用它的程序必须自己实现正确的排序等UDP没有的功能。
  UDP的正式规范在RFC0768中,在文档中提及了UDP采用的是“尽力而为”的模式,意思是把应用程序传给IP层的数据发送出去,但是并不保证是否可以到达目的地。这也是因为它的无连接特征,所以校验和是十分的重要。但是UDP并非一无是处,它就突出一个字——快;

UDP头部

在这里插入图片描述
如图所示,这就是UDP的头部,非常的简洁

  • 16位源端口号:可选,如果发送者不需要对方回复,置0;
  • 16位目的端口号:目的端口号;
  • 16位UDP长度:UDP头部+UDP数据报的总长度,最小为8(只有头部);
  • 16位UDP校验和:端到端的校验和,由发送方经过计算所得,最终由目的方校验。在传输过程中不会被修改(穿越NAT除外),如果接受方发现校验和不匹配,则丢弃该报文。通过ICMPv4协议发送错误报文给发送方;

UDP校验和

在这里插入图片描述
如图所示,在原先的UDP首部前添加了UDP伪头部,伪头部正是用来帮助计算校验和的。但它也仅仅是用来帮助计算校验和,从来不会被传送出去;

  • 源IP地址:来自IP头部的源地址
  • 目的IP地址:来自IP头部的目的地址
  • 0:置0
  • 8位协议号:UDP的协议号是17,如果使用UDP,则为17
  • 16位UDP长度:和头部的长度一样

注:UDP操作IP的首部会产生微小的影响,可以忽略不计。

计算方式
按照两个字节拆分,如果UDP数据报为基数,那么补0;将从153.19至数据和 0全部相加,取反即可获得校验和。
在这里插入图片描述

IPv4/UDP的分片

  前面提到了UDP的数据报最小为0,可以不发送数据。那么当UDP的一个包的数据量过大时,就会被分片,例如在链路层不可以超过MTU(1500字节);

在这里插入图片描述
如图所示,该UDP数据报原本为3000字节,在经过IP层后,增加了IP的头部(20字节)。那么整个包的长度为3020个字节。由于MTU的存在,那么每个包在数据链路层会进行分片。由于分片后的每一个片不一定是在同一个路由中进行传递。所以每个包的前面必须要有IPv4的头部。UDP的头部只存在于第一个分片中。

  • MF:代表该分片之后是否还有分片,如果是则为1,没有则为0;
  • 偏移:偏移以8个字节为单位,所以第二个的偏移为1480/8;第三个片则为1480/8*2;
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值