🔥博客主页: 我要成为C++领域大神
🎥系列专栏:【C++核心编程】 【计算机网络】 【Linux编程】 【操作系统】
❤️感谢大家点赞👍收藏⭐评论✍️
本博客致力于分享知识,欢迎大家共同学习和交流。
单播(Unicast)
单播是指将数据从一个发送者传输到一个指定的接收者的通信方式。
在单播通信中,数据只会传输到目标地址指定的唯一接收者,其他接收者不会接收到这个数据。
单播通常用于一对一的通信,如客户端与服务器之间的通信。
单播需要知道目的端的IP地址。例如,如果一个网络中 IP 地址为 10.1.2.0 的设备想要将流量流(数据包)发送到另一个网络中 IP 地址为 20.12.4.2 的设备,那么单播就出现了。
组播(Multicast)
组播是指将数据从一个发送者传输到一组特定的接收者的通信方式。
在组播通信中,数据被发送到一个特定的组地址,所有加入了这个组的接收者都可以接收到这个数据。
组播通常用于一对多的通信,如视频直播、在线会议、流媒体等。
广播(Broadcast)
广播是指将数据从一个发送者传输到一个网络中的所有接收者的通信方式。
在广播通信中,数据被发送到一个特定的广播地址,网络中的所有接收者都可以接收到这个数据。
广播通常用于向局域网中的所有设备发送消息或通知,如 DHCP 自动 IP 地址分配、ARP 地址解析等。
单播适用于一对一的通信,组播适用于一对多的通信,而广播适用于一对所有的通信。
有限广播和直接广播
广播分为两种,直接广播和有限广播,
直接广播
在某个网段内发送数据可以跨路由器,通过直接广播,就是将这个网段的网络号不变,主机号变为全1,即x.x.x.255
例如广播地址是192.168.3.255,那么网段为192.168.3.xxx的所有主机都会收到。
将UDP协议的服务端和客户端代码进行稍微修改,可以实现广播。
将客户端中目的主机的IP修改为192.168.3.255,这样就是所有网段为192.168.3.xxx的主机均可以收到。
有限广播
有限广播是向局域网中任意网段发送数据,发送地址是255.255.255.255,不能跨路由器进行。
有限广播需要设置一个广播权限,使用setsockopt函数。函数的返回值是0或者SOCKET_ERROR,若返回0说明正常设置权限。
int WSAAPI setsockopt(
[in] SOCKET s,
[in] int level,
[in] int optname,
[in] const char *optval,
[in] int optlen
);
第一个参数是需要设置权限的套接字;第二个参数是定义选项的级别,填写SOL_SOCKET;第三个参数的选项名称,要设置广播就填写SO_BROADCAST;第四个参数是指向指定请求选项值的缓冲区的指针,是给广播权限设置的数值,TRUE是设置广播权限,FALSE是取消广播权限;第五个参数是指向缓冲区的大小,也就是第四个参数的大小。
在UDP通信中实现广播可参考【计算机网络】UDP中实现广播