2020/2/21 Linux Socket编程 高级篇——广播

2023-05-16

广播:实现一对多的通信

SO_BROADCAST选项

它控制了UDP套接字是否能发广播数据报,选项类型是int,非零表示“是”。  只有UDP能用,TCP不能。

如果是一个广播地址,但SO_BROADCAST 选项却没有被设定, 就会返回EACCES错误。

int opt = 1;
if((sockdfd = socket(AF_INET, SOCK_DGRA, 0)) < 0){
    //perror
}
if(setsockopt(sockfd, SOL_SOCKET, SO_BROADCAST, %op, sizeof(opt)) < 0){
    //perror
}

SO_SNDBUF选项 & SO_RCVBUF选项

每个套接字都有一个发送缓冲区和接收缓冲区,由底层协议使用。这两个选项分别控制发送和接收缓存区的大小,类型为int,以字节为单位。

通过getsockopt函数获得发送缓存区的大小,默认的缓存区大小存储在函数的第四个参数opt中;

通过setsockopt函数可以重新设置发送缓存区的大小。

if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0){
    perror()
}
 
if((getsockopt(sockfd, SOL_SOCKET, SO_SNDBUF, &opt, sizeof(opt)) < 0){
    perror()
} 

opt += 2048;

if(setsockopt(sockfd, SOL_SOCKET, SO_SNDBUF, &opt, sizeof(opt)) < 0){
    perror()
} 

广播地址

IPV4: {netID,subnetID,hostID}

即网络ID(A B C D E五种)、子网ID和主机ID,

共32bit 4个字节(点分十进制),用-1表示所有比特都为1的字段。

有四类广播地址:

子网广播地址:  {netID,subnetID,-1}

例:如果采用B类地址192.168,8位子网ID,那么192.168.2.255是192.168.2子网上所有接口的子网广播地址。路由器通常不转发这类广播(只能在这个子网中使用)。

全部子网广播地址:{netID,-1,-1}

这类广播地址编排指定网络上的所有子网,现在很少见。

受限广播地址:{-1,-1,-1}或255.255.255.255

路由器从不转发目的地址为255.255.255.255的IP数据报,它用于主机配置过程中IP数据报的目的地址,仅出现在本地网络中。


补充内容——IP地址

IP地址 = 网络地址 + 主机地址

同一个物理网络上的所有主机都使用同一个网络ID,网络上的一个主机(包括网络上工作站,服务器和路由器等)有一个主机ID与其对应。

根据起始字符(网络ID)的不同分为5种类型

A类地址0(开头)+7位(网络地址)+24位(主机地址)      

从1.0.0.0 到126.255.255.255;可用的A类网络有126个,每个网络能容纳1亿多个主机。  应用于大规模网络环境。

B类地址10(开头)+14位(网络地址)+16位(主机地址)  

从128.0.0.0到191.255.255.255;可用的B类网络有16382个,每个网络能容纳6万多个主机 。

C类地址110(开头)+21位(网络地址)+8位(主机地址)  

 从192.0.0.0到223.255.255.255 其中127.x.x.x段地址空间是被保留的回环地址;C类网络可达209万余个,每个网络能容纳254个主机。 只有8位主机地址,所以应用于小规模网络环境。

D类地址以1110开头  它是一个专门保留的地址,它并不指向特定的网络,目前这一类地址被用在多点广播(Multicast)中。多点广播地址用来一次寻址一组计算机,它标识共享同一协议的一组计算机。从224.0.0.0到239.255.255.255。

E类地址以11110开头 用于科研保留;从240.0.0.0到255.255.255.254。

A B C类地址中,各有一部分用于局域网的IP地址:
A类的私有地址: 10.0.0.0 ~ 10.255.255.255
   
B类的私有地址: 172.16.0.0 ~ 172.31.255.255  
(网络号范围: 10101010 00010000 ~ 10101010 00011111)
     
C类的私有地址: 192.168.0.0 ~ 192.168.255.255
(网络号范围: 11000000 10101000 00000000 ~ 11000000 10101000 11111111)

补充内容——子网掩码

子网掩码(subnet mask):将某个IP地址划分成网络地址和主机地址两部分。子网掩码不能单独存在,它必须结合IP地址一起使用。子网掩码是一个32位地址,用于屏蔽IP地址的一部分以区别网络标识和主机标识,并说明该IP地址是在局域网上,还是在远程网上

屏蔽一个IP地址的网络ID——“全1”比特模式:
A类地址,默认的子网掩码是255.0.0.0
B类地址,默认的子网掩码是255.255.0.0
C类地址,默认的子网掩码是255.255.255.0


计算公式:

IP地址 = 网络地址 + 主机地址(前半段和后半段)
网络地址 = IP地址 & 子网掩码(按位与)
主机地址 = IP地址-网络地址

主机数 = 2^(主机号) - 2

主机位= log_2(主机数量+1(网络地址)+1(广播地址)+1(网关))(向上取整)
 


补充内容——网关

网关(Gateway)又称网间连接器、协议转换器。在网络层上实现网络互连,是最复杂的网络互连设备,仅用于两个高层协议不同的网络互连。网关的结构也和路由器类似,不同的是互连层。网关既可以用于广域网互连,也可以用于局域网互连。
网关实质上是一个网络通向其他网络的IP地址
例如:网络A的IP地址范围为“192.168.1.1~192. 168.1.254”,子网掩码为255.255.255.0;网络B的IP地址范围为“192.168.2.1~192.168.2.254”,子网掩码为255.255.255.0。这两个都是C类地址,都采用默认网关,不属于同一个网络
在没有路由器的情况下,两个网络之间是不能进行TCP/IP通信的,即使是两个网络连接在同一台交换机(或集线器)上,TCP/IP协议也会根据子网掩码(255.255.255.0)判定两个网络中的主机处在不同的网络里。
要实现这两个网络之间的通信,必须通过网关。如果网络A中的主机发现数据包的目的主机不在本地网络中,就把数据包转发给它自己的网关,再由网关转发给网络B的网关,网络B的网关再转发给网络B的某个主机。
只有设置好网关的IP地址,TCP/IP协议才能实现不同网络之间的相互通信。

网关的IP地址是具有路由功能的设备的IP地址

(具有路由功能的设备有路由器、启用了路由协议的服务器(实质上相当于一台路由器)、代理服务器(也相当于一台路由器))。

ip段/数字  如192.168.0.1/24标示了我们的网络号的位数,即网络号是24位


 

 

 


 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

2020/2/21 Linux Socket编程 高级篇——广播 的相关文章

  • 安装Python时出错

    击中后 make install 我收到以下错误 usr bin install cannot create regular file usr local bin python2 6 Permission denied make altbi
  • 计算以某个单词开头的行数

    如何计算文本文件中以某个单词开头的行数 我不想使用sed进而wc l 有更好的解决办法吗 只需 grep 你的单词 然后使用 wc l 来计算行数 就像这样 grep your word path to file wc l
  • 以非 root 用户身份在 UserData 中运行命令

    我正在尝试使用 EC2 UserData 脚本安装气流 我需要使用非 root 用户 ec2 user 运行一些命令 请参阅下面的脚本 UserData Fn Base64 Sub bin bash set xe Install GCC y
  • 为什么我的 sed 命令在使用变量时失败?

    使用 bash 我尝试插入日期变量并搜索该日期的日志文件 然后将输出发送到文件 如果我像这样对日期进行硬编码 它会起作用 sed n Nov 22 2010 p file gt log file 但如果我这样做就会失败 date Nov 2
  • Eclipse CDT 内置包含目录

    Under Eclipse CDT gt Project Settings gt C C General gt Paths and Symbols gt Includes gt GNU C 有一个包含路径的列表 有些是粗体的并且是特定于项目
  • 当非特权用户运行 C/asm 程序时,会对 Linux 造成什么危害?

    我一直在考虑一种场景 让用户 可以是任何人 可能有恶意 提交在 Linux PC 我们称之为基准节点 上运行的代码 目标是为单线程例程创建一种自动化基准测试环境 假设一个网站向代理发布了一些代码 该代理将此代码交给基准节点 而基准节点仅与代
  • Docker 无法写入使用 -v 挂载的目录,除非它有 777 权限

    我正在使用docker solr https github com makuk66 docker solr使用 docker 生成图像 我需要在其中安装一个目录 这是我使用 v flag 问题是容器需要写入我已安装到其中的目录 但似乎没有权
  • accept() 创建一个新套接字是什么意思?

    我的问题基于以下理解 套接字由 ip port 定义 服务器和客户端都有自己的套接字 Socket连接由五组server ip server port client ip client port protocol定义 套接字描述符是标识套接
  • find 命令的“exec”功能可以在后台启动程序吗?

    我想做这样的事情 find iname Advanced Linux Program exec kpdf 可能的 还有其他类似的方法吗 首先 它不会像你输入的那样工作 因为 shell 会将其解释为 find iname Advanced
  • 从该共享库中查找加载的共享库的位置?

    从共享库中的函数 在正在运行的进程 用 C 编写 内 我如何发现该共享库是从哪里加载的 我找到的所有答案都涉及使用诸如ldd在命令行中 或者通过查看 proc self maps 在 Win32 上 我只需使用GetModuleFileNa
  • Linux命令:如何仅“查找”文本文件?

    经过几次谷歌搜索后 我得出的结论是 find my folder type f exec grep l needle text exec file grep text 这非常不方便 并且会输出不需要的文本 例如 mime 类型信息 还有更好
  • 如何从 ext2/ext3 文件系统上的稀疏文件中删除一些块

    当您写入稀疏文件时 ext2 ext3 文件系统会自动分配块 但是当我不再需要其中的某些块时 我发现没有办法做到这一点 感觉就像使用 malloc 而不使用 free 是否可以 释放 稀疏文件的某些块 如果是的话 怎么样 不要告诉我将其复制
  • bcrypt_lib.node:未定义符号:node_module_register

    Error home george Desktop myProject node modules bcrypt build Release bcrypt lib node undefined symbol node module regis
  • 使用curl复制本地文件[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 有没有办法用curl复制本地文件 我需要它作为cp命令的替代品 这有点奇怪 但我正在一个 cp 不可用的环境中工作 你可以说 curl o
  • 汇编语言中的全局_start是什么?

    这是我的汇编级代码 section text global start start mov eax 4 mov ebx 1 mov ecx mesg mov edx size int 0x80 exit mov eax 1 int 0x80
  • Linux环境下串口数据转换为TCP/IP

    我需要从Linux系统的串口获取数据并将其转换为TCP IP发送到服务器 这很难做到吗 我有一些基本的编程经验 但对 Linux 的经验不多 有没有开源应用程序可以做到这一点 在 Linux 中您不需要编写程序来执行此操作 只是pipe h
  • 你能在 MS Windows 上用 Python 将 stdin 作为文件打开吗?

    在 Linux 上 我使用 subbprocess Popen 来运行应用程序 该应用程序的命令行需要输入文件的路径 我了解到我可以将路径 dev stdin 传递到命令行 然后使用 Python 的 subproc stdin write
  • Shell 脚本对文件进行计数,然后删除最旧的文件

    我是 shell 脚本新手 所以我需要一些帮助 我有一个充满备份的目录 如果我有超过 10 个备份文件 我想删除最旧的文件 以便仅留下 10 个最新的备份文件 到目前为止 我知道如何计算文件数 这看起来很简单 但是如果计数超过 10 我该如
  • linux命令行:如何简单地将任意字符串输入管道?

    我正在寻找一个非常简单的技巧 假设文件中error txt 有一个很长的字符串 errorMessage key1 some message key2 message 2 由于它的格式不适合读者 如果我想在终端中以格式良好的形式查看它 我可
  • 将静态链接的 elf 二进制文件转换为动态链接的

    我有一个 elf 二进制文件 它已静态链接到 libc 我无权访问其 C 代码 我想使用 OpenOnload 库 它在用户空间中实现了套接字 因此与标准 libc 版本相比提供了更低的延迟 OpenOnload 实现标准套接字 api 并

随机推荐

  • 项目1在线交流平台-6.Elasticsearch分布式搜索引擎-3.ES结合Kafka应用-开发社区搜索功能

    文章目录 功能需求一 Service层处理操作ES服务器的数据二 Controller层处理帖子添加和评论事件请求1 添加帖子时 触发事件 发布消息2 添加评论时 触发发帖事件 发布消息 三 kafka消费者订阅消息并提交到ES服务器四 处
  • 项目1在线交流平台-7.构建安全高效的企业服务-2.使用Security自定义社区网页认证与授权

    文章目录 功能需求一 废弃登录检查的拦截器二 授权配置1 导包2 Security配置2 1 96 WebSecurity 96 2 2 96 HttpSecurity 96 96 http authorizeRequests 96 96
  • 项目1在线交流平台-7.构建安全高效的企业服务-3. Security整合Kafka,ES,Thymeleaf实例-对帖子置顶、加精、删除

    文章目录 功能需求一 置顶 加精 删除帖子功能的实现1 dao层处理数据接口定义sal语句定义 2 service层业务处理3 Controller层处理按钮事件异步请求异步请求及kafka发送消息删除帖子 消费消息 4 模板页面和js文件
  • JVM虚拟机学习笔记之-5. 字节码执行引擎

    文章目录 1 字节码执行引擎工作概览2 栈帧2 1 栈帧概述和概念结构2 2 局部变量表2 2 1 局部变量表分配规则2 2 2 局部变量表回收机制 2 3 操作数栈2 4 动态连接2 5 方法返回地址2 6 方法调用 3 分派3 1 静态
  • leetcode刷题记录总结-7.递归回溯算法(进行中)

    文章目录 零 回溯算法理论总览什么是回溯法回溯法的效率回溯法解决的问题如何理解回溯法回溯法模板 一 组合问题 77 组合 https leetcode cn problems combinations 题解递归实现组合型枚举 xff1a 每
  • Linux服务器开发-1. Linux系统编程复习

    文章目录 1 GCC1 1 gcc概念1 2 编程语言的发展1 3 gcc工作流程1 4 常见指令选项预处理 xff1a 指令 E xff1a 编译 xff1a 指令 S汇编 xff1a 指令 c链接 xff1a 指令 o指定宏 xff1a
  • 8皇后问题

    span class hljs keyword bool span check span class hljs stl container span class hljs built in vector span lt span class
  • Linux服务器开发-2. Linux多进程开发

    文章目录 1 进程概述1 1 程序概览1 2 进程概念1 3 单道 多道程序设计1 4 时间片1 5 并行与并发1 6 进程控制块 xff08 PCB xff09 2 进程的状态转换2 1 进程的状态2 2 进程相关命令查看进程实时显示进程
  • CMakeLists.txt 构建 Qt工程

    源码路径下包括 xff1a main cpp test cpp test h test ui test qrc cmake minimum required VERSION 3 1 0 project test SET CMAKE INCL
  • 【技术】RTK定位是什么?危化安全生产必看

    RTK定位技术是建立在流动站与基准站误差非常类似的基础上的 xff0c 它利用GPS载波相位观测值进行实时动态定位 RTK定位广受危化行业欢迎 xff0c 成为危化安全生产的热门技术选项 伴随着经济的高速发展 xff0c 信息技术取得了进一
  • GPS/RTK高精度定位系统有什么优势?

    GPS RTK高精度定位系统能提供厘米级 毫米级高精度位置服务 xff0c 逐渐成为智能社会高精度定位的趋势和理想选择 GPS RTK高精度定位系统的出现是信息化时代发展的产物 从移动互联到物联网 xff0c 位置是一个基础的不可或缺的信息
  • 【分享】高精度RTK定位解决方案

    高精度RTK定位系统采用高精度定位标签 xff0c 通过计算机技术 地理信息技术 移动定位技术 通信技术 网络技术 xff0c 为生产现场作业人员配发定位终端 xff0c 实时追踪其位置信息进行相关管控 xff0c 为其活动提供安全技术保障
  • 【分享】5G+北斗RTK高精度人员定位解决方案

    5G 43 北斗RTK高精度定位系统旨在通过5G网络实时提供亚米级 厘米级 毫米级高精度定位服务 xff0c 构建全天候 全天时 全地理的精准时空服务体系 伴随着信息技术日新月异的发展 xff0c 各类 智慧 顺势而出 xff0c 智慧城市
  • 5G+北斗RTK定位:高精度定位技术发展更进一步

    5G 43 北斗RTK定位采用5G定位与北斗RTK定位技术 xff0c 在信号 信息 设施 应用等层面深度融合 xff0c 5G自身可实现亚米级的定位能力与北斗形成信号覆盖互补 xff0c 实现从室内到室外无缝隙衔接与定位 5G通信技术的到
  • 室外定位:高精度北斗RTK定位技术

    北斗RTK定位技术 xff0c 也称北斗差分定位技术 xff0c 利用我国自主研发的北斗卫星定位系统实现精确定位功能 定位精度可根据需要 xff0c 通过选择不同精度的人员定位终端来实现 在科技强国的战略驱动下 xff0c 北斗RTK定位技
  • 【高精度定位】RTK定位与RTD定位知识科普

    高精度定位一般指亚米级别或厘米级别的定位 xff0c 常见的室内有蓝牙AoA和UWB两种技术 xff0c 室外有北斗地基增强技术 xff0c 这些技术都是采用算法进行定位 工业4 0时代 xff0c 在资源和环境约束不断强化的背景下 xff
  • curl http或https上传下载

    curl的使用 注意如果是https请求需要带上ssl的库和curl库如下图 上传文件 回调函数 span class token keyword static span size t span class token function h
  • 层次遍历构建二叉树

    span class hljs keyword struct span TreeNode span class hljs keyword int span val span class hljs keyword struct span Tr
  • Jetson tx2 使用 jetpack 4.3刷机全过程

    1 首先准备一台安装有ubuntu 18 04 ubuntu16 04 系统的主机 xff08 host也就是笔记本 xff09 2 在nvidia官网注册一个nvidia的账号用于下载jetpack 4 3时使用 xff08 刷机过程中需
  • 2020/2/21 Linux Socket编程 高级篇——广播

    广播 xff1a 实现一对多的通信 SO BROADCAST选项 它控制了UDP套接字是否能发广播数据报 xff0c 选项类型是int xff0c 非零表示 是 只有UDP能用 xff0c TCP不能 如果是一个广播地址 xff0c 但SO