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

2024-06-11 02:44

本文主要是介绍《TCP/IP网络编程》(第十四章)多播与广播,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

当需要向多个用户发送多媒体信息时,如果使用TCP套接字,则需要维护与用户数量相等的套接字;如果使用之前学习的UDP,传输次数也需要和用户数量相同。
所以为了解决这些问题,可以采用多播和广播技术,这样只需要发送一次,所有用户都能接收到信息

1.多播

多播(Multicast)方式的数据传输是基于UDP完成的,使用多播组地址来标识一组感兴趣的接收者,只有加入到这个多播组的设备才会接收到发送的数据包。
多播常用于视频会议、在线直播、IPTV等场景,其中数据需要发送给多个特定的接收者而不是所有人

①多播的数据传输特点

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

②多播技术原理
多播技术基于UDP传输,所以多播数据包和UDP数据包大致相同,但向网络传输多播数据包时,路由器会复制该数据包并传递到多个主机,如下图所示
在这里插入图片描述
PS:有的路由器不支持多播通信,也会使用隧道通信(这里不展开)

2.多播编程

①路由(Routing)和TTL(Time to Live,生存时间)
TTL是决定“数据包传输距离”的主要因素,TTL用整数表示,每经过一个路由器就减1,变为0时就销毁。故TTL设置过大会影响流量,设置过小会无法传输到目标,过程如下图所示
在这里插入图片描述
②设置TTL
通过套接字选项中,IPPROTO_IP协议层中的IP_MULTICAST_TTL完成设置
在这里插入图片描述

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));

③设置加入多播组
通过IPPROTO_IP协议层中的IP_ADD_MEMBERSHIP完成设置

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.广播编程

①设置广播选项
通过套接字选项中,SOL_SOCKET协议层中的SO_BROADCAST完成设置
在这里插入图片描述

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. 适用场景: 广播适用于需要通知所有设备的场景,而多播适用于需要向特定群体发送数据的场景。

①多播的使用场景

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

②广播的使用场景

  1. 局域网内通信: 如打印作业请求或网络发现协议。
  2. 设备发现: 一些设备和服务使用广播来发现网络上的其他设备。
  3. 游戏和娱乐: 在局域网游戏或多媒体应用中,广播可以用于快速发现和连接游戏服务器或媒体播放设备。
  4. 紧急通知系统: 在某些情况下,可能需要向局域网内的所有设备发送紧急通知或警报。

这篇关于《TCP/IP网络编程》(第十四章)多播与广播的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1049995

相关文章

Python中使用正则表达式精准匹配IP地址的案例

《Python中使用正则表达式精准匹配IP地址的案例》Python的正则表达式(re模块)是完成这个任务的利器,但你知道怎么写才能准确匹配各种合法的IP地址吗,今天我们就来详细探讨这个问题,感兴趣的朋... 目录为什么需要IP正则表达式?IP地址的基本结构基础正则表达式写法精确匹配0-255的数字验证IP地

Linux系统配置NAT网络模式的详细步骤(附图文)

《Linux系统配置NAT网络模式的详细步骤(附图文)》本文详细指导如何在VMware环境下配置NAT网络模式,包括设置主机和虚拟机的IP地址、网关,以及针对Linux和Windows系统的具体步骤,... 目录一、配置NAT网络模式二、设置虚拟机交换机网关2.1 打开虚拟机2.2 管理员授权2.3 设置子

揭秘Python Socket网络编程的7种硬核用法

《揭秘PythonSocket网络编程的7种硬核用法》Socket不仅能做聊天室,还能干一大堆硬核操作,这篇文章就带大家看看Python网络编程的7种超实用玩法,感兴趣的小伙伴可以跟随小编一起... 目录1.端口扫描器:探测开放端口2.简易 HTTP 服务器:10 秒搭个网页3.局域网游戏:多人联机对战4.

Java并发编程必备之Synchronized关键字深入解析

《Java并发编程必备之Synchronized关键字深入解析》本文我们深入探索了Java中的Synchronized关键字,包括其互斥性和可重入性的特性,文章详细介绍了Synchronized的三种... 目录一、前言二、Synchronized关键字2.1 Synchronized的特性1. 互斥2.

SpringBoot使用OkHttp完成高效网络请求详解

《SpringBoot使用OkHttp完成高效网络请求详解》OkHttp是一个高效的HTTP客户端,支持同步和异步请求,且具备自动处理cookie、缓存和连接池等高级功能,下面我们来看看SpringB... 目录一、OkHttp 简介二、在 Spring Boot 中集成 OkHttp三、封装 OkHttp

Linux系统之主机网络配置方式

《Linux系统之主机网络配置方式》:本文主要介绍Linux系统之主机网络配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、查看主机的网络参数1、查看主机名2、查看IP地址3、查看网关4、查看DNS二、配置网卡1、修改网卡配置文件2、nmcli工具【通用

Python异步编程中asyncio.gather的并发控制详解

《Python异步编程中asyncio.gather的并发控制详解》在Python异步编程生态中,asyncio.gather是并发任务调度的核心工具,本文将通过实际场景和代码示例,展示如何结合信号量... 目录一、asyncio.gather的原始行为解析二、信号量控制法:给并发装上"节流阀"三、进阶控制

使用Python高效获取网络数据的操作指南

《使用Python高效获取网络数据的操作指南》网络爬虫是一种自动化程序,用于访问和提取网站上的数据,Python是进行网络爬虫开发的理想语言,拥有丰富的库和工具,使得编写和维护爬虫变得简单高效,本文将... 目录网络爬虫的基本概念常用库介绍安装库Requests和BeautifulSoup爬虫开发发送请求解

Linux系统中配置静态IP地址的详细步骤

《Linux系统中配置静态IP地址的详细步骤》本文详细介绍了在Linux系统中配置静态IP地址的五个步骤,包括打开终端、编辑网络配置文件、配置IP地址、保存并重启网络服务,这对于系统管理员和新手都极具... 目录步骤一:打开终端步骤二:编辑网络配置文件步骤三:配置静态IP地址步骤四:保存并关闭文件步骤五:重

Linux配置IP地址的三种实现方式

《Linux配置IP地址的三种实现方式》:本文主要介绍Linux配置IP地址的三种实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录环境RedHat9第一种安装 直接配置网卡文件第二种方式 nmcli(Networkmanager command-line