《TCP/IP网络编程》(第十四章)多播与广播

当需要向多个用户发送多媒体信息时,如果使用TCP套接字,则需要维护与用户数量相等的套接字;如果使用之前学习的UDP,传输次数也需要和用户数量相同。

所以为了解决这些问题,可以采用多播和广播技术,这样只需要发送一次,所有用户都能接收到信息

1.多播

多播(Multicast)方式的数据传输是基于UDP完成的,使用多播组地址 来标识一组感兴趣的接收者,只有加入到这个多播组的设备才会接收到发送的数据包。

多播常用于视频会议、在线直播、IPTV等场景,其中数据需要发送给多个特定的接收者而不是所有人

1.1 多播的数据传输特点

  1. 多播服务器针对特定的多播组,只发送一次数据
  2. 即使只发送一次数据,该组内所有客户端都会接受到数据
  3. 多播组数可以在IP地址范围内任意增加
  4. 加入多播组就能收到数据
  5. 多播组时D类IP地址(IP地址分类参考《TCP/IP网络编程》(第三章)地址族和数据序列),即224.0.0.0~239.255.255.255

1.2 多播技术原理

多播技术基于UDP传输,所以多播数据包和UDP数据包大致相同,但向网络传输多播数据包时,路由器会复制该数据包并传递到多个主机 ,如下图所示

PS:有的路由器不支持多播通信,也会使用隧道通信(这里不展开)

2.多播编程

2.1 路由(Routing)和TTL(Time to Live,生存时间)

TTL是决定"数据包传输距离"的主要因素,TTL用整数表示,每经过一个路由器就减1,变为0时就销毁。故TTL设置过大会影响流量,设置过小会无法传输到目标,过程如下图所示

2.2 设置TTL

通过套接字选项中,IPPROTO_IP 协议层中的IP_MULTICAST_TTL 完成设置

cpp 复制代码
int send_sock;
send_sock= socket(AF_INET,SOCK_DGRAM,0);//使用UDP传输
......
int TTL = 64; // 你希望设置的TTL值
setsockopt(send_sock, IPPROTO_IP, IP_MULTICAST_TTL, (void*)&TTL, sizeof(TTL));

2.3 设置加入多播组

通过IPPROTO_IP 协议层中的IP_ADD_MEMBERSHIP完成设置

cpp 复制代码
int recv_sock;
recv_sock= socket(AF_INET,SOCK_DGRAM,0);//使用UDP传输
......
struct ip_mreq join_adr;
join_adr.imr_multiaddr.s_addr ="多播组地址信息";
join_adr.imr_interface.s_addr="加入多播组的主机地址信息";
setsockopt(recv_sock,IPPROTO_IP,IP_ADD_MEMBERSHIP,(void*)&join_adr,sizeof(join_adr));

//ip_mreq 结构体信息
typedef struct ip_mreq {
    struct in_addr imr_multiaddr; // 多播组的IP地址
    struct in_addr imr_interface; // 加入多播组的主机地址信息
};

3.广播

广播是向同一网络中的所有主机传输数据,也是基于UDP 完成的,而多播是发送给特定的组。广播分为两种形式:直接广播本地广播

①直接广播: 发送者将数据包发送到特定的远程网络的广播地址。这意味着数据包将穿越多个网络,直到到达指定的远程网络。

②本地广播: 发送者将数据包发送到本网络的广播地址。这种广播不会跨越网络边界,仅限于本地网络。

4.广播编程

4.1 设置广播选项

通过套接字选项中,SOL_SOCKET 协议层中的SO_BROADCAST 完成设置

cpp 复制代码
int send_sock;
send_sock= socket(AF_INET,SOCK_DGRAM,0);//使用UDP传输
......
int opt = 1; // 启用广播
setsockopt(send_sock, SOL_SOCKET, SOL_SOCKET, (void*)&opt, sizeof(opt));

PS: 在Windows平台中,该技术的套接字设置没有区别,只需要修改对应的变量和头文件即可

5.多播与广播对比

  1. 接收者范围: 广播发送给所有设备,而多播只发送给特定的组。
  2. 网络效率: 多播比广播更高效,因为它减少了不必要的数据传输。
  3. 地址类型: 广播使用广播地址,多播使用多播地址。
  4. 适用场景: 广播适用于需要通知所有设备的场景,而多播适用于需要向特定群体发送数据的场景。

5.1 多播的使用场景

  1. 大规模数据分发: 股票市场信息、新闻更新或在线直播。
  2. 视频会议和在线教育
  3. IPTV和多媒体流
  4. 网络监控和安全
  5. 分布式计算
  6. 实时数据服务: 天气更新、交通信息或金融市场数据,可以多播给所有订阅服务的用户。

5.2 广播的使用场景

  1. 局域网内通信: 如打印作业请求或网络发现协议。
  2. 设备发现: 一些设备和服务使用广播来发现网络上的其他设备。
  3. 游戏和娱乐: 在局域网游戏或多媒体应用中,广播可以用于快速发现和连接游戏服务器或媒体播放设备。
  4. 紧急通知系统: 在某些情况下,可能需要向局域网内的所有设备发送紧急通知或警报。
相关推荐
爱码小白3 分钟前
网络编程(王铭东老师)笔记
服务器·网络·笔记
蜜獾云13 分钟前
linux firewalld 命令详解
linux·运维·服务器·网络·windows·网络安全·firewalld
柒烨带你飞25 分钟前
路由器转发数据报的封装过程
网络·智能路由器
东方隐侠安全团队-千里1 小时前
网安瞭望台第17期:Rockstar 2FA 故障催生 FlowerStorm 钓鱼即服务扩张现象剖析
网络·chrome·web安全
MuLogin_Browser1 小时前
如何保障多个Facebook账号稳定运行:一账号一稳定IP?
服务器·tcp/ip·facebook
神一样的老师2 小时前
面向高精度网络的时间同步安全管理架构
网络·安全·架构
与海boy3 小时前
CentOS7网络配置,解决不能联网、ping不通外网、主机的问题
linux·网络·网卡
我叫czc3 小时前
【python高级】342-TCP服务器开发流程
服务器·网络·tcp/ip
a_weng083 小时前
CS 144 check6: buiding an IP router
网络·网络协议·计算机网络
終不似少年遊*4 小时前
华为云计算HCIE笔记04
网络·华为云·云计算·学习笔记·hcie·认证·数据中心