UPD协议结构以及开发中注意事项

📚 目录

  • [1. UDP结构](#1. UDP结构)
    • [1.1 UDP伪首部](#1.1 UDP伪首部)
    • [1.2 核心特性](#1.2 核心特性)
  • [2. 编程开发注意事项](#2. 编程开发注意事项)

前言:

  UDP 是用户数据报协议,属于传输层协议,无连接、不可靠,面向报文。

1. UDP结构

  1. 源端口: 16bit(2字节),发送方端口,可以填0表示不需要回复
  2. 目的端口:16bit(2字节),接收方端口,必须填写,没有端口号就无法交付数据给对应的应用程序
  3. UDP总长度:16bit(2字节),UDP整个报文的总字节大小(头部8字节+数据),最小值为8
  4. UDP校验和:16bit(2字节),校验数据的完整性(UDP头部+数据),还会用到伪首部;可选校验,反之也可以不选,校验出错报文直接丢弃,不会传回错误报文
  5. 16bit 总长度,最大值2^16-1 = 65535,UDP协议减去IP头部字节数量,实际应用中最大可以发送约64kb
1.1 UDP伪首部

 计算校验和的时候,会额外构造一个伪首部,传输过程中,只参与校验,不会真正的在网络中传输

 伪首部包含:源 IP、目的 IP、协议号、UDP 报文长度。

 作用:用于判断报文是否成功传送到主机


[🔙 返回目录](#🔙 返回目录)


1.2 核心特性
  1. 面向数据报: 应用层交给 UDP 多大的数据,UDP 就加上 8 字节头部直接发出去,不会拆分,也不会合并,类似于字符拼接
  2. 无连接: 没有TCP建立连接前的三次握手步骤,发送报文直接填好端口就发,不管对方是否在线,类似于短线,不需要与对方建立连接,即可发送数据;
  3. 不可靠: 发送过程中,可能有多种因数导致丢包现象,因而对方接收不到数据,数据丢掉之后不会重新发送,丢了就是丢了,报文也可能顺序混乱到达;
  4. 全双工:同一个 Socket 既可以收也可以发。

[🔙 返回目录](#🔙 返回目录)


2. 编程开发注意事项

UDP:固定 8 字节头部,开销极小,无连接,不可靠,面向报文

  1. 发送数据大小受到限制,UDP理论最大传输字节约为64kb,如果单次传输数据超过64kb会导致数据的丢失(业务内单包经量控制在64kb以内)
  2. DatagramSocket 接收缓冲区大小,默认值:Linux 一般 200KB 左右,接收缓冲区满时,新来的UDP报文会直接丢弃,不会出现在接收缓冲区内,应用完全收不到;例如:发送方报文太快.Java代码receive()处理比较慢,队列会阻塞,新来的包会直接丢弃
  3. connect() 在 UDP 只是缓存对方 IP 端口,不会产生网络报文,只是本地限制只能收发该地址,不调用 connect 时,每次 send 都要传入目标 InetSocketAddress;receive 拿到发送方地址,用于回包
  4. 丢包,乱序,重复等问题UDP本身不处理,业务代码中自行实现
  5. UDP端口独立于TCP端口,TCP端口占用9090时,UDP端口任然可以适用9090端口
  6. 部分系统可以关闭UDP校验和,一般由系统默认开启,例如Linux
  7. receive() 默认阻塞,没有数据的时候线程卡住。可以设置 setSoTimeout() 设置超时时间,超时抛出SocketTimeoutException异常。
  8. UDP 支持广播报文;路由器默认不转发广播包;组播需要特殊组播地址

[🔙 返回目录](#🔙 返回目录)


相关推荐
云和数据.ChenGuang6 分钟前
LangGraph 异步 Node 的设计与写法实践
开发语言·人工智能·python·机器学习·php
憧憬成为java架构高手的小白1 小时前
LangGraph4j 实战(下)
java
天诰1 小时前
SA-K-11 检索会消失吗与四个未解问题
java·服务器·人工智能·python·机器学习·ai编程
La Pulga2 小时前
【FreeRTOS源码学习笔记】任务延时列表
笔记·mcu·学习·嵌入式·freertos·实时操作系统
蜗牛一步步往上爬3 小时前
第十六章 C++语言在深度学习中的应用
开发语言·c++·深度学习
这个昵称不容易5 小时前
SpringBoot「衣依」服装销售平台:144个Java文件180个接口,从挑衣服到收货评价整条链路都在
java·springboot·毕设
计算机毕设定制辅导-无忧学长5 小时前
《基于微信小程序的居家医疗陪护预约系统设计与实现》
java·spring boot·微信小程序·uniapp·居家医疗陪护预约系统
张张123y5 小时前
DSH 插件调试避坑:client.js 设置面板、热重载与高频报错排查表
开发语言·javascript·人工智能·开源·ecmascript·后端开发·ai agent
文丑颜不良啊6 小时前
LeetCode2221~2240题目解析
java·leetcode
秋饼7 小时前
Computer Use Agent Java 落地实战:感知-行动循环、执行器与安全围栏生产级实现
java·ai·技术分享·后端开发