UDP协议

UDP协议端格式

在这里插入图片描述

  • 16位源端口与16位目的端口:负责应用程序之间的数据传输,标识数据从哪来到哪去
  • 16位校验和:校验数据一致性(发送的数据与接收的数据是否一致)——二进制反码求和
    发送数据的时候,将校验和设置为0,然后从报头第0个字节开始,每个字节进行取反相加,超出16位的部分(求和进位部分)取出来再次与低16位进行相加,最终得到的数据填充到校验和中;
    接收方同样对接收到的数据进行二进制反码求和;得出的数据若为0则标识一致。
  • 数据报长度:包含有UDP报头的UDP数据报总长度;UDP报头是8个字节;然而因为数据报长度只使用了2个字节存储,因此能够表示的长度最多为65535;因此UDP在使用sendto发送数据的时候给与的数据有最大长度限制,限制长度不能大于64k-8;

UDP的特点

UDP传输的过程类似于寄信

  • 无连接:知道对端的IP和端口号就直接进行传输,不需要建立连接;
  • 不可靠:没有确认机制,没有重传机制;如果因为网络故障该段无法发到对方,UDP协议层也不会给应用层返回任何错误信息;
  • 面向数据报:不能够灵活的控制读写数据的次数和数量。

协议实现 / 特性 对于上层代码编写的影响

  • 若在发送大文件时,文件数据大于64k-8,则不能一次性发送,需要用户在应用层进行分包操作;将一个大数据截断为多个小数据进行发送
  • 但是UDP并不保证数据有序到达,因此需要用户在应用层进行包序管理

UDP的数据传输是整条收发

  • 发送方:UDP使用sendto发送数据的时候,将数据放到socket发送缓冲区,socket会直接为这个数据封装UDP报头然后发送出去;
  • 接收方:UDP使用recvfrom接收数据的时候,人家发送了100个字节,那么这个数据就不能分成两个50字节进行多次接收;
    应用层接收数据的时候,UDP在传输层一次只会交付一条完整的数据;不会交付半条或者多条;
    使用UDP接收数据的时候,接收缓冲区要定义的足够大,否则若发送的数据比较大,缓冲区不构,则会recvfrom失败。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值