UDP详解/消息边界

本文旨在解释了为什么说UDP是不可靠,到底什么是UDP的消息边界,以及UDP是否会出现粘包和半包的问题

概念

UDP协议是一种面向非连接的协议,面向非连接指的是在正式通信前不必与对方先建立连接,不管对方状态就直接发送,至于对方是否可以接收到这些数据内容,UDP协议无法控制,因此说,UDP协议是一种不可靠的协议。无连接的好处就是快,省内存空间和流量,因为维护连接需要创建大量的数据结构。

UDP会尽最大努力交付数据,但不保证可靠交付,没有TCP的确认机制、重传机制(上一篇文章介绍过 TCP详解(二)滑动窗口/流量控制-CSDN博客),如果因为网络原因没有传送到对端,UDP也不会给应用层返回错误信息。

报文格式

可以看到UDP的报文非常简单,不像TCP那也有序号、确认号、选项啥的,UDP的头部只有如下4个

  1. 源端口:发送方主机的应用程序的端口号
  2. 目的端口:目的主机的应用程序的端口号
  3. 长度字段,是以字节为单位的UDP头部和UDP数据的总长度,因为UDP头部长度为8,且空数据的UDP数据报是允许的,这意味着该长度字段值最小为8。UDP长度值是冗余的,因为可以通过IP数据报的总长度减去IP首部的长度推导出来。
  4. 校验和,覆盖了UDP首部、UDP数据和一个伪首部,由初始发送方计算,由最终目的方校验,用于判断数据报在网络传输过程中是否出错,比如某一位从1变成了0或者少了几个字节。

消息边界

所谓数据边界就是UDP接收缓冲区就界定了消息之前的分隔,两个消息不会放到一起,应用层每次都取,都能取到一个完整的包。

UDP发送缓冲区

UDP协议是面向数据报文的信息传送服务。UDP在发送端没有缓冲区,对于应用层交付下来的报文在添加了首部之后就直接交付于ip层,不会进行合并,也不会进行拆分,而是一次交付一个完整的报文。

对于发送端,UDP 包头中,用 两个字节&#

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值