1.UDP是什么
- 英语:User Datagram Protocol,缩写为UDP
- 一种用户数据报协议,又称为用户数据报文协议
- 是一个简单的面向数据报的传输层协议,正是规范为RFC 768
- 用户数据协议、非连接协议
2.UDP为什么不可靠
- 它一旦把应用程序发送给网络层的数据发送出去,就不保留数据备份
- UDP在IP数据报的头部仅仅加入了复用和数据校验(字段)
- 发送端生产数据,接收端从网络中抓取数据
- 结构简单、无校验、速度快、容易丢包、可广播
3.UDP能做什么
- DNS、TFTP、 SNMP
-
视频、音频、普通数据(无关紧要数据),用于直播或者有线电视,因为视频和音频较大
UDP.png
4.UDP包最大长度
- 如上图所示,Length ==16位 == 2字节,存储长度信息
- 2^16 - 1 = 64k - 1 = 65536 - 1 = 65535 byte
- 自身协议占用:32bit + 32bit = 64bit = 8byte
- 故信息长度为:65535 - 8 = 65507 byte
5.UDP核心API
- API-DatagramSocket
(1)用于接收和发送UDP的类
(2)负责发送某一个UDP包,或者接收UDP包
(3)不同于TCP,UDP并没有合并到Socket API中
(4)DatagramSocket(),创建简单实例,不指定端口与IP
(5)DatagramSocket(int port),创建监听固定端口的实例,即为发送数据包之后,本机的监听端口
(6)DatagramSocket(int port, InetAddress localAddr)创建固定端口指定IP的实例,用于本机具备有多个IP地址
(7)receive(DatagramPacket d):接收
(8)send(DatagramPacket d):发送
(9)setSoTimeout(int timeout):设置超时,毫秒 - API-DatagramPacket
(1)用于处理报文
(2)将byte数组、目标地址、目标端口等数据包装成报文或者将报文拆卸为byte数组
(3)是UDP的发送实体,也是接收实体
(4)DatagramPacket(byte[] buf, int offset, int length, InetAddress address, int port),前3个参数指定buf的使用区间,后面2个参数指定目标机器地址与端口(仅在发送时有效)
(5)DatagramPacket(byte[] buf, int offset, int length, SocketAddress address),前三个参数指定buf的使用区间,SocketAddress相当于 address + port
(6)setData(byte[] buf, int offset, int length)
(7)setData(byte[] buf) 从0开始到buf结束
(8)setLength(int length)用于单独设置buf可用长度
(9)getData()、getOffset()、getLength()获取这三个信息
(10)setAddress(InetAddress iaddr)、setPort(int port)设置目标IP地址和端口(发送时有效)
(11)getAddress()、getPort()
(12)setSocketAddress(SocketAddress address)注意(SocketAddress == InetAddress + port)
(13)getSocketAddress()
