《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

相关文章

Spring Boot 实现 IP 限流的原理、实践与利弊解析

《SpringBoot实现IP限流的原理、实践与利弊解析》在SpringBoot中实现IP限流是一种简单而有效的方式来保障系统的稳定性和可用性,本文给大家介绍SpringBoot实现IP限... 目录一、引言二、IP 限流原理2.1 令牌桶算法2.2 漏桶算法三、使用场景3.1 防止恶意攻击3.2 控制资源

SpringBoot服务获取Pod当前IP的两种方案

《SpringBoot服务获取Pod当前IP的两种方案》在Kubernetes集群中,SpringBoot服务获取Pod当前IP的方案主要有两种,通过环境变量注入或通过Java代码动态获取网络接口IP... 目录方案一:通过 Kubernetes Downward API 注入环境变量原理步骤方案二:通过

Linux网络配置之网桥和虚拟网络的配置指南

《Linux网络配置之网桥和虚拟网络的配置指南》这篇文章主要为大家详细介绍了Linux中配置网桥和虚拟网络的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 一、网桥的配置在linux系统中配置一个新的网桥主要涉及以下几个步骤:1.为yum仓库做准备,安装组件epel-re

python如何下载网络文件到本地指定文件夹

《python如何下载网络文件到本地指定文件夹》这篇文章主要为大家详细介绍了python如何实现下载网络文件到本地指定文件夹,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下...  在python中下载文件到本地指定文件夹可以通过以下步骤实现,使用requests库处理HTTP请求,并结合o

SpringBoot快速搭建TCP服务端和客户端全过程

《SpringBoot快速搭建TCP服务端和客户端全过程》:本文主要介绍SpringBoot快速搭建TCP服务端和客户端全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录TCPServerTCPClient总结由于工作需要,研究了SpringBoot搭建TCP通信的过程

Linux高并发场景下的网络参数调优实战指南

《Linux高并发场景下的网络参数调优实战指南》在高并发网络服务场景中,Linux内核的默认网络参数往往无法满足需求,导致性能瓶颈、连接超时甚至服务崩溃,本文基于真实案例分析,从参数解读、问题诊断到优... 目录一、问题背景:当并发连接遇上性能瓶颈1.1 案例环境1.2 初始参数分析二、深度诊断:连接状态与

Python 异步编程 asyncio简介及基本用法

《Python异步编程asyncio简介及基本用法》asyncio是Python的一个库,用于编写并发代码,使用协程、任务和Futures来处理I/O密集型和高延迟操作,本文给大家介绍Python... 目录1、asyncio是什么IO密集型任务特征2、怎么用1、基本用法2、关键字 async1、async

Java根据IP地址实现归属地获取

《Java根据IP地址实现归属地获取》Ip2region是一个离线IP地址定位库和IP定位数据管理框架,这篇文章主要为大家详细介绍了Java如何使用Ip2region实现根据IP地址获取归属地,感兴趣... 目录一、使用Ip2region离线获取1、Ip2region简介2、导包3、下编程载xdb文件4、J

使用Python实现IP地址和端口状态检测与监控

《使用Python实现IP地址和端口状态检测与监控》在网络运维和服务器管理中,IP地址和端口的可用性监控是保障业务连续性的基础需求,本文将带你用Python从零打造一个高可用IP监控系统,感兴趣的小伙... 目录概述:为什么需要IP监控系统使用步骤说明1. 环境准备2. 系统部署3. 核心功能配置系统效果展

Java并发编程之如何优雅关闭钩子Shutdown Hook

《Java并发编程之如何优雅关闭钩子ShutdownHook》这篇文章主要为大家详细介绍了Java如何实现优雅关闭钩子ShutdownHook,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起... 目录关闭钩子简介关闭钩子应用场景数据库连接实战演示使用关闭钩子的注意事项开源框架中的关闭钩子机制1.