道一站 道一站
首页
  • 历史文明
  • 自我管理
  • 经济金融
  • 未来科技
  • 李笑来
  • 股票
  • 期货
  • 期权
  • 外盘
  • 量化
  • 区块
  • 认知
  • 数理
  • 收藏
  • 前端

    • JavaScript
    • TypeScript
  • 页面

    • HTML
    • CSS
  • 编程

    • C++
    • Python
    • Shell
    • 小程序开发
  • 笔记

    • 《Git》
    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
  • 技术文档
  • Linux
  • Docker
  • GitHub
  • 博客搭建
  • 效用工具
  • 周易基础
  • 奇门遁甲
  • 收藏资源
  • 学习方法
  • 实用技巧
  • 友情链接
  • 分类
  • 标签
  • 归档
关于

daotoyi

静水流深
首页
  • 历史文明
  • 自我管理
  • 经济金融
  • 未来科技
  • 李笑来
  • 股票
  • 期货
  • 期权
  • 外盘
  • 量化
  • 区块
  • 认知
  • 数理
  • 收藏
  • 前端

    • JavaScript
    • TypeScript
  • 页面

    • HTML
    • CSS
  • 编程

    • C++
    • Python
    • Shell
    • 小程序开发
  • 笔记

    • 《Git》
    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
  • 技术文档
  • Linux
  • Docker
  • GitHub
  • 博客搭建
  • 效用工具
  • 周易基础
  • 奇门遁甲
  • 收藏资源
  • 学习方法
  • 实用技巧
  • 友情链接
  • 分类
  • 标签
  • 归档
关于
  • 技术文档

  • Linux

    • 127001和0000地址的区别
    • arp_route
    • CMD_ip_ifconfig
    • IP与子网掩码的关系
      • libc,glibc和libc关系
      • Linux 路由表详解及 route 命令详解
      • Linux 系统中成功恢复已删除的文件
      • Linux_boot
      • Linux_chroot
      • Linux_chroot_RecoveryPass
      • Linux_chroot_SSHlogin
      • Linux_cmd_echo
      • LInux_cmd_sed
      • Linux_FTP
      • Linux_ldconfig_PATH
      • Linux_locale
      • Linux_Login_Repeat
      • d_faillock
      • Linux_SSH
      • Linux_systemctl_systemd
      • Linux_systemd_serivice
      • Linux_Terminal_HotKey
      • Linux-cmd-tar
      • LinuxTerminalHotkey
      • linux后台运行、挂起、恢复进程相关命令
      • Linux认证
      • Net
      • Nginx 常用配置清单
      • Nginx通识
      • perf分析unixbench性能
      • ping请求错误分析
      • Remote_SSH&X11(Manjaro)
      • Remote_XDMCP(Redhat6)
      • Sql Or NoSql,看完这一篇你就懂了
      • systemd
      • Unicode_UTF
      • URL
      • 开源协议
      • 线程、进程、多线程、多进程和多任务
      • 正向代理与反向代理
    • Docker

    • GitHub

    • 博客搭建

    • 效用工具

    • 技术
    • Linux
    daotoyi
    2022-04-30
    目录

    IP与子网掩码的关系

    [toc]

    # 详解IP与子网掩码的关系 (opens new window)

    # IP地址

    IP地址是一个32位的二进制数,通常被分割为4个“8位二进制数”。

    # IP地址分类

    # 二进制表示
    地址类型 二进制地址范围
    A类地址 00000000 00000000 00000000 00000001 - 01111111 11111111 11111111 11111111
    B类地址 10000000 00000000 00000000 00000000 - 10111111 11111111 11111111 11111111
    C类地址 11000000 00000000 00000000 00000000 - 11011111 11111111 11111111 11111111
    D类地址 11100000 00000000 00000000 00000000 - 11101111 11111111 11111111 11111111
    E类地址 11110000 00000000 00000000 00000000 - 11110111 11111111 11111111 11111111
    # 十进制表示
    地址类型 十进制地址范围 特征
    A类地址 1.0.0.0 - 127.255.255.255 第1个8位中的第1位始终为0
    B类地址 128.0.0.0 - 191.255.255.255 第1个8位中的第1、2位始终为10
    C类地址 192.0.0.0 - 223.255.255.255 第1个8位中的第1、2、3位始终为110
    D类地址 224.0.0.0 - 239.255.255.255 第1个8位中的第1、2、3、4位始终为1110
    E类地址 240.0.0.0 - 247.255.255.255 第1个8位中的第1、2、3、4、5位始终为11110

    特殊:

    • D类地址:用于组播
    • E类地址:用于科研保留

    注意:

    A类地址 从1.0.0.0 到126.255.255.255 , 其中127.x.x.x段地址空间是被保留的回环地址

    # IP地址构成

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

    地址类型 网络地址 主机地址
    A类地址 前8位 后24位
    B类地址 前16位 后16位
    C类地址 前24位 后8位
    # 网络地址

    网络地址(Network address)由ip和子网掩码按位与得出,只有网络地址相同的ip才在同一子网内

    网络地址是子网中最小的地址

    计算方式:网络地址 = IP & 子网掩码

    # 主机地址

    主机(IP)地址即该网段中 主机的地址编号

    # 广播地址

    广播地址(Broadcast Address)是专门用于同时向网络中所有工作站进行发送的一个地址

    广播地址是该子网主机地址全1的地址,即子网中最大的地址

    计算方式:广播地址 = (~子网掩码) | 网络地址

    # 子网掩码

    子网掩码 (Subnet mask)是一个32位的2进制数 ,它必须结合IP地址一起使用。

    子网掩码只有一个作用,就是==将某个IP地址划分成“网络地址”和“主机地址”两部分==。

    # 缩写

    有时候我们会看到192.168.1.123/24这样的表示方法,其中/24就是子网掩码255.255.255.0的缩写

    计算方式:二进制子网掩码中1的个数

    # 默认子网掩码

    网络类型 默认子网掩码 缩写
    A类地址 255.0.0.0 /8
    B类地址 255.255.0.0 /16
    C类地址 255.255.255.0 /24

    # 子网容量计算

    # 子网数

    根据子网掩码可划分的最大子网数

    计算方式:子网数 = 2^(实际子网掩码缩写 - 相应网络类型默认子网掩码缩写)

    # 最大主机数

    计算方式:最大主机数 = 2^(主机地址的位数)

    # 可用主机数

    计算方式:可用主机数 = 最大主机数 - 2

    因为一个子网中主机号全为0的是网络地址,全为1的是广播地址,所以要 -2

    # 代码计算示例

    下面代码采用C语言编写(c11)

    #include<stdio.h>
    #define uchar unsigned char
    #define uint unsigned int
    
    uchar bin1num(uchar num);
    
    void main() {
    uchar IP[] = {192,168,1,53};
    uchar SubnetMask[] = {255,255,255,224};
    
    
    uchar DefaultSubnetMaskAbbr;
    if(IP[0]<224) DefaultSubnetMaskAbbr = 24;
    if(IP[0]<192) DefaultSubnetMaskAbbr = 16;
    if(IP[0]<128) DefaultSubnetMaskAbbr = 8;
    
    uchar SubnetMaskAbbr = bin1num(SubnetMask[0])+bin1num(SubnetMask[1])+bin1num(SubnetMask[2])+bin1num(SubnetMask[3]);
    
    uchar Network[] = {IP[0] & SubnetMask[0], IP[1] & SubnetMask[1], IP[2] & SubnetMask[2], IP[3] & SubnetMask[3]};
    
    uchar Broadcast[] = {(~SubnetMask[0])|Network[0], (~SubnetMask[1])|Network[1], (~SubnetMask[2])|Network[2], (~SubnetMask[3])|Network[3]};
    
    uint SubnetNum = 1;
    for(int i=0; i<SubnetMaskAbbr-DefaultSubnetMaskAbbr; i++) {
    SubnetNum *=2;
    }
    
    uint HostNum = 1;
    for(int i=0; i<32-SubnetMaskAbbr; i++) {
    HostNum *=2;
    }
    
    
    printf("ip地址:%d.%d.%d.%d\n", IP[0], IP[1], IP[2], IP[3]);
    printf("子网掩码:%d.%d.%d.%d\n", SubnetMask[0], SubnetMask[1], SubnetMask[2], SubnetMask[3]);
    if(DefaultSubnetMaskAbbr==8) printf("网络类型:A类\n");
    if(DefaultSubnetMaskAbbr==16) printf("网络类型:B类\n");
    if(DefaultSubnetMaskAbbr==24) printf("网络类型:C类\n");
    printf("子网掩码缩写:%d\n", SubnetMaskAbbr);
    printf("网络地址:%d.%d.%d.%d\n", Network[0], Network[1], Network[2], Network[3]);
    printf("广播地址:%d.%d.%d.%d\n", Broadcast[0], Broadcast[1], Broadcast[2], Broadcast[3]);
    printf("子网数:%d\n", SubnetNum);
    printf("最大主机数:%d\n", HostNum);
    printf("可用主机数:%d\n", HostNum-2);
    }
    
    
    uchar bin1num(uchar num) {
    uchar Divisor[] = {128,64,32,16,8,4,2,1};
    uchar Remainder = num; 
    uchar ret;
    for(ret=0; ret<10; ret++) {
    if(Remainder>0) Remainder = Remainder%Divisor[ret];
    else break;
    }
    return ret;
    }
    
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    上次更新: 2023/10/10, 14:48:21
    CMD_ip_ifconfig
    libc,glibc和libc关系

    ← CMD_ip_ifconfig libc,glibc和libc关系→

    最近更新
    01
    置身事内
    10-10
    02
    基础知识|八卦五行天干地支
    10-08
    03
    基础知识|推算年月日时的干支
    10-08
    更多文章>
    Theme by Vdoing | Copyright © 2021-2023 Daotoyi | MIT License
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式