一文解析网络中的 IP 唯一性
家庭或公司服务器局域网组网过程中,一个绕不开的话题,就是配置服务器(Server)的网络接口卡(Network Interface Card,网卡)或网络适配器(Network Adapter)的 TCI/IP 信息,也就是我们常说的服务器网络配置。
了解互联网中 IP 地址的格式、公有、私有,以及 IP 属地等相关概念是必要的。
更多系列博文请参考:
如果文中有表述不正确的地方,望各位大佬不吝指正~~~
初始 IP 地址
IP 地址(Internet Protocol Address,网际协议地址),用于在 TCP/IP 通讯协议中标记每台网络设备(计算机/服务器)的地址。
为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异,从而实现进一步互联。
| ================================================== Split Line =============================================== |
IP 地址格式
IP 地址(IPV4),本质上是 32 位(bit)的二进制数值。为了便于记忆和使用,通常使用 “点式十进制” 来表示,如 192.168.1.2 等。
也就是说,↓↓↓↓↓↓ IP 地址有两种表示形式 ↓↓↓↓↓↓
- 二进制
- 点式十进制
[1] >>> 二进制
32 bit IP 地址的二进制,被分为 4 个 8 位域:
1 | 11000000 10101000 00000001 00000010 |
[2] >>> 点式十进制
点式十进制,是将二进制中的 4 个位域分别转换为十进制(故每个位域可取的最大整数为 255
)。
故,理论上,IPV4 的 IP 资源池容量为:255×255×255×255 ≈ 42 亿
上面二进制 IP 地址所对应的,点式十进制为:
1 | 192.168.1.2 |
IP 地址分类
事实上,每个 每个 IP 地址又分为两部分:
- 网络 ID(网络号部分):用来标识主机所属的网段;
- 主机 ID(主机号部分):用来标识该网段中主机的地址。
1 | IP-address ::= { <Network-number>, <Host-number> } |
同一个物理网络上(同一网段)的所有主机,都使用同一个网络 ID(网络号部分相同)!!!
| ================================================== Split Line =============================================== |
为了适应不同规模(容量)大小的网络,IP 地址被分为:A | B | C | D | E 5 类。
其中,A、B、C(单播地址(unicast),用于一对一通信)由 InternetNIC(Internet Network Information Center,因特网信息中心)在全球范围内统一分配,D、E 类被划为特殊地址。
A 类 IP 地址
一个 A 类 IP 地址,由 1 字节(8 bit)的网络地址和 3 字节(24 bit)主机地址组成。
其中,网络地址的最高位必须是 “0”,这就 “可能” 意味着 A 类 IP 地址的范围(2^7-1=127
):
1 | 0.0.0.0 ~ 127.255.255.255 |
前面说 “可能”,是因为其中某些网络(网段)被用作特殊用途。例如:0.0.0.0
&& 127
网段。具体释义见后文【0.0.0.0/127.0.0.0】中描述。
也就是说,A 类网络有 126 个(1~126
),表示的 IP 地址范围为:
1 | 1.0.0.0 ~ 126.255.255.255 |
A 类 IP 地址的子网掩码为 255.0.0.0
,支持 126 个网络,每个网络支持的最大主机数为 256^3 - 2 = 16777214
台(千万)。
| ================================================== Split Line =============================================== |
B 类 IP 地址
一个 B 类 IP 地址,由 2 字节(16 bit)的网络地址和 2 字节(16 bit)主机地址组成。
其中,网络地址的最高位必须是 “10”,这就意味着 B 类 IP 地址的范围(2^6-1=63
):
1 | # 191 = 128 + 63 |
B 类 IP 地址的子网掩码为 255.255.0.0
,这里由于网络 ID 占两个字节,B 类网络有 16384 个((63+1)×256
),每个网络支持的最大主机数为 256^2 - 2 = 65534
台(万)。
| ================================================== Split Line =============================================== |
C 类 IP 地址
一个 C 类 IP 地址,由 3 字节(24 bit)的网络地址和 1 字节(8 bit)主机地址组成。
其中,网络地址的最高位必须是 “110”,这就意味着 C 类 IP 地址的范围(2^5-1=31
):
1 | # 233 = 192 + 31 |
C 类 IP 地址的子网掩码为 255.255.255.0
,这里由于网络 ID 占三个字节,C 类网络有 2,097,152((31+1)×256×256
)个(百万),每个网络支持的最大主机数为 256 - 2 = 254
台。
C 类网络,适用于小规模的局域网络~~~
| ================================================== Split Line =============================================== |
D、E 类被划为特殊地址:
D 类 IP 地址
相较于 A、B、C(单播地址(unicast),用于一对一通信),D 类 IP 地址用于多点广播(Multicast),用来一次寻址一组计算机,它标识共享同一协议的一组计算机。
D 类 IP 地址,最高位必须是 “1110”,其 IP 地址的范围(2^4-1=15
):
1 | # 239 = 224 + 15 |
E 类 IP 地址
E 类 IP 地址是以 “1111” 开始,为将来使用保留。
E 类 IP 地址的范围(2^3-1=7
):
1 | # 247 = 240 + 7 |
| ================================================== Split Line =============================================== |
上面介绍了 IPV4 的 IP 地址格式,你可以发现其地址对于全球来说是短缺的。而新一代的 IPv6 采用 128 位(bit)地址长度,明显地扩大了地址空间。
0.0.0.0/127.0.0.0
上面我们知道,IP 地址根据网络规模大小分为 5 类(Network-ID 所占的字节长度 && 其前几位):
- A 类 IP 地址:第一位数字以 1-126 开头
- B 类 IP 地址:第一位数字以 128-191 开头
- C 类 IP 地址:第一位数字以 192-223 开头,适用于小型局域网
- D 类 IP 地址:第一位数字以 224-239 开头,只用于组播
- E 类 IP 地址:第一位数字以 240-254 开头,保留用于实验和开发
其中,A、B、C 三类地址为单播地址(unicast),用于一对一通信,是最常用的。
我们提到过,这些网络中的某些网络(网段)被用作特殊用途。例如:0.0.0.0
&& 127
网段。
| ================================================== Split Line =============================================== |
下面分别来看其说明和用途:
[1] >>> 0.0.0.0
IPV4 中,0.0.0.0
地址被用于表示一个无效的,或者未知的目标。
↓↓↓↓↓↓ 用途总结 ↓↓↓↓↓↓
- 在服务器中,0.0.0.0 指的是本机上的所有 IPV4 地址。如果一个主机有两个IP地址,192.168.1.1 && 10.1.2.1,并且该主机上的一个服务监听的地址是 0.0.0.0,那么通过两个 IP 地址都能够访问该服务。
- 当一台主机还没有被分配一个 IP 地址的时候(DHCP 分配 IP 地址的时候),用于表示主机本身。
- 在路由中,用作默认路由,表示 ”任意 IPV4 主机”。
| ================================================== Split Line =============================================== |
[2] >>> 127.0.0.1
127.0.0.1
属于 {127,}
网段集合中的一个,而所有网络号为 127 的地址都被称之为回环地址,留用作回路及诊断功能。
回环地址:所有发往该类地址的数据包都应该被 loop back。
↓↓↓↓↓↓ 用途总结 ↓↓↓↓↓↓
- 回环测试:通过使用
ping 127.0.0.1
测试某台机器上的网络设备,操作系统或者 TCP/IP 实现是否工作正常。 - 大部分 Web 容器测试的时候绑定的本机地址。
| ================================================== Split Line =============================================== |
[3] >>> localhost
相比 127.0.0.1,localhost
具有更多的意义(域名,非 IP)。
↓↓↓↓↓↓ localhost == 127.0.0.1?!! ↓↓↓↓↓↓
这是由于,大多数系统上都将 localhost 域名指向了 127.0.0.1 这个地址(域名/主机名映射)。
事实上,localhost 域名,用于指代 this computer 或者 this host,可以用它来获取运行在本机上的网络服务。
在大多数系统中,localhost 被指向了 >>> IPV4 的 127.0.0.1;以及 IPV6 的 ::1
1 | 127.0.0.1 localhost |
所以,在使用的时候要注意确认 IPV4 还是 IPV6。
IP 地址信息
通常来说,一个完整的 IP 地址信息应该包括:
- IP Address:IP 地址
- NETMASK:子网页码
- GATEWAY:默认网关
- DNS:DNS 解析服务器
只有当它们各司其职、协同工作时,我们才可以访问 Internet,并被 Internet 中的其它计算机所访问。需要注意的是,采用静态 IP 地址(真 IP)接入 Internet 时,ISP 应当为用户提供全部 IP 地址信息。
IP Address
企业网络使用的合法公有 IP 地址由提供网络服务供应商(ISP)分配,私有 IP 地址则可以由网络管理员自由分配。
需要注意的是,网络内部所有计算机的 IP 地址都不能相同,否则会发生 IP 地址冲突,导致网络通讯失败。
NETMASK
子网掩码(NETMASK),是与 IP 地址结合使用的一种技术。
NETMASK 主要作用有两个:
- 确定 IP 地址中的网络号和主机号;
- 用于将一个大的 IP 网络划分为若干小的子网络(限制某网段的 IP 资源池)。
子网掩码中为 1
的部分定位网络号(Network ID);为 0
的部分定位主机号(Host ID)。NETMASK & IP
,与 & 操作之后变为 0 的是主机号。
👇👇👇 NETMASK 用途 👇👇👇
既然 NETMASK 可以决定 IP 地址的哪一部分是网络号,而其又可以进行人工设定,故可以通过修改子网掩码(NETMASK)的方式来改变原有地址分类中规定的网络号和主机号。
你可以根据实际需要:
↓↓↓↓↓↓ 增加网络数量,减少每个网络中的主机容量 ↓↓↓↓↓↓
- 使用 B/C IP 类地址的子网掩码(255.255.0.0/255.255.255.0),将原有的 A 类 IP 地址的网络号由一个字节改变为二个或三个字节;
- 使用 C 类 IP 地址的子网掩码(255.255.255.0),将原有 B 类 IP 地址的网络号由二个字节改变为三个字节。
↓↓↓↓↓↓ 减少网络数量,增加每个网络中的主机容量 ↓↓↓↓↓↓
使用 B 类 IP 地址的子网掩码(255.255.0.0),将 C 类 IP 地址的网络号由三个字节改变为二个字节。
| ================================================== Split Line =============================================== |
👇👇👇 变长子网掩码 👇👇👇
NETMASK 中为 1 的部分可以定义为网络号,那么就可以通过加长子网掩码的方式,将掩码中原本为 0 的最高位部分修改为 1,从而使得本来应当属于主机号的部分改变成为网络号,以达到划分子网的目的。
由此可见,子网掩码的位数越多,所取得子网的数量也就越多,但每个子网中所容纳的主机数也就越少,同时损失的IP资源也就越多。
↓↓↓↓↓↓ 192.168.1.10/27 ↓↓↓↓↓↓
有时你会看到这样的 IP:192.168.1.10/27
形式。
这就是变长子网掩码的应用,192.168.1.10/27 换一种写法:192.168.1.10/255.255.255.224
。
也就是说,斜杠后边表示子网掩码(NETMASK),27
表示 NETMASK 中连续为 1 的位数(不可间隔)。
你可以通过在线工具 | >>> IP 地址计算器 <<< | 来获取 IP(192.168.1.10/27
)的 网段 && NETMASK && BROADCAST 等信息:
GATEWAY
默认网关(GATEWAY),是指一台主机如果找不到可用的网关,就把数据包发送给默认指定的网关,由这个网关来处理数据包。
从一个网络向另一个网络发送信息,也必须经过一道“关口”,这道关口就是网关。只有设置好网关默认 IP 地址,TCP/IP 协议才能实现不同网络之间的相互通信。
对于企业网络而言,网关 IP 地址是什么呢?如果采用合法厂地址,该网关由 ISP 提供;如果采用私有 IP 地址,该网关就是代理服务器或路由器内部端口的 IP 地址。
| ================================================== Split Line =============================================== |
DNS
DNS 服务,用于将用户的域名请求转换为 IP 地址。
企业网络没有提供 DNS 服务,DNS 服务器的 IP 地址应当是 ISP 的 DNS 服务器。如果企业网络自己提供 DNS 服务,那么 DNS 服务器的 IP 地址就是内部 DNS 服务器的IP地址。
公有/私有地址
企业中网络,通常会被分为:外网 和 内网(隔离于外网,以实现网络安全,防止信息泄露)。内网中有 内网 IP 地址,而外网则有 外网公共 IP 地址。
更专业的说法是 >>> 外网公共 IP 地址 = 公有地址;内网 IP 地址 = 私有地址。
- 公有地址(Public address):由 Inter NIC(Internet Network Information Center,因特网信息中心)负责分配给提出申请的组织机构,通过它直接访问因特网。
- 私有地址(Private address):属于非注册地址,专门为组织机构内部使用,由网络管理员分配。
如何理解 IP 地址唯一性
公有地址(外网公共 IP 地址),是一个相对较大的概念,或者可以说它对地址的描述并没有精确到某个具体位置的设备。
以咱们国家为例,比如三大网络运营商申请到的公有 IP 地址只具体到亚洲的中国,然后这个公有地址经过三大运营商的层层分发(CN –> 省 –> 市),最终具体到我们每户所在的小区(街道、镇,乡等)。
对于每户人家向运营商购买的宽带服务所建立的一个小型的局域网(通过路由器将家里的所有设备连接到这个局域网上面)来说,从相对性来说,这个局域网内的 IP 地址可以称为 ”私有地址(内网 IP 地址)“,而这个局域网外的网络可以称为外网。每户人家的局域网内部的设备通过局域网向外部网络发送的数据经由路由器转发的同时,内网 IP 地址会经路由器层层 IP 映射再转发,最终到达本地运营商的端口映射成为外网公共 IP 地址(这个公有地址你可其它人共享使用,非独有)。
可以看出,私有地址(内网 IP 地址)是给局域网内部的设备标识身份的身份码,在局域网内部是唯一的,但放在整个国家的互联网上来说,其不唯一。有可能 A 户人家的局域网内的某台设备的内网 IP 地址就与 B 户人家的局域网内的某台设备的内网 IP 地址相同。对于 公有地址(外网公共 IP 地址),其放在整个国家的互联网上来说是唯一的。
| ================================================== Split Line =============================================== |
👇👇👇 结合 IP 地址分类进行理解 👇👇👇
前面我们给出了 A、B、C 三类网络地址的网段:
- A 类 IP 地址:第一位数字以 1-126 开头
- B 类 IP 地址:第一位数字以 128-191 开头
- C 类 IP 地址:第一位数字以 192-223 开头,适用于小型局域网。
事实上,网络中并不是所有的网络地址都可用于公有地址:
私有 IP 地址段:
1 | A 类:10.0.0.0 ~ 10.255.255.255 |
公网 IP 地址段:
1 | # A 类:1 ~ 126 |
理论上,IPV4 中有 255×255×255×255
约 42 亿多个公有 IP,但除去私有网段、网络地址、广播地址、保留网段、本地环回 127 网段、组播 224 网段、实际可用约 25.68 亿。
私有 IP 地址段是为了不至于每个 个人 PC或 手机都占有一个公网 IP 专门预留的,可以被每个家庭每个企业重复使用的,不可以被路由出去的。事实上,全国人民大多数办公电脑和个人手机的 IP 地址都集中在 192.168.1.0
网段的 254 个 IP 地址上。
有许多小、微型企业安装的是没有固定 IP 的宽带,家用宽带几乎全部是没有固定 IP 的,也就是说外网的固定 IP 是从运营商动态获取的,而且多个宽带只能共用 1 个公网 IP 地址。大、中型企业可能有许多开通专线和带公网 IP 的宽带(真 IP)。
究其根本原因是 >>> IPV4 支持的 IP 资源池太小,不能人手一个公有 IP 地址。于是有了新一代的 IPV6,支持 128 bit IP 地址格式,IP 总数为:2^128
。
IP 地址更换
公有/私有地址是否可以更换?!!如何更换?!!
👇👇👇 对于公有地址 👇👇👇
你可以通过一些在线的 IP 地址工具:
来查询本机对应的外网公共 IP 地址。
外网公有 IP 地址你自己不能修改,由 ISP 提供支持。即使你有,而且外网公共 IP 也没必要修改,尤其是 IPV4 分发的 IP 地址都快要枯竭了,谁没事干改外网公共 IP 地址。如果没有特殊需求,建议使用系统默认的 “自动获取 IP 地址(DHCP)” 方法。
👇👇👇 对于私有地址 👇👇👇
私有地址是支持修改的,修改方法如下:
↓↓↓↓↓↓ For Windows ↓↓↓↓↓↓
启动【Windows 开始菜单】>>> 搜索 “查看网络连接” 关键字,找到程序后确认 >>> 右键你要修改 IP 地址的网络适配器(WLAN/以太网…),选择【属性】>>> 双击【Internet协议版本 4(TCP/IP)】>>>勾选 “使用下面的 IP 地址” 和 ”使用下面的 DNS 服务器地址“,手动配置其中的相关内容即可。
Windows 网络连接中常见适配器说明:
1 | 以太网 >>> 描述信息:Realtek PCIe GbE Family Controller >>> 有线物理网卡(NIC) |
↓↓↓↓↓↓ For Linux ↓↓↓↓↓↓
关于 Centos 中私有地址的配置方法,可以参考【CentOS Server: Quick Configuration Guide】;如果是 Ubuntu,请参考【Ubuntu Server: Quick Configuration Guide】。
需要注意的是, IP 地址的配置不是由当前 PC/Server 决定的,而是由其连接的网关决定的(路由/交换机,均是网关)!!!
IP 地址定位
微信、抖音、微博、公众号等平台,统统都支持用户 IP 属地功能。也就是,就是在互联网发文时,都会带上自己的地址信息。
我们知道,要想接入 Internet,需要有公网 IP 地址。,而我们的公有地址是由移动/联通/电信等网络提供商(ISP,Internet Service Provider)提供的。事实上,ISP 只是二道贩子,全球 IP 地址是一级一级分配下来的。
👇👇👇 IANA >>> RIR 👇👇👇
IANA(Internet Assigned Numbers Authority,互联网地址编号分配机构)管理所有的 IP 地址,它大手一挥,把 所有可用的网段地址进行了全球划分(5 个区域),分配给了五个 RIR(Region Internet Registries,区域互联网地址注册机构):
- ARIN:负责北美地区业务
- RIPE NCC:负责欧洲地区业务
- APNIC:负责亚太地区业务
- LACNIC:负责拉丁美洲地区业务
- AfriNIC:负责非洲地区业务
IPv4 地址一共 256 个 8 位网段(Network ID)。
然而排除私有地址、Loopback 地址、保留地址等。IPv4 可用的 8 位网段只有两百个左右,供 RIR 进行分配。全球 IP 地址分配详情,由 IANA 官网 维护,如下:
从 IANA 地址分配表来看,我们可以通过 IP 地址的前八位,判断出 IP 地址属于哪个 RIR,也就知道 IP 地址的位置范围。但是这个范围实在太大了,相当于全球范围的五分之一。
全球 >>> 区域
| ================================================== Split Line =============================================== |
这五个 RIR 分别管理不同区域,它们也不直接给用户分配 IP 地址,否则得累死~~~
👇👇👇 RIR >>> NIR 👇👇👇
RIR 会将所有可用网段分配给 NIR(National Internet Registries,国家级互联网注册机构),想要更精确的位置,可以往下看 RIR 地址分配表,就能确定 IP 地址属于哪个国家或地区。
以 APNIC 举例,其地址分配详情如下(APNIC 地址分配页):
1 | apnic|ID|ipv4|103.110.100.0|512|20230311|allocated |
详细记录了 APNIC 所有地址的分配情况,表格格式为:注册机构 | 国家/地区代码 | 类型 | 起始地址 | 数量 | 分配日期 | 状态
。
区域 >>> 国家
| ================================================== Split Line =============================================== |
尽管可确定 IP 地址的国家了,但 IP 属地功能,显示的可是省份或直辖市。
👇👇👇 NIR >>> LIR/ISP/EU 👇👇👇
CNNIC 是中国唯一的 NIR。
NIR 会再分配给 LIR(Local Internet Registries,本地互联网注册机构),由它负责分配给 ISP 或最终用户。
有些机构 IDC / ICP / 企事业单位,可以直接向 CNNIC 申请 IP 地址。普通用户更多的是由 ISP 进行分配。
CNNIC 官网 可以查到 IP 地址的位置信息,但是位置信息不一定都能精确到省份或直辖市级。以我自己的 IP 地址(120.207.60.245
)为例:
查询结果:
查询结果显示:属于中国移动,位置范围是China(不是省份或直辖市级),并且当前 IP 地址属于(120.192.0.0 - 120.255.255.255)范围中,也就是 120.192.0.0/10
网段。显示的就是这个网段的信息(255×255× (255-192+1)=4194304
):
1 | apnic|CN|ipv4|120.192.0.0|4194304|20080414|allocated |
再来看一下 IP:58.60.110.20
,发现可以查到具体的省份信息:广东省。
1 | inetnum: 58.60.0.0 - 58.63.255.255 |
根本原因 >>> 向 CNNIC 中心申请 IP 网段时,有些已经确定了使用的省份/直辖市;还有些只确定了使用的国家/地区,后面根据需求,ISP 会再对 IP 网段进行划分(借助 ASN)。
| ================================================== Split Line =============================================== |
👇👇👇 关于 IP 的 ASN 👇👇👇
互联网是一个巨大的网络,它由数十万个叫做 AS(自治系统)的网络组成。而每个 AS 都是由 ISP 或区域网络等管理的大型网络(一个大型路由器池),还包含若干子网,包含位置信息。每个 AS 都有自己的 ASN(自治系统编号),是一个 16 bit 的 AS Numbers(ASN),方便识别和区分。
以我自己的 IP 地址(120.207.60.245
)为例,查询 ASN:
查询到一个 ASN:AS56042
(如果查询到多个,想更精准的定位,需要按照最长匹配原则(最长匹配的网段))。
如果想获取当前 ASN 更详细的信息,可通过 | >>> ASN Whois Lookup <<< | 获取。
拿到网络的 ASN 值后,你可以通过 Iplark 等工具获取更进一步的市级或区级的位置信息。
| ================================================== Split Line =============================================== |
👇👇👇 关于位置定位 👇👇👇
如果要具体的位置信息,精确到街道的那种,就要找 ISP 提供,ISP 有完整的 IP 地址位置信息的,通过 IP 地址可以定位到家庭住址、工作单位、行动轨迹等。
当然,这些信息是属于个人隐私,ISP 不会对外公布,泄露隐私可是违法行为。不过,我们还可以通过网上公开的 IP 地址库,定位到市级或区级的位置信息。
这里,我们可以发现,不借助 ISP 的信息,IP 地址只能准确的定位到城市位置。其实,除了 IP 地址外,还有许多其它定位的技术,比如 GPS 定位、WiFi 定位、蓝牙定位、大数据定位等,精度更准、准确率更高!所以,即使屏蔽了 IP 地址,也还是能找到精确位置~~~
install_url
to use ShareThis. Please set it in _config.yml
.