photo_2022-10-21_22-06-59.jpg

I. 序

本文仅做记录之用,内容较为系统、全面,未来会根据需要对内容进行修改、优化、补充。原文参阅 IP地址、子网掩码、网络号、主机号、网络地址、主机地址以及ip段/数字含义 (有修正);

https://www.cloudflare.com/ips-v4

173.245.48.0/20
103.21.244.0/22
103.22.200.0/22
103.31.4.0/22
141.101.64.0/18
108.162.192.0/18
190.93.240.0/20
188.114.96.0/20
197.234.240.0/22
198.41.128.0/17
162.158.0.0/15
104.16.0.0/13
104.24.0.0/14
172.64.0.0/13
131.0.72.0/22

II. 举例

一些实用举例,等价转换:

192.168.0.0/24
192.168.0.0/255.255.255.0 

等价于

192.168.0.0-192.168.0.255
网络地址:192.168.0.0
广播地址:192.168.0.255
可分配地址范围:192.168.0.1-192.168.0.254
可分配主机数:254

网络地址的计算:
将ip地址 192.168.0.0 转换为二进制

11000000 10101000 00000000 00000000

将子网掩码转换为二进制(注释:TCP/IP体系规定用一个32位的子网掩码来表示子网号字段对应的长度。具体的做法是:子网掩码由一连串的“1”和一连串的“0”组成,“1”对应于网络号和子网号字段而“0”对应主机号

11111111 11111111 11111111 00000000

与运算得出网络地址

11000000 10101000 00000000 00000000
11111111 11111111 11111111 00000000
------
11000000 10101000 00000000 00000000

即网络地址为:192.168.0.0;

广播地址的计算
取上方与运算结果

11000000 10101000 00000000 00000000

将主机地址变为1得出广播地址

11000000 10101000 00000000 11111111

即广播地址为:192.168.9.255;

可分配的主机数 = 2^(32-24)-2 = 254;

III. 背景知识

二进制.jpg

二进制

192.168.0.1 的二进制表示:

11000000 10101000 00000000 00000001

255.255.255.255 的二进制表示:

11111111 11111111 11111111 11111111

位运算概览

从现代计算机中所有的数据二进制的形式存储在设备中。即 0、1 两种状态,计算机对二进制数据进行的运算(+、-、*、/)都是叫位运算,即将符号位共同参与运算的运算。

符号 描述 运算规则
& 两个位都为1时,结果才为1
| 两个位都为0时,结果才为0
^ 异或 两个位相同为0,相异为1
~ 取反 0变1,1变0
<< 左移 各二进位全部左移若干位,高位丢弃,低位补0
>> 右移 各二进位全部右移若干位,对无符号数,高位补0,有符号数,各编译器处理方法不一样,有的补符号位(算术右移),有的补0(逻辑右移)

按位与运算举例:

11010101
10101011
------
10000001

即129;后续算网络地址广播地址会用到;

取反运算符 (~)
运算规则: 

~1=0
~0=1

总结:对一个二进制数按位取反,即将0变1,1变0。

IV. ip地址概述

互联网中有数百万台的主机和路由器,为了确切的标识它们,TCP/IP建立了一套编址方案,为每台主机和路由器分配一个全网唯一的地址,即IP地址。任何两台主机的ip地址不能相同,但是允许一个主机拥有多个ip地址。

V. ip地址结构及分类

这里介绍的是ipv4版本的ip地址,也是大家现阶段都在用的ip地址。

ip地址是由32位二进制数,即4个字节组成的,由网络号和主机号两个字段组成。总的来说,寻址的过程是:先按网络号把网络找到,再按主机号把主机找到。

为了便于对ip地址进行管理,同时还考虑到网络的差异很大,ip地址分为5类,即A类到E类,如下所示

ip地址结构及分类.jpg

A类 - 超过1600万个主机标识符
B类 - 65,535主机标识符
C类 - 254主机标识符

这些32位的地址通常写成四个二进制的数,其中每个整数对应一个字节,这就是点分十进制记法,例如我的ip地址就是171.48.163.10。

关于上图中的网络号范围:

A类地址网络号占用一个字节,但是由于有一位是类别位,只有7位可供使用,但是由于规定,网络字段全0是个保留字段表示本网络,而127(01111111)是另外一个保留字段,作为本地软件的环回测试。我们常见的127.0.0.1表示本机,原因也是出自这里。所以A类地址可以指派的网络号个数为(2^7-2).

B类网络地址网络号有两个字节,前两位为10已经固定,只剩下14位可用,由于这14位无论怎么取值都不会使得网络号为全0或者全1,但是实际上规定,B类不指派128.0.0.0,所以最小网络地址为128.1.0.0。因此B类地址可指派的网络号个数为(2^14-1).

C类地址有3个字节的网络字段号,前三位固定110,只有剩下21位可用,同样C类地址192.0.0.0也不指派,可指派的最小网络地址也是192.0.1.0。因此C类地址可指派的网络号个数为(2^21-1).

可以看出区分各类地址最简单的方法就是看它的第一个十进制整数:

类型 范围
A 0.0.0.0到127.255.255.255 默认掩码
B 128.0.0.0到191.255.255.255 255.0.0.0/8
C 192.0.0.0到123.255.255.255 255.255.0.0/16
D 224.0.0.0到239.255.255.255 255.255.255.0/24

目前大量使用的是A、B、C三类地址,当某单位申请一个ip地址时,实际上只是申请到了一个网络号,具体主机号由本单位自行分配。

VI. 建立子网

现在所有的主机都支持子网编址,不是把ip地址看成单纯的网络号+主机号,而是把主机号再分成一个子网号和一个主机号。这个分配的过程就是管理员建立子网的过程。

举个例子,假设这里有个A类网络地址(120.252),在剩下的16bit中,8bit用于子网号,8bit用于主机号,格式如下所示。

16位 8位 8位
网络号=120.252 子网号 主机号

这样就允许有254个子网,每个子网有254台主机。

子网对于外部来说隐藏了内部网络组织的细节。在我们的网络例子中,所有的ip地址都有一个B类网络号120.252。但是其中有超过30多个子网,多于400台主机分配在这些子网中,由一台路由器提供Internet的接,在各子网之间用路由器互连。

VII. 子网掩码

上例中对于主机号的分配我们是把16位拆分成8位子网号8位主机号,那么为什么不是7位子网号9位主机号呢,这里就涉及到子网掩码的作用了。

TCP/IP体系规定用一个32位的子网掩码来表示子网号字段对应的长度。具体的做法是:子网掩码由一连串的“1”和一连串的“0”组成,“1”对应于网络号和子网号字段,而“0”对应主机号。

现在我们来看一个例子。假设还是分配到一个A类地址120.252。其子网掩码是11111111.11111111.11111111.00000000。可以看出前24位为’1’,后’8’位是’0’,说明网络号+子网号为前24位,子网号为24-16=8位,主机号为后8位。划分的主机地址格式为

16位 8位 8位
网络号=120.252 子网号 主机号

如果子网掩码为11111111.11111111.11111110.00000000,那么子网号有23-16=7位,主机号有9位。对应的主机地址格式就变成:

16位 7位 9位
网络号=120.252 子网号 主机号

通过上述例子我们便可以知道子网掩码的作用就是用来确定对主机号的划分。

A、B、C类ip地址默认的子网掩码分别为:255.0.0.0255.255.0.0255.255.255.0

有了子网掩码,总路由器才可以确定把数据转发到哪个子网。举个例子:

假设一个公司网络的网段为120.252。子网掩码11111111.11111111.11111111.11000000(前26位是网络号+子网号,后6位是主机号)。

这时外界计算机要将一个数据传送给ip地址为120.252.16.98的主机,那么这个数据会先到公司的总路由器,进入120.252网络中。总路由器接收到了这个数据该转发到哪个子网中呢?

首先将120.252.16.98转化为2进制为1111000.11111100.00010000.01100010,根据子网掩码便可以确定网段为1111000.11111100(120.252),子网号为0001000001(65),主机号为100010(34)。

最终路由器把数据转发到第65个子网上,在由子网路由器转发到第34个主机上。

VIII. 同一网段

想在同一网段,必须做到网络标识相同。各类IP的网络标识算法都是不一样的,需要根据子网掩码的位数来判断。

算法只要把IP和子网掩码的每位数AND就可以了。(AND方法:0和1=0 0和0=0 1和1=1)

如:And 192.168.0.1,255.255.255.0,先转换为二进制,然后AND每一位。

11000000.10101000.00000000.00000001
11111111.11111111.11111111.00000000
------
11000000.10101000.00000000.00000000

转换为十进制192.168.0.0,这就是网络标识。

其实很容易理解,只要两个ip地址的网络号和子网号都一样就是同一网段。而网络号和子网号的位数是需要根据子网掩码才可以知道了,上述算法的原理也是基于此。

举例:假设我们的主机地址是140.252.1.1(一个B类地址),而子网掩码是255.255.255.0(子网号8位,主机号8位主机号)

如果目的ip地址为140.252.1.5,那么我们就知道b类网络号是相同的(140.252),子网号是相同的(1),属于同一网段。

如果目的ip地址为140.252.4.5,那么我们就知道b类网络号是相同的(140.252),但是子网号是不同的(1和4)。不属于同一网段。

如果目的ip地址为140.251.4.5,那么我们就知道b类网络号是不相同的(140.252和140.251),后面比较就没必要了,不属于同一网段。

一般来说,如果主机没有设置防火墙禁止别人访问的话,位于同一网段是主机是可以直接访问的。

IX. 私有地址

A、B、C三类地址是我们常见的IP地址段。在这三类地址中,绝大多数的IP地址都是公有地址,需要向国际互联网信息中心申请注册。但是在IPv4地址协议中预留了3个IP地址段,作为私有地址,供组织机构内部使用。这三个地址段分别位于A、B、C三类地址内:

  • A类地址:10.0.0.0–10.255.255.255
  • B类地址:172.16.0.0–172.31.255.255
  • C类地址:192.168.0.0–192.168.255.255

这些地址是不会被Internet分配的,它们在Internet上也不会被路由。也就是说在外界公网上,不可能有ip地址是上述范围之中的。

绝大部分计算机都是在一个内网中,而不是直接分配一个公网ipv4地址,我们可以用ipconfig查看一下本地的吧ip地址,然后对比一下公网ip地址:

私有地址1.jpg
私有地址2.jpg

ipconfig查出来的是你本机的IP地址,也就是内网私有地址,此类地址仅在局域网使用,不能联通外网。

百度查出来的地址是你上网的公网地址。

为什么要使用这种机制呢?

ipv4的数目看起来很多,实际上全世界分一分就捉襟见肘了,因此我们使用私有ip,大量的内网ip地址转换为一个或少量的公网IP地址,就减少对公网IP地址的占用;有时候一家公司不需要连接Internet,只需要内部之间相互通信,便可以建立一个局域网,分配私有ip给公司的每个电脑,这样可以防止hacker的入侵。

实际上这个公网地址就是内网连接Internet的身份。外界只会知道你的公网ip地址,内网的地址可以根据需要自行分配,对外界是不可知的。

公网ip的数量稀少,导致一般一个公司或者单位才会分到一个公网ip,一般企业内部或者学校的计算机都是只分配了内网ip。

那如果我们的ip是私有地址,那怎么连接Internet呢?

既然我们都是用的私有ip,那么我们应该只可以在内网内部进行通信,你可能会疑问那么我们是怎么连接上Internet的呢?

这是使用了NAT技术。NAT英文全称是”Network Address Translation”,中文意思是”网络地址转换”,它是一个IETF(Internet Engineering Task Force, Internet工程任务组)标准,允许一个整体机构以一个公用IP(Internet Protocol)地址出现在Internet上。顾名思义,它是一种把内部私有网络地址(IP地址)翻译成合法网络IP地址的技术。

简单的说,NAT就是在内部网络中使用私有地址,而当内部计算机连接Internet时,就在网关(可以理解为出口,打个比方就像院子的门一样)处,将内部地址替换成公用地址,从而在外部公网(internet)上正常使用,NAT可以使多台计算机共享Internet连接。

实现NAT转换的地方一般是路由器。我们也可以通过对路由器的设置来让外界对公网的访问映射成对局域网某一主机的访问,当我们要将计算机做成服务器时,需要用到此技术。

最后让我们来模拟一下我们上网的流程。

小明是个大学生,电信公司分给他宿舍楼一个ip是118.168.14.117,宿舍楼网络管理员给小明同学分配的私有ip是192.168.1.150。这天小明打开了浏览器想要搜索明天天气怎么样,这时的数据发给了路由器,然后路由器把数据发送给了百度的服务器(私有ip转换为公网ip)。百度接收到之后返回了一段数据到了路由器(百度以为是路由器的公网ip请求的),然后路由找到小明的私有ip(公网ip转换到私有ip),将数据发给了小明,这就是小明真实上网的流程。

X. 网关

上述小明的例子中,路由器作为公网和私网的桥梁,这时路由器便充当了网关的角色。实际上路由器并不是内外网的连接点,网关才是,这里路由器可以完成网关的功能完成网络的互连罢了。

网关就是一个网络连接到另一个网络的”关口”,也就是网络关卡,又称网间连接器、协议转换器。网关是一个网络层上的概念,既可以用于局域网互连,也可以用于广域网互连。

由于历史的原因,许多有关TCP/IP的文献曾经把网络层使用的路由器称为网关,在今天很多局域网采用都是路由来接入网络,因此通常指的网关就是路由器的IP!

网关
网关(Gateway)又称网间连接器、协议转换器。默认网关在网络层上以实现网络互连,是最复杂的网络互连设备,仅用于两个高层协议不同的网络互连。网关的结构也和路由器类似,不同的是互连层。网关既可以用于广域网互连,也可以用于局域网互连

网关实质上是一个网络通向其他网络的IP地址。

比如有网络A和网络B,网络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。

在没有路由器的情况下,两个网络之间是不能进行TCP/IP通信的,即使是两个网络连接在同一台交换机(或集线器)上,TCP/IP协议也会根据子网掩码(255.255.255.0)判定两个网络中的主机处在不同的网络里。

而要实现这两个网络之间的通信,则必须通过网关。如果网络A中的主机发现数据包的目的主机不在本地网络中,就把数据包转发给它自己的网关,再由网关转发给网络B的网关,网络B的网关再转发给网络B的某个主机。

所以说,只有设置好网关的IP地址,TCP/IP协议才能实现不同网络之间的相互通信。那么这个IP地址是哪台机器的IP地址呢?网关的IP地址是具有路由功能的设备的IP地址,具有路由功能的设备有路由器、启用了路由协议的服务器(实质上相当于一台路由器)、代理服务器(也相当于一台路由器)。

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

在使用TCP/IP 协议的网络中,主机标识段host ID 为全1 的IP 地址为广播地址,广播的分组传送给host ID段所涉及的所有计算机。例如,对于10.1.1.0 (255.255.255.0 )网段,其广播地址为10.1.1.255 (255 即为2 进制的11111111 ),当发出一个目的地址为10.1.1.255 的分组(封包)时,它将被分发给该网段上的所有计算机。

XI. 网络地址与广播地址

根据IP地址子网掩码网络地址广播地址
将IP地址和子网掩码换算为二进制,子网掩码连续全1的是网络地址后面的是主机地址,虚线前为网络地址,虚线后为主机地址;

网络地址/广播地址:IP地址和子网掩码进行与运算,结果是网络地址(即主机号全0是网络地址)将运算结果中的网络地址不变,主机地址变为1,结果就是广播地址;

地址范围就是含在本网段内的所有主机;

网络地址+1即为第一个主机地址,广播地址-1即为最后一个主机地址,由此可以看出地址范围是:网络地址+1广播地址-1

主机的数量 = 2^二进制位数的主机-2,减2是因为主机不包括网络地址和广播地址。

示例:一个主机的IP地址是202.112.14.137,掩码是255.255.255.224,要求计算这个主机所在网络的网络地址和广播地址:根据子网掩码可以分割网络号+主机号,

255.255.255.224 转二进制

11111111 11111111 11111111 11100000

网络号有27位,主机号有5位
网络地址就是:把IP地址转成二进制和子网掩码进行与运算;

子网掩码

11001010 01110000 00001110 10001001

IP地址&子网掩码

11001010 01110000 00001110 10001001
11111111 11111111 11111111 11100000
------
11001010 01110000 00001110 10000000

即:202.112.14.128

计算广播地址
广播地址:网络地址的主机位全部变成1 ,10011111 即 159 即:202.112.14.159

主机数
主机号有5位,那么这个地址中,就只能有25-2=3025-2=30个主机

因为其中全0作为网络地址,全1作为广播地址

根据每个网络的主机数量进行子网地址的规划和计算子网掩码,这也可按上述原则进行计算。

比如一个子网有10台主机,那么对于这个子网需要的IP地址是

10+1+1+1=13(个)

注意:加的第一个1是指这个网络连接时所需的网关地址,接着的两个1分别是指网络地址和广播地址因为13小于16(16等于2的4次方),所以主机位为4位

而 256-16=240 所以该子网掩码为255.255.255.240。

如果一个子网有14台主机,不少人常犯的错误是:依然分配具有16个地址空间的子网,而忘记了给网关分配地址。这样就错误了,因为:14+1+1+1=17;17大于16,所以我们只能分配具有32个地址(32等于2的5次方)空间的子网。这时子网掩码为:255.255.255.224;

XII. ip段/数字(CIDR)

子网掩码计算

ip段/数字如192.168.0.1/24是什么意思? 后面这个数字标示了我们的网络号的位数,也就是子网掩码中前多少号为1;129.168.1.1 /24 这个24就是告诉我们网络号是24位;

也就相当于告诉我们了子网掩码是:

11111111 11111111 11111111 00000000

即:255.255.255.0;

可用IP = 2^(32-24)-2 = 254

CIDR块

无类别域间路由(英语:Classless Inter-Domain Routing,简称CIDR)是一个用于给使用者分配IP位址以及在网际网路上有效地路由IP封包的对IP位址进行归类的方法。

在域名系统出现之后的第一个十年里,基于分类网路进行位址分配和路由IP封包的设计就已明显显得可扩充性不足(参见RFC 1517)。为了解决这个问题,互联网工程工作小组在1993年发布了一新系列的标准——RFC 1518和RFC 1519——以定义新的分配IP位址块和路由IPv4封包的方法。

一个IP位址包含两部分:标识网路的字首和紧接着的在这个网路内的主机位址。在之前的分类网路中,IP位址的分配把IP位址的32位元按每8位元为一段分开。这使得字首必须为8,16或者24位元。因此,可分配的最小的位址块有256(24位元字首,8位元主机位址,2^8 =256)个位址,而这对大多数企业来说太少了。大一点的位址块包含65536(16位元字首,16位元主机,2 16 =65536)个位址,而这对大公司来说都太多了。这导致不能充分使用IP位址和在路由上的不便,因为大量的需要单独路由的小型网路(C类网路)因在地域上分得很开而很难进行聚合路由,于是给路由装置增加了很多负担。 Via 维基百科

CIDR如何工作?
CIDR基于变长子网掩码(VLSM)。这使得它可以定义任意长度的前缀,这种灵活性使其比旧系统更高效。CIDR IP地址由两组数字组成。网络地址被写成一个前缀,就像你看到的普通IP地址一样(例如192.255.255.255)。第二部分是后缀,表示整个地址中有多少位(例如/12)。综上所述,CIDR IP地址如下所示:

192.255.255.255/12

网络前缀也指定为IP地址的一部分。这取决于所需的比特数。因此,通过上面的例子,我们可以说前12位是地址的网络部分,而最后20位是主机地址。

192.255.255.255二进制表示为

1100 0000. 1111 1111. 1111 1111. 1111 1111

前12位为网络地址,即子网掩码为:

1100 0000. 1111 0000. 0000 0000. 0000 0000

转成十进制即为255.240.0.0

CIDR Range 192.255.255.255/12
Netmask 255.240.0.0
Wildcard Bits 0.15.255.255
First IP 192.240.0.0
First IP (Decimal) 3236954112
Last IP 192.255.255.255
Last IP (Decimal) 3238002687
Total Host 1,048,576

via CIDR to IPv4 Conversion

XIII. 在线计算

谷歌搜索:

TCP/IP子网掩码计算换算
CIDR to IPv4 Conversion
最后修改:2023 年 04 月 19 日 04 : 24 PM