Socket网络编程学习笔记 UDP的定义API单播广播多播
Posted 鮀城小帅
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Socket网络编程学习笔记 UDP的定义API单播广播多播相关的知识,希望对你有一定的参考价值。
1. UDP定义
UDP(User Datagram Protocol,缩写为UDP),是一种用户数据报协议,又成用户数据报文协议。
它是一个简单的面向数据报的传输层协议,正式规范为RFC 768,是用户数据协议,也是非连接协议。(TCP是连接协议)
UDP是不可靠的,它一旦把应用程序发给网络层的数据发送出去,就不保留数据备份。UDP在IP数据报的头部仅仅加入了复用和数据校验(字段)。
UDP的数据传输方式,发送端生产数据,接收端从网络中抓取数据。
UDP的特点,具有结构简单、无校验、速度快、容易丢包、可广播。
2. UDP的用途
(2)可用于视频、音频、普通数据的传输。
3. UDP报文
UDP报文头
UDP的报文头长度,如上图,第二行、第三行分别为32个bit的长度,总共为64位。0~15存储发送源的数据,16~31存储的是接受者的数据。32~47存储的是字节的长度。48~63存储的是头部与数据的校验字段。
UDP包最大长度
可存储 16位 -> 2字节长度的信息;即 2^16-1 = 64k-1 = 65536-1=65535。但由于自身协议占用了:32+32位 = 64位 = 8字节,所以UDP分包后最大的一次传输数据大小为: 65535-8= 65507byte。
4. API
(1) DatagramSocket
这是用于接收与发送UDP的类,主要作用是负责发送某一个UDP包,或者接收UDP包。注意,UDP的API并没有合并到Socket API中。
- DatagramSocket() 创建简单实例,不指定端口和IP
- DatagramSocket(int port) 创建监听固定端口的实例
- DatagramSocket(int port, InetAddress localAddr) 创建固定端口指定IP的实例
- receive( DatagramSocket d) : 接收
- send(DatagramSocket d) : 发送
- setSoTimeout(int timeout): 设置超时,毫秒
- close() : 关闭、释放资源
(2)DatagramPacket
其主要用于处理报文。即将 byte 数组、目标地址、目标端口等数据包装成报文或者将报文拆卸成 byte 数组。它既是UDP的发送实体,也是接收实体。
- DatagramPacket(byte[] buf,int offset, int length, InetAddress address, int port) 前面3个参数指定 buf 的使用区间,后面两个参数指定目标机器地址与端口
- DatagramPacket(byte[] buf,int length, SocketAddress address) 前面3个参数指定 buf 的使用区间, SocketAddress 相当于 InetAddress+Port
- setData(byte[] buf, int offset, int length) 指定 buf 中有效的那部分数据
- setData(byte[] buf) 不指定有效长度,从0开始
- setLength(int length) 单独设置 buf 有效的区间有多长
- getData() 、getOffset()、 getLength() data、offset、length的返回
- setAddress( InetAddress iaddr) 、setPort(int iport) 设置目标的地址和端口
- getAddress()、getPort() 返回目标的地址和端口
- setSocketAddress(SocketAddress address) SocketAddress 相当于 InetAddress+Port
- getSocketAddress()
5.UDP单播、多播、广播
所谓单播,就是两台电脑之间进行点对点的传输数据,这两台电脑之间传输数据的整个过程,是不为其他电脑(主机)所感知的。
所谓多播,也可以叫组播。是同时给一组设备发送信息。
所谓广播,就是给所有的设备都发送信息。比如:给局域网内的所有设备都发送相同的数据。
三种方式的区别主要是在IP地址上,其IP地址类别如下:
6. 广播地址
(1)受限的广播地址: 255.255.255.255 ,该地址只能被局域网内的设备主动去接收到。
(2)C网广播地址一般为: XXX.XXX.XXX.255(192.168.1.255)
(3)D类IP地址为多播预留
7. 网络信息
上图中的 Subnet Mask也就是子网掩码可知,当前网络数据C类IP地址。
8. IP地址构成
一个ip地址是由4个比特,也就是32个字节长度,即一个 int值所构成。
9.广播地址运算
- 比如IP地址为: 192.168.124.7,
- 子网掩码就是: 255.255.255.0,由IP地址可知为C类IP地址,从而得出子网掩码
- 网络地址为 192.168.124.0 ,用子网掩码与IP地址进行与运算可得出网络地址
- 广播地址为: 192.168.124.255,由 255.255.255.0 的最后一位可知其最后一个字节全是0,最大可为255,也就是广播地址为 192.168.124. xxx 的 xxx=255。
- 如果子网掩码不为255.255.255.0,比如: 子网掩码为 : 255.255.255.192,那么广播地址就是 192.168.124.63.
- 广播地址运算方式为:
- 255.255.255.192 -> 11111111.11111111.11111111.11000000
- 可划分网段: 2^2 = 4个 (两个1)
- 0~63(4个字节长度)、64~127、128~191、 192~255
- 所以广播地址最后一位不一定是255
10. 广播通信问题
主机一: 192.168.124.7,子网掩码: 255.255.255.192
主机二: 192.168.124.100,子网掩码:255.255.255.192
主机一广播地址: 192.168.124.63
主机二广播地址: 192.168.124.127
上述的两个广播地址之间是无法互通的。
以上是关于Socket网络编程学习笔记 UDP的定义API单播广播多播的主要内容,如果未能解决你的问题,请参考以下文章
Socket网络编程学习笔记 网络编程Socket与TCP/UDP
Socket网络编程学习笔记 UDP案例-消息接收回送与局域网广播回送