网络FAQ
进制转换
二进制转十进制
现在有一个1字节的二进制:11000000
,需要转换二进制为十进制
什么是广域网和局域网?
- 广域网:又称外网、公网。是连接不同地区局域网或城域网计算机通信的远程网。通常跨接很大的物理范围,所覆盖的范围从几十公里到几千公里,它能连接多个地区、城市和国家,或横跨几个洲并能提供远距离通信,形成国际性的远程网络。广域网并不等同于互联网。
- 局域网:又称内网。是指在某一区域内由多台计算机互联的计算机组。局域网可以实现文件管理、应用软件共享、打印机共享、工作组内的日程安排、电子邮件和传真通信服务等功能。局域网是封闭型的,可以由办公室内的两台计算机组成,也可以由一个公司内的上千台计算机组成。在阿里云,相同地域下的ECS实例可以采用同类型网络配置实现内网互通,不同地域的ECS实例之间的内网隔离。
什么是IP地址
我们知道,网络通讯的本质就是收发数据包。如果说收发数据包就跟收发快递一样。那 IP 地址就类似于快递上填的收件地址和发件地址一样,有了它,路由器就可以开始充当快递员的角色,在这个纷繁复杂的网络世界里找到该由谁来接收这个数据包。
在网络通讯中,IP地址是一个32位的二进制数表示的地址,其中减去全0表示的无效地址,IP地址总共拥有2^32 -1
个地址,它通常表现形式如下:
11000000101010000000000000000001
显而易见,直接展示完整 32 位的 IP 地址既不直观也不好记忆。所以为了方便使用,我们把这 32 位二进制数分成4个八位一组的二进制数,称之为八位组(octet)或者1个字节。每个八位组书写时用点分十进制的格式标识。每个八位组取值为 00000000~11111111(二进制数)。这就让 IP 地址变成了下面的样子:
11000000 10101000 00000000 00000001
由于二进制是机器识别的,所以为了方便人的识别,使用十进制表示,也既点分十进制。
点分十进制
点分十进制,全称点分(点式)十进制表示法**(英:Dotted decimal notation)**,是IPv4的IP地址标识方法,每一组数字都是十进制,每组数字按照十进制表示为0~255,组与组之间用“.(点)”分隔,因此称为“点分十进制”。
最终,IP地址十进制表示:
IP地址结构
IP地址结构划分为两个部分:
- 网络号:表示主机所在的网络区域
- 主机号:主机在网络区域中的具体逻辑位置
为什么要区分网络号和主机号
在日常生活中,我们要收发快递必须写发件人地址、收件人地址。比如收件人地址为北京市朝阳区望京街道XX小区XX栋XX单元。这里面北京市朝阳区望京街道就代表具体某一个地区,XX小区XX栋XX单代表收件人具体地址。
在IP协议中,IP地址也有类似的定义。当 IP 数据包在网络中传递时,路由器只关心目的 IP 地址的网络地址,通过识别 IP 地址的网络地址,来为 IP 数据包进行路由操作。当数据包达到了目的的网段以后,才通过 IP 地址的主机号部分查找具体的接收主机。
分类网络
这种地址结构也叫分类网络(Classful Addressing)或称“分级式定址”,是1981年至1993年引入无类别域间路由(CIDR)之前在互联网中使用的一种网路位址架构。该方法将互联网协议第4版(IPv4)的IP地址空间根据前四位地址位划分为五个地址类别。A类、B类和C类为三种不同网络规模的网络提供单播地址。D类用于组播网络,E类地址范围是为未来或实验性目的保留的。
IP地址编码规范中规定:
- 网络地址:主机号标识全为0的IP地址为网络地址。网络地址是用来标识网络号的,便于路由器寻址操作的
- 广播地址:主机号标识全为1的IP地址为广播地址。广播地址用于在同一个链路中相互连接的主机之间发送数据包,比如ARP广播。
现有在一个C类地址:192.168.1.125,网络号为前21位、主机号位后8位,通过计算点分十进制计算:
- 网络地址:192.168.1.0
- 广播地址:192.168.1.255
因此,在分配过程中,最大主机数需要减2,如 C 类地址的主机号占 8 位,那么 C 类地址的最大主机个数:
通过上述用例,可计算出ABC三类IP地址的网络地址范围以及每个网络地址对应主机数,如下表中:
- n 表示该二进制位是网络号
- H 表示该二进制位是主机号
- X 表示该二进制位无特定作用
类别 | IP地址范围 | 默认子网掩码 | 最大网络号数 | 最大主机数 |
---|---|---|---|---|
A类 | 0. 0. 0. 0 = 00000000.00000000.00000000.00000000 127.255.255.255 = 01111111.11111111.11111111.11111111 0nnnnnnn.HHHHHHHH.HHHHHHHH.HHHHHHHH | 255.0.0.0 | 2^7-1=127 | 2^24-2=16,777,214 |
B类 | 128. 0. 0. 0 = 10000000.00000000.00000000.00000000 191.255.255.255 = 10111111.11111111.11111111.11111111 10nnnnnn.nnnnnnnn.HHHHHHHH.HHHHHHHH | 255.255.0.0 | 2^14=16,384 | 2^16-2=65,534 |
C类 | 192. 0. 0. 0 = 11000000.00000000.00000000.00000000 223.255.255.255 = 11011111.11111111.11111111.11111111 110nnnnn.nnnnnnnn.nnnnnnnn.HHHHHHHH | 255.255.255.0 | 2^21=2,097,152 | 2^8-2=254 |
D类 | 224. 0. 0. 0 = 11100000.00000000.00000000.00000000 239.255.255.255 = 11101111.11111111.11111111.11111111 1110XXXX.XXXXXXXX.XXXXXXXX.XXXXXXXX | 未定义 | 未定义 | 未定义 |
E类 | 240. 0. 0. 0 = 11110000.00000000.00000000.00000000 255.255.255.255 = 11111111.11111111.11111111.11111111 1111XXXX.XXXXXXXX.XXXXXXXX.XXXXXXXX | 未定义 | 未定义 | 未定义 |
可用看到IP地址的分配把IP地址的32位按每8位为一段分开。这使得前缀必须为8,16或者24位。因此,可分配的最小的地址块有256(24位前缀,8位主机地址,28=256)个地址,而这对大多数企业来说太少了。大一点的地址块包含65536(16位前缀,16位主机,216=65536)个地址,而这对大公司来说都太多了。这导致不能充分使用IP地址和在路由上的不便,因为大量的需要单独路由的小型网络(C类网络)因在地域上分得很开而很难进行聚合路由,于是给路由设备增加了很多负担。
取而代之的是方案是,将所谓的 ABC 分类直接取消,只保留网络号和主机号,并且网络号的位数也不像以前限制的那么死,用一个斜杠告诉用户多少位是网络号,其余的都是主机号。比如
172.20.61.69/20
,那网络号的位数就是20位
,主机号的位数是 32-20=12位
,能放 4096 台机子,很灵活,很够用。上述这种方式就是CIDR
什么是无类别域间路由(CIDR)
正因为 IP 分类存在许多缺点,所以后面提出了无分类地址的方案,即无类别域间路由(英语:Classless Inter-Domain Routing,简称CIDR)。它是一个用于给用户分配IP地址以及在互联网上有效地路由IP数据包的对IP地址进行归类的方法。它是基于**可变长子网掩码(VLSM)**来进行任意长度的前缀的分配的。
这种方式不再有分类地址的概念,32 比特的 IP 地址被划分为两部分,前面是网络号,后面是主机号。表示形式 a.b.c.d/x
,其中 /x
表示前 x 位属于网络号, x 的范围是 0 ~ 32
,这就使得 IP 地址更加具有灵活性。
-
示例一:CIDR格式换算为IP地址网段
比如 10.100.122.2/24,这种地址表示形式就是 CIDR,/24 表示前 24 位是网络号,剩余的 8 位是主机号。
-
示例二:IP地址网段换算为CIDR格式
例如192.168.0.0~192.168.31.255
什么是子网掩码
子网掩码(subnet mask)又叫网络掩码、地址掩码、子网络遮罩,它是一种用来指明一个IP地址的哪些位标识的是主机所在的子网,以及哪些位标识的是主机的位掩码。
子网掩码是一个32位地址,是与IP地址结合使用的一种技术。它的主要作用有两个:
- 用于屏蔽IP地址的一部分以区别网络号标识和主机号标识,并说明该IP地址是在局域网上,还是在远程网上。
- 用于将一个大的IP网络划分为若干小的子网络。
- 使用子网是为了减少IP的浪费。因为随着互联网的发展,越来越多的网络产生,有的网络多则几百台,有的只有区区几台,这样就浪费了很多IP地址,所以要划分子网。使用子网可以提高网络应用的效率。
比如:
A类的默认子网掩码 255.0.0.0 对应二进制 11111111.00000000.00000000.00000000
B类的默认子网掩码 255.255.0.0 对应二进制 11111111.11111111.00000000.00000000
C类的默认子网掩码 255.255.255.0 对应二进制 11111111.11111111.11111111.00000000可见A类地址:
- 前8位:11111111标识主机所在的子网,也就是IP地址网络号标识
- 后24位:00000000 00000000 00000000 标识主机的位掩码,也就是IP地址主机号标识
B、C类依次类推
根据子网掩码计算网络地址
通过计算机的子网掩码判断两台计算机是否属于同一网段的方法是,将计算机十进制的IP地址和子网掩码转换为二进制的形式,然后进行二进制“与”(AND)计算(全1则得1,不全1则得0),如果得出的结果是相同的,那么这两台计算机就属于同一网段。
根据子网掩码计算最大可划分的子网数
子网划分实际上是将主机地址分为两个部分:子网网络地址和子网主机地址。形式如下:
- 未做子网划分的 ip 地址:网络号+主机号
- 做子网划分后的 ip 地址:网络号+(子网网络号+子网主机号)
假设对B类IP地址168.195.0.100/20
进行子网划分,它最大能划分多少个子网
- 将子网掩码转换成二进制
- 计算网络号位数
- 网络号- B类地址基础网络号,二者之间位差值N为子网网络号位数
- 最大有效网络数就时2的N次方
# 转换二进制子网掩码
11111111.11111111.11110000.00000000(255.255.240.0)
# 统计网络号位数
20
# B类网络号位数
16
# 计算子网网络号位数
N=20-16=4
# 最大可划分子网数
2^4=16
由于子网网络号被划分成 4 位,那么子网地址就有 16 个,分别是0000、0001、0010、0011、0100、0101、0110、0111、1000、1010、1011、1100、1101、11111,如下图:
根据子网数计算网络、广播地址、可用IP
将子网数目转化为二进制来表示
取得该二进制的位数,为 L(注意:当二进制数中只有一个
1
的时候,所统计的位数需要减1
(例如:10000
要统计为4
位))取得该IP地址的类子网掩码,将其主机地址部分的前N位置1 即得出该IP地址划分子网的子网掩码。
子网掩码为1的位数是网络号、为0的位数是主机号
如欲将B类IP地址168.195.0.100划分成32个子网:
# 子网数:十进制转二进制
32 = 100000
# 该二进制为五位数(当二进制数中只有一个1的时候,所统计的位数需要减)
L = 5
# 计算子网掩码(B类地址默认子网掩码,其主机号包括后两个字节,所以这里要把后2个字节的前5位置1)
255.255.0.0(11111111.11111111.00000000.00000000)---> 255.255.248.0 (11111111.11111111.11111000.00000000)
# 网络号
n = 21
# 主机号
H = 11
# 计算网络地址/子网(IP地址与子网掩码AND运算)
10101000.11000011.00000000.01100100(168.195.0.100)
AND
11111111.11111111.11111000.00000000(255.255.248.0)
-----------------------------------
10101000.11000011.00000000.00000000 (168.195.0.0)
# 计算广播地址(把网络地址主机号全标识为1)
10101000.11000011.00000111.11111111 (168.195.7.255)
# 可用IP数
2^11-2=2046
根据主机数计算网络、广播地址、可用IP
- 将主机数目转化为二进制来表示
- 如果主机数小于或等于254(注意去掉保留的两个IP地址:网络地址/广播地址),则取得该主机的二进制位数,为 L,这里肯定L<8。如果大于254,则 L>8,这就是说主机地址将占据不止8位。
- 使用255.255.255.255来将该类IP地址的主机地址位数全部置1,然后从后向前的将N位全部置为 0,即为子网掩码值。
如欲将B类IP地址168.195.0.100划分成若干子网,每个子网内有主机700台:
# 主机数:十进制转二进制
700 = 1010111100
# 该二进制为十位数
L = 10
# 将该B类地址的子网掩码255.255.0.0的主机地址全部置1,得到255.255.255.255
11111111.11111111.11111111.11111111=255.255.255.255
# 计算子网掩码(从后向前将后10位置为0)
11111111.11111111.11111100.00000000=255.255.252.0
# 网络号
n = 22
# 主机号
H = 10
# 计算网络地址(IP地址与子网掩码AND运算)
10101000.11000011.00000000.01100100(168.195.0.100)
AND
11111111.11111111.11111000.00000000(255.255.252.0)
-----------------------------------
10101000.11000011.00000000.00000000 (168.195.0.0)
# 计算广播地址(把网络地址主机号全标识为1)
10101000.11000011.00000011.11111111 (168.195.3.255)
# 可用IP数
2^10-2=1022
根据CIDR计算网络、广播地址、可用IP
X.X.X.X/N
- N为网络号,则主机号:32-N
- 设置32位字节,从后向前32-N主机号全为0,其余全位1,当作子网掩码
如CIDR标识IP地址:168.195.0.100/27
# 网络号
N=27
# 主机号
32 - 27 = 5
# 计算子网掩码
11111111.11111111.11111111.11100000 (255.255.255.224)
# IP地址与子网掩码AND运算
10101000.11000011.00000000.01100100(168.195.0.100)
AND
11111111.11111111.11111111.11100000(255.255.255.224)
-----------------------------------
10101000.11000011.00000000.01100000 (168.195.0.96)
# 计算广播地址(把网络地址主机号全标识为1)
10101000.11000011.00000000.01111111 (168.195.0.127)
# 可用IP
可用IP: 2^5-2=30
什么是路由表转发
IP地址的网络地址是用来进行路由控制的。路由控制表中记录网络地址与下一步应该发送至路由器的地址。在主机和路由器上都会有各自的路由器控制表。
在发送 IP 包时,首先要确定 IP 包首部中的目标地址,再从路由控制表中找到与该地址具有相同网络地址的记录,根据该记录将 IP 包转发给相应的下一个路由器。如果路由控制表中存在多条相同网络地址的记录,就选择相同位数最多的网络地址,也就是最长匹配。
下面以下图的网络链路作为例子说明:
- 主机 A 要发送一个 IP 包,其源地址是
10.1.1.30
和目标地址是10.1.2.10
,由于没有在主机 A 的路由表找到与目标地址10.1.2.10
相同的网络地址,于是包被转发到默认路由(路由器1
) - 路由器
1
收到 IP 包后,也在路由器1
的路由表匹配与目标地址相同的网络地址记录,发现匹配到了,于是就把 IP 数据包转发到了10.1.0.2
这台路由器2
- 路由器
2
收到后,同样对比自身的路由表,发现匹配到了,于是把 IP 包从路由器2
的10.1.2.1
这个接口出去,最终经过交换机把 IP 数据包转发到了目标主机
什么是NAT协议
我们的计算机要想访问互联网上的信息,就需要一个地址,而且这个地址是大家(其他主机)所认可的,是公共的,这个地址也叫做公有 IP 地址。
与之相对的,除了公有 IP 地址外,还有私有 IP 地址,私有 IP 地址就是我们在私有网络中使用的地址,比如局域网或者公司内部的网络。不知道你没有观察过自己家路由器所分配的 IP 地址,当你登上路由器的网关 192.168.1.1 时,在分配的网络下面一般会看到一些 IP 地址,都是 192.168.1.x ,这种地址就是私有 IP 地址。