【网络协议】网络协议系列三 - MAC地址/IP地址/子网掩码

MAC/IP/子网掩码在网络中非常重要,只要有网络的地方必然都会涉及这三个概念。

一、MAC

每一个网卡都有一个6字节(48bit)的MAC地址(Media Access Control)。

  • 全球唯一,固化在了网卡的ROM中,由IEEE802标准规定

    • 前3个字节:OUI(Organizationally Unique Identifier),组织唯一标识符,由IEEE的注册管理机构分配给厂商
    • 后三个字节:网络接口标识符,由厂商自行分配
  • OUI查询

1.1. MAC地址的表示格式

  • Windows
    • 32-06-52-3C-4F-2E
  • Linux、Android、Mac、iOS
    • 32:06:52:3C:4F:2E
  • Packet Tracer
    • 3206.523C.4F2E
  • 当48位全为1时,代表广播地址(给同一个网段的所有设备)
    • FF-FF-FF-FF-FF-FF

1.2. MAC地址操作

查看MAC地址(终端):

  • Windows:ipconfig
  • Linux/Mac:ifconfig

有时可以通过修改MAC地址达到上网的目的(有些公司的内网路由器设定了MAC地址白名单,我司就是这样,手机都无法连接无线)。

1.3. MAC地址的获取

当不知道对方主机的MAC地址时,可以通过发送ARP广播获取对方的MAC地址

  • 获取成功后,会缓存IP地址、MAC地址的映射信息,俗称:ARP缓存
  • 通过ARP广播获取的MAC地址,属于动态(dynamic)缓存。存储时间比较短(默认2分钟),过期会自动删除。

当找不到对应MAC地址时会再次发送ARP广播,所以不需要担心更换网卡后无法上网的问题。

相关命令:

  • arp -a [主机地址]:查询ARP缓存
  • arp -d [主机地址]:删除ARP缓存
  • arp -s [主机地址] [MAC地址]:增加一条缓存信息(这是静态缓存,存储时间比较久,不同系统的存储时间不同)

二、IP

IP地址(Internet Protocol):互联网上的每一个主机都有一个IP地址

最初是IPv4版本,32bit(4字节),2019年11月25日,全球的IP地址已经用完。后面推出了IPv6版本,128bit(16字节)。

2.1. IP地址的组成

IP地址由2部分组成:网络标识(网络ID)、主机标识(主机ID)
同一网段的计算机,网络ID相同

通过子网掩码(subnet mask)可以计算出网络ID:IP地址 & 子网掩码

按位与(&)计算技巧:遇1就是原来的,遇0就是0。

案例一:

1
2
3
4
5
6
7
8
9
10
IP地址:192.168.1.10
子网掩码:255.255.255.0
计算网段:
1100 0000.1010 1000.0000 0001.0000 1010 -> 192.168.1.10(10进制)
&
1111 1111.1111 1111.1111 1111.0000 0000 -> 255.255.255.0(10进制)
--------------------------------------------------------------
= 1100 0000.1010 1000.0000 0001.0000 0000 -> 192.168.1.0(10进制)

192.168.1 代表网络ID,后面一部分代表主机ID。

案例二:

1
2
3
4
5
6
7
8
9
10
IP地址:192.168.1.10
子网掩码:255.255.0.0
计算网段:
1100 0000.1010 1000.0000 0001.0000 1010 -> 192.168.1.10(10进制)
&
1111 1111.1111 1111.0000 0000.0000 0000 -> 255.255.0.0(10进制)
--------------------------------------------------------------
= 1100 0000.1010 1000.0000 0000.0000 0000 -> 192.168.0.0(10进制)

192.168 代表网络ID,后面两部分位代表主机ID。

注意:主机ID要去除全0和全255,因为0代表网段(例:192.168.0.0),255代表广播地址(例:192.168.255.255)。

计算机和其他计算机通信前,会先判断目标主机和自己是否在同一网段

  • 同一网段:不需要由路由器进行转发
  • 不同网段:交由路由器进行转发

2.2. IP地址的分类

2.2.1. A类地址:默认子网掩码是255.0.0.0


网络ID:

  • 0不能用,127作为保留网段。其中127.0.0.1是本地环回地址(Loopback),代表本机地址。
  • 所以,可以分配给主机的,第1部分的取值范围是:1~126

主机ID:

  • 第2、3、4部分的取值范围是:0~255
  • 每个A类网络能容纳的最大主机数是:256 * 256 * 256 - 2 = 2的24次方 - 2 = 16777214

2.2.2. B类地址:默认子网掩码是255.255.0.0


网络ID:

  • 可以分配给主机的
    • 第1部分的取值范围是:128~191
    • 第2部分的取值范围是:0~255

主机ID:

  • 第3、4部分的取值范围是:0~255
  • 每个B类网络能容纳的最大主机数是:256 * 256 - 2 = 2的16次方 - 2 = 65534

2.2.3. C类地址:默认子网掩码是255.255.255.0


网络ID:

  • 可以分配给主机的
    • 第1部分的取值范围是:192~223
    • 第2、3部分的取值范围是:0~255

主机ID:

  • 第4部分的取值范围是:0~255
  • 每个C类网络能容纳的最大主机数是:256 - 2 = 2的8次方 - 2 = 254

2.2.4. D类地址:以1110开头,多播地址

D类地址没有子网掩码,用于多播(组播)地址。

第1部分取值范围是:224~239

2.2.5. E类地址:以1111开头,保留为今后使用

E类地址保留为今后使用。

第1部分取值范围是:240~255

只有A/B/C类地址才能分配给主机。

  • 主机ID为全0,表示主机所在的网段
  • 主机ID为全1,表示主机所在网段的全部主机(广播)
  • 可以尝试用ping给某个网段的全部主机发数据

三、子网掩码

3.1. CIDR

CIDRClassless Inter-Domain Routing):无类别域间路由。

子网掩码的CIDR表示方法:

  • 192.168.1.100/24,代表子网掩码有24个1,也就是255.255.255.0
  • 123.210.100.200/16,代表子网掩码有16个1,也就是255.255.0.0

计算工具:https://www.sojson.com/convert/subnetmask.html

3.2. 子网划分

为什么要进行子网划分?

如果需要让200台主机在同一个网段内,可以分配一个C类网段,比如192.168.1.0/24

  • 共254个可用IP地址:192.168.1.1 ~ 192.168.1.254
  • 多出54个空闲的IP地址(这种情况并不算浪费资源)

如果需要让500台主机在同一个网段内,那就分配一个B类网段,比如191.100.0.0/16

  • 共65534个可用IP地址:191.100.0.1 ~ 191.100.255.254
  • 多出65034个空闲的IP地址(这种情况属于极大的浪费资源)

如何尽量避免浪费IP地址资源?合理进行子网划分

子网划分:借用主机位做子网位,划分出多个子网。

  • 可分为:
    • 等长子网划分: 将一个网段等分成多个子网,每个子网的可用IP地址数量是一样的。
      • 比如172.16.0.0/16划分4个子网段,每个段可用IP地址就是6553个。
    • 变长子网划分: 每个子网的可用IP地址数量可以是不一样的。
      • 比如191.100.0.0/16划分3个子网段,第1段给512个IP地址,第2段给2048个IP地址,剩余的给最后一个网段。

子网划分器:http://www.ab126.com/web/3552.html

子网划分的步骤:

  • 确定子网的子网掩码长度
  • 确定子网中第1个、最后1个主机可用的IP地址

3.2.1. 等长子网划分

等分成2个子网:

A子网:

  • 网段:192.168.0.0
  • 子网掩码:255.255.255.128/25
  • 广播:192.168.0.127
  • 主机范围:192.168.0.1 ~ 192.168.0.126

B子网:

  • 网段:192.168.0.128
  • 子网掩码:255.255.255.128/25
  • 广播:192.168.0.255
  • 主机范围:192.168.0.129 ~ 192.168.0.254

等分成4个子网:

A子网:

  • 网段:192.168.0.0
  • 子网掩码:255.255.255.192/26
  • 广播:192.168.0.63
  • 主机范围:192.168.0.1 ~ 192.168.0.62

B子网:

  • 网段:192.168.0.64
  • 子网掩码:255.255.255.192/26
  • 广播:192.168.0.127
  • 主机范围:192.168.0.65 ~ 192.168.0.126

C子网:

  • 网段:192.168.0.128
  • 子网掩码:255.255.255.192/26
  • 广播:192.168.0.191
  • 主机范围:192.168.0.129 ~ 192.168.0.190

D子网:

  • 网段:192.168.0.192
  • 子网掩码:255.255.255.192/26
  • 广播:192.168.0.255
  • 主机范围:192.168.0.193 ~ 192.168.0.254

B类子网划分:

A类子网划分:

规律:要将子网等分为2^n个更小的子网,则子网掩码在原来基础上右移n位。

思考:下面两台设备是否能够正常通信?

答案:不能,因为不在同一个网段,计算机0的网段是192.168.0.0,计算机1的网段是192.168.0.128。要想让这两台设备进行通信,需要添加一个路由器即可。

3.2.2. 变长子网划分

如果一个子网地址块的长度是原网段的(1/2)^n,那么

  • 子网的子网掩码,就是在原网段的子网掩码基础上增加n个1
  • 不等长的子网,它们的子网掩码也不同

假设上图是对192.168.0.0/24进行变长子网划分
C网段:子网掩码是255.255.255.128/25
B网段:子网掩码是255.255.255.192/26
A网段:子网掩码是255.255.255.224/27
D网段:子网掩码是255.255.255.252/30
E网段:子网掩码是255.255.255.252/30

思考:下面两台设备是否能够正常通信?

答案:不能,因为不在同一个网段,计算机0的网段是192.168.0.0,计算机1的网段是192.168.10.0。要想让这两台设备进行通信,需要添加一个路由器即可。

分析:计算机0和计算机1通信时,只有计算机1的IP地址,没有计算机1的子网掩码,最终是拿着对方的IP地址和自己的子网掩码按位与计算出的网段,所以计算机1的网段是192.168.10.0,和计算机0不在同一个网段,也就无法进行通信。如果是计算机1和计算机0进行通信,两台设备的IP和计算机1的子网掩码按位与计算后网段都是192.168.0.0,可以向计算机0发送消息,但由于计算机0计算和计算机1不在同一个网段,计算机0就无法向计算机1回复消息,所以无法正常通信。

注意:IP地址的分类是看IP地址的第一部分属于哪一类的范围,子网掩码和IP地址分类没有任何关系。子网划分只能是2的指数。

3.3. 超网

超网:跟子网反过来,它是将多个连续的网段合并成一个更大的网段。

3.3.1. 合并2个网段

把网络部分划分出来给主机使用。上图划分后主机位后,192.168.0.0192.168.1.0的网段都是192.168.0.0,并且由于主机位高位增加了1位,所以主机数比之前多了一倍(具体还是要减2的—去除网段和广播地址)。

需求:原来有200台计算机使用192.168.0.0/24网段,现在希望增加200台设备到同一个网段。

  • 200台在192.168.0.0/24网段,200台在192.168.1.0/24网段
  • 合并192.168.0.0/24192.168.1.0/24为一个网段:192.168.0.0/23(子网掩码往左移动1位)

思考:192.168.0.255/23这个IP地址可以分配给计算机使用么?

答案:可以。因为主机部分实际是9位,此时主机位高位是0,并不是全部为1,因此这个IP地址不是广播地址,最终是可以分配给计算机使用的。如果把主机部分的高位变为1,实际的IP地址就是192.168.1.255/23(广播地址),这时候就不能分配给计算机使用了。

3.3.2. 合并4个网段

子网掩码向左移动2位,可以合并4个网段。

192.168.0.0/24192.168.1.0/24192.168.2.0/24192.168.3.0/24合并为192.168.0.0/22网段。

思考:下面的2个网段,能通过子网掩码向左移动1位进行合并么?

答案:不可以。因为192.168.2.0要想和192.168.1.0合并为同一个网段,必须向左移动两位才可以。

3.3.3. 合并网段的规律

假设n是2的k次幂(k≥1)

  • 子网掩码左移k位将能够合并n个网段
  • 如果第一个网段的网络号能被n整除,那么由它开始连续的n个网段,能通过左移k位子网掩码进行合并

比如:

  • 第一个网段的网络号以二进制0结尾,那么由它开始连续的2个网段,能通过左移1位子网掩码进行合并
  • 第一个网段的网络号以二进制00结尾,那么由它开始连续的4个网段,能通过左移2位子网掩码进行合并
1
2
3
4
5
6
0   192.168.0.0/24    192.168.0000 00|0|0.0
1 192.168.1.0/24 192.168.0000 00|0|1.0
2 192.168.2.0/24 192.168.0000 00|1|0.0
3 192.168.3.0/24 192.168.0000 00|1|1.0

上面就很容易看出,12左移1位是不能合并到同一个网段的。左移1位,01可以合并,23可以合并。左移2位,03可以合并。

一旦使用超网,其实就没有必要划分地址分类了。当然具体还是根据需求进行定制。

3.4. 判断一个网段是子网还是超网

  1. 首先
  • 看该网段的类型(IP地址分类)
  • 默认情况下,A类子网掩码的位数是8(255.0.0.0),B类子网掩码的位数是16(255.255.0.0),C类子网掩码的位数是24(255.255.255.0
  1. 然后
  • 如果该网段的子网掩码位数比默认子网掩码,就是子网
  • 如果该网段的子网掩码位数比默认子网掩码,就是超网

例:25.100.0.0/16是一个A类子网;200.100.0.0/16是一个C类超网。