• IP 地址详解(IPv4、IPv6)


    1 概述

    IP 地址
    全称:Internet Protocol Address,互联网协议地址
    地址格式:‘网络 . 主机’,32 个 0 和 1 组成
    分类:IPv4 和 IPv6

    2 IP 地址

    2.1 IPv4 表示法

    • 点分十进制:将整个 32 位 IP 地址,平均划分为 4 个字节(1 个字节 = 8 位),每个字节用一个十进制数表示,中间用圆点分隔。
      在这里插入图片描述

    点分十进制好处:方便人记忆。
    二进制,电脑好识别;十进制,人好识别

    2.2 默认地址分类策略:A、B、C、D、E 类

    • 地址格式:采用 “网络 . 主机” 的形式,其中
      • 网络:网络的地址编码
      • 主机:网络中一个主机的地址编码
    • IP 地址分类:总共有以下 5 类。其中 A、B、C 类是常用地址,可通过固定前缀区分
      • A 类地址:前缀为 0(1位) + 网络地址(7位)+ 主机地址(24位)= 32 位
      • B 类地址:前缀为 10(2位) + 网络地址(14位)+ 主机地址(16位)= 32 位
      • C 类地址:前缀为 110(3位) + 网络地址(21位)+ 主机地址(8位)= 32 位
        在这里插入图片描述

    2.3 IPv4 子网掩码

    • 子网掩码:Subnet Mask
      • 组成:子网掩码和 IP 地址一样,也是由一个 32 位的二进制数组成
      • 注意:子网掩码不能单独存在,必须结合 IP 地址一起使用
    • 作用:结合 IP 地址,划分 网络号(网络地址)主机号(主机地址)
      • 原理:将 子网掩码IP 地址 按位进行 逻辑"与(AND)" 运算,得到 IP 地址的 网络号,余下部分就是 主机号(与运算:有 1 为 1,全 0 为 0)
      • 举例:由 IP 地址为 192.168.10.11,子网掩码为 255.255.255.0,可知:IP 地址属于 192.168.10.0 这个网络,其主机号为 11,即这个网络中编号为 11 的主机。

    思考:既然 IP 地址可用 ABC类进行区分 网络地址 和 主机地址,为什么还要 子网掩码?
    结论:进行子网划分,避免 IP 地址的浪费,灵活使用 IP 地址。

    理解:如果 IP 地址全部按照标准的 ABC 类地址使用,那么子网掩码确实是多余的,因为 A 类的网络号是第一个字节(默认子网掩码:255.0.0.0),B 类的网络号是前两个字节(默认子网掩码:255.255.0.0),C 类的网络号是前三个字节(默认子网掩码:255.255.255.0)。
    然而,用这种方式使用 IP 地址是非常不灵活的。比如:现在要划分 1000 台主机,如果用 C 类地址划分,至少要 4 个 C 类地址(4 * 254 = 1016),需要的 C 类地址太多了;如果用 B 类地址划分,虽然只需要 1 个 B类地址(1 * 65534),但是浪费的地址太多了(65534 - 1000)。
    此时,最好做法是 进行子网划分。1000 台主机,接近 1024 = 2 10 1024 = 2^{10} 1024=210,可用 10 个主机号容纳,划分后的 IP 地址格式:x.x.x.x/22,而这是 ABC 类地址所无法做到的。
    具体详见博客:https://blog.csdn.net/qq_34745941/article/details/128294147

    2.4 IPv4 地址范围及可容纳主机数量

    分类可容纳主机数IP 地址范围私有 IP 地址范围默认子网掩码(简写)
    A2^24 - 2 = 167772140.0.0.0 ~ 127.255.255.25510.0.0.0 ~ 10.255.255.255255.0.0.0(/8)
    B2^16 - 2 = 65534128.0.0.0 ~ 191.255.255.255172.16.0.0 ~ 172.31.255.255255.255.0.0(/16)
    C2^8 - 2 = 254192.0.0.0 ~ 233.255.255.255192.168.0.0 ~ 192.168.255.255255.255.255.0 (/24)

    主机数 为啥要 减少 2 ?因为:在每个网络中,有 2 个 IP 地址不能被分配,留作他用,如:
    主机号全 0:指定某个网络本身
    主机号全 1:指定某个网络的所有主机(用于广播)

    IP 地址范围:分类号 + (最小:网络位全为 0,最大:网络位全为 1),例如
    A 类:分类号 = 0,最小 00000000 = 0,最大 01111111 = 127
    B 类:分类号 = 10,最小 10000000 = 128,最大 10111111 = 191
    C 类:分类号 = 110,最小 11000000 = 192,最大 11011111 = 223
    其它:0 = 00000000(8 个 0),255 = 11111111(8 个 1)

    2.5 IPv6 表示法

    • IPv6 的地址长度为 128 位,是 IPv4 地址长度的 4 倍。于是 IPv4 点分十进制格式不再适用,采用十六进制表示,有 3 种表示方法
    • 一、冒分十六进制表示法
      • 格式:X:X:X:X:X:X:X:X,每个 X 表示 16 个二进制数(128 = 16 * 8)
      • 注意:每个 X 的 前导 0 是可以省略的,例如:
      • 2001 : 0DB8 : 0000 : 0023 : 0008 : 0800 : 200C : 417A →
      • 2001 : DB8 : 0 : 23 : 8 : 800 : 200C : 417A
    • 二、0 位压缩表示法
      • 连续很长 的一段 0 压缩为 "::"。且为保证地址解析的唯一性,"::" 只能 出现一次,例如:
      • FF01 : 0 : 0 : 0 : 0 : 0 : 0 : 1101 → FF01 :: 1101
      • 0 : 0 : 0 : 0 : 0 : 0 : 0 : 1 → ::1
      • 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0::
    • 三、内嵌 IPv4 地址表示法
      • 为了实现 IPv4-IPv6 互通,IPv4 地址会嵌入 IPv6 地址中,前 96 位采用 冒分十六进制 表示最后 32 位 依然采用 IPv4 的 点分十进制
      • 格式:X:X:X:X:X:X:d.d.d.d,例如:
      • ::192.168.0.1::FFFF:192.168.0.1

    3 扩展

    3.1 网工软考真题

    【2018上半年 - 52】以下地址中用于组播的是()。
    A.10.1.205.0
    B.192.168.0.7
    C.202.105.107.1
    D.224.1.210.5

    参考答案:D
    组播地址属于 d 类地址,范围:224.0.0.0 ~ 239.255.255.255

    【2018上半年 - 53】下列IP地址中,不能作为源地址的是()。
    A.0.0.0.0
    B.127.0.0.1
    C.190.255.255.255/24
    D.192.168.0.1/24

    参考答案:C
    C选项为广播地址,广播地址只能做目标地址,不能作为源地址。

    【2017下半年 - 51】IPv4的D类地址是组播地址, 224.0.0.1表示()构成的组播组。
    A.DHCP服务器
    B.RIPv2路由器
    C.本地子网中的所有主机
    D.OSPF路由器

    参考答案:C
    224.0.0.1 特殊的组播地址,代表所有主机地址。

    【2017上半年 - 60,61】IPv6链路本地单播地址的前缀为(59),可聚集全球单播地址的前缀为(60)
    (60) A.001
      B.1111111010
      C.1111111011
      D.1111 1111
    (61) A.001
      B.1111111010
      C.1111111011
      D.1111 1111

    参考答案:60=B,61=A
    链路本地单播地址的格式前缀为 1111 1110 10,即 fe80::/64;其后是 64 位的接口id。
    ipv6 的可聚合全球单播地址是可以在全球范围内进行路由转发的 ipv6 地址的全球路由选择前缀:分配给各个公司和机构,用于路由器的路由选择。相当于 ipv4 地址中的网络号。主要这类地址的前三位是 001。

  • 相关阅读:
    【重拾Java系列】—— 八大常用类
    python LeetCode 88 刷题记录
    Flink Paimon0.8 构建 ods层、dw层,
    react中在js文件里定义的变量,如何在less文件里去使用该变量
    (vue)树文件夹点击,最后一层标记
    C语言学习笔记(十二)
    Canal+Kafka实现MySQL与Redis数据同步(一)
    Elasticsearch进阶使用-动态模版
    利用Python分析金融交易中的滚动Z值
    嵌入式-Linux基础操作
  • 原文地址:https://blog.csdn.net/qq_34745941/article/details/127959294