UDP中的单播,多播,广播
文章目录
- UDP 简单回顾
- 一、单播(Unicast)
- 定义
- 特点
- 应用
- 举例
- 二、广播(Broadcast)
- 定义
- 特点
- 应用
- 三、多播(Multicast)
- 定义
- 特点
- 应用
- UDP 单播、广播、多播的对比总结
- 额外说明
- 代码简要示例(C)
UDP 简单回顾
UDP(User Datagram Protocol,用户数据报协议)是一种无连接、不可靠的传输层协议,特点是:
- 面向报文,报文界限清晰
- 无连接,不保证数据送达、不保证顺序
- 发送简单,开销低,适合实时或广播类应用
一、单播(Unicast)
定义
- 单播是最常见的通信方式,一对一通信。
- 发送方发送数据包到某个唯一的目标 IP 地址和端口。
- 收发双方地址都是单个的。
特点
- 定向通信,点对点。
- 网络中每个主机都有唯一的单播 IP 地址。
- 发送的数据只被目标主机接收。
应用
- 普通客户端-服务器通信,如客户端请求服务器数据。
- 设备间点对点通信。
举例
- 192.168.1.10 给 192.168.1.20 发送 UDP 数据。
二、广播(Broadcast)
定义
- 广播是单个主机向同一子网内的所有主机发送数据。
- 发送方发送到广播地址(如 IPv4 的 192.168.1.255)。
- 同一网段内的所有主机都能收到。
特点
- 一对多,局域网内有效。
- 不穿越路由器(路由器默认不转发广播包,除非配置特殊路由)。
- 网络负载较大时可能导致“广播风暴”。
应用
- 局域网内服务发现(DHCP、NetBIOS 等)。
- 简单的组网信息广播。
三、多播(Multicast)
定义
- 多播是一对多,但只发送给加入了指定多播组的主机。
- 通过多播 IP 地址(IPv4 范围:224.0.0.0 到 239.255.255.255)。
- 主机通过 IGMP 协议加入或离开多播组。
特点
- 只发一次,网络中只有加入多播组的主机接收。
- 多播可跨子网,路由器支持多播路由转发。
- 节省带宽和网络资源,适合多点通信。
应用
- IPTV 视频直播。
- 实时股票行情推送。
- 大规模在线会议、游戏。
UDP 单播、广播、多播的对比总结
通信方式 | 发送目标 | 目标地址类型 | 通信范围 | 发送次数 | 网络开销 | 应用场景 |
---|---|---|---|---|---|---|
单播 | 单个主机 | 单播地址 | 任意 | 每个目标一次 | 最低 | 点对点通信 |
广播 | 同一子网所有主机 | 广播地址(如 192.168.1.255) | 局域网内 | 一次 | 高 | 局域网服务发现 |
多播 | 加入指定多播组的多个主机 | 多播地址(224.0.0.0-239.255.255.255) | 跨子网,多播路由支持 | 一次 | 适中 | 多点分发、视频直播 |
额外说明
- IPv6 没有广播,只有单播和多播。
- 多播需要网络设备(路由器、交换机)支持 IGMP/MLD 协议。
- UDP 多播发送方只需要把数据发给多播地址和端口,网络层和主机自动处理转发和接收。
代码简要示例(C)
// 单播发送示例(发送到指定 IP 和端口)
sendto(sock, buf, len, 0, (struct sockaddr*)&dest_addr, sizeof(dest_addr));// 广播发送示例(需要设置套接字选项 SO_BROADCAST)
int broadcastEnable = 1;
setsockopt(sock, SOL_SOCKET, SO_BROADCAST, &broadcastEnable, sizeof(broadcastEnable));
sendto(sock, buf, len, 0, (struct sockaddr*)&broadcast_addr, sizeof(broadcast_addr));// 多播加入组播组(接收方示例)
struct ip_mreq mreq;
mreq.imr_multiaddr.s_addr = inet_addr("239.255.0.1");
mreq.imr_interface.s_addr = htonl(INADDR_ANY);
setsockopt(sock, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq, sizeof(mreq));
如果你需要,我可以帮你写更详细的多播使用示例,或者讲解多播组管理和路由原理。需要吗?