ARP
- ARP(Address Resolution Protocol),地址解析协议,通过 IP 地址获取 MAC地址
RARP
- RARP(Reverse Address Resolution Protocol),逆地址解析协议,使用与 ARP 相同的包头结构,作用域 ARP 相反,用于将 MAC 地址转换为 IP 地址,后来被 BOOTP、DHCP 取代
ARP 缓存相关命令
-
arp -a [主机地址]: 查询 ARP 缓存
-
arp -d [主机地址]: 删除ARP 缓存
-
arp -s 主机地址 MAC 地址: 增加一条缓存信息(这是静态缓存,存储时间比较久,不同系统的存储时间不同)
-
当一台主机的网卡坏了之后,更换了新的网卡,消息还能发出去吗?
如果ARP 里已经有这台主机的 IP 和 MAC 的映射,就会根据这个映射去找目标主机,这时主机的 MAC 对不上,不会响应这条消息,当源主机收不到目标主机的响应就会重新发送一个 ARP 广播来获取目标主机的 MAC 地址,并缓存在 ARP 缓存中。
MAC 地址
- 每个网卡都有一个 6 字节(48bit)的 MAC 地址(Media Access Control Address)
|组织唯一标识符|网络接口标识符|
| - | - |
| 40-55-82| 0A-8C-6D|- 前3 个字节: OUI(Organizationally Unique Identifier),组织唯一标识符,由 IEEE 的注册管理机构分配给厂商
- 后 3 个字节:网络接口标识符,由厂商自行分配
- 当48 位全为1 或 FFFFFFFFFFFF 时,表示是广播MAC地址
- 每个 MAC 地址都是全球唯一的,它固化在了网卡的 ROM 中,由 IEEE802标准规定
- 操作系统层面可以修改 MAC 地址,但这里修改的不是固化在网卡里面的MAC 地址,而是用来欺骗路由器或者交换机的
MAC 地址获取
- 当不知道对方主机的 MAC 地址时,可以通过发送 ARP 广播获取对方的 MAC 地址
- 获取成功后,会缓存 IP 地址、MAC 地址的映射信息,俗称:ARP 缓存
- 通过 ARP 广播获取的 MAC 地址,属于动态(dynamic) 缓存, 存储时间比较短(默认两分钟),过期了就会自动删除
- 通过自己手动添加的属于静态缓存,静态的会存储的比较久,可能电脑关机重启了都不会变
IP 地址
- ip 地址(Internet Protocol Address): 互联网上的每一个主机都有一个 IP地址
- 最初是 IPv4 版本,32bit(4 字节),2019 年 11 月 25 日,全球 IP 地址已经用完
- 后面推出了 IPv6 版本,128bit(16 字节)
- 通常为了方便,我们将 ip 地址转换为十进制显示
IP 地址的组成
-
IP 地址由 2 部分组成:网络标识(网络 ID)、主机标识(主机 ID)。通过子网掩码可以得知网络 ID、主机 ID
-
主机所在的网段 = 子网掩码 & IP 地址。
- 比如: IP 地址为:192.168.1.10 ,子网掩码为255.255.255.0 的主机所在网段为:
1100 0000.1010 1000. 0000 0001. 0001 0100
&1111 1111 . 1111 1111 . 1111 1111 . 0000 0000
=1100 0000.1010 1000. 0000 0001. 0000 0000 (十进制为 192.168.1.0)
子网掩码和 ip 按位与的结果就是网段.所以192.168.1.10所在网段为 192.168.1.0, 子网中的主机号不能全部是 0,因为全部为零表示的是网段号 - 与子网掩码全部为 1 的部分对应的 ip 就是网络 id,与 0 对应的部分就是主机 id, 所以192.168.1.10的网络 id 就是 192.168.1, 主机 id 就是 10
- 一个网段最多只能有最大主机id - 2 个主机号 ,因为全为 0 的表示是网段号, 全为 1 的表示广播号,代表的是给这个网段的所有主机都发广播
- 比如: IP 地址为:192.168.1.10 ,子网掩码为255.255.255.0 的主机所在网段为:
-
计算机和其他计算机通信前,会先判断目标主机和自己是否在同一网段。同一网段: 不需要由路由器进行转发。不同网段: 交由路由器进行转发
IP地址分类
- 只有A/B/C 类地址才能分配给主机
- 主机位全为 0 的,表示主机所在网段
- 主机 ID 全为 1,表示主机所在网段的全部主机(广播)
- 可以尝试用 ping 给某个网段的全部主机发数据
A类地址:
- 默认子网掩码是 255.0.0.0
- 0 不能作为网络 id, 127 作为网络 id 的保留网段,其中 127.0.0.1 是本地回环地址,代表本机地址
- 可分配给网路 id 的取值范围时 1~126
- 第 2、3、4 字节作为主机 id,其取值范围都是 0~255
- 每个 A类网络能容纳的最大主机数是 256256256-2 = 224 - 2 个
8 bit | 24 bit |
---|---|
网络 ID 0 开头 | 主机 ID |
B类地址
- 默认子网掩码是 255.255.0.0
- 网络部分第一字节的取值范围是: 128 ~ 191,第二字节取值范围是:0 ~ 255
- 第三第四字节作为主机 id ,取值范围都是 0~255
- 每个 B类网络能容纳的最大主机数是 256 * 256 -2 = 216 - 2 个
16 bit | 16 bit |
---|---|
网络 ID 10 开头 | 主机 ID |
C类地址
- 默认子网掩码是 255.255.255.0
- 第1、2、3 字节作为网络 id ,第一字节的取值范围是:192~223, 第 2、3 字节的取值范围是:0~255
- 第 4 字节作为主机 id ,取值范围是 0~255, 每个 C类网络能容纳的最大主机数是 256 - 2 = 254 个
24 bit | 8 bit |
---|---|
网络 ID 110 开头 | 主机 ID |
D 类地址
- 以 1110 开头,多播地址, 第一字节取值范围 224~239
E类地址
- 以 1111 开头,保留为今后使用,第一字节取值范围是 240~255
子网掩码
- 子网掩码的作用就是用来算网段(网络号)
子网掩码的 CIDR表示方法
- CIDR (Classess Inter-Domain Routing): 无类别域间路由
- 192.168.1.100/24, 表示子网掩码有 24 个 1,也就是 255.255.255.0
- 123.210.100.200/16 表示子网掩码有 16 个 1,也就是 255.255.0.0
子网划分
为什么要进行子网划分
-
如果需要让 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 地址数量是一样的
变长子网划分: 每个子网的可用 IP 地址数量是不一样的 - 子网划分步骤
1、确定子网的子网掩码长度
2、确定子网中第 1 个、最后1 个主机可用的 IP 地址
等分成2个子网

等分成4个子网

等分成 8 个子网

等分成 4 个子网的广播地址

变长子网划分

超网
- 跟子网反过来,它是将多个连续的网段合并成一个更大的网段
- 需求 : 原本有 200 台计算机使用 192.168.0.0/24 网段,现在希望再增加 200 台设备到同一网段
- 200 台在 192.168.0.0/24 网段, 200 台在 192.168.1.0/24 网段
- 合并 192.168.0.0/24、192.168.1.0/24 为一个网段: 192.168.0.0/23(子网掩码往左移 1 位)

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

将 192.168.0.0/24、192.168.1.0/24、192.168.2.0/24、192.168.3.0/24 合并为 192.168.0.0/22 网段
合并网段的规律
- 假设 n 是 2 的 k 次幂(k≥1)
- 子网掩码左移 k 位能够将合并 n 个网段

- 假设 n 是 2 的 k 次幂(k≥1)
- 如果第一个网段的网络号能被 n 整除,那么由它开始连续的 n 个网段,能够通过左移 k 位子网掩码进行合并
- 比如:
- 第一个网段的网络号以二进制 0 结尾,那么由它开始连续的 2 个网段,能通过左移 1 位子网掩码进行合并
- 第一个网段的网络号以二进制 00 结尾,那么由它开始连续的 4 个网段,能通过左移 2 位子网掩码进行合并
- 第一个网段的网络号以二进制 000 结尾,那么由它开始连续的 8 个网段,能通过左移 3 位子网掩码进行合并
ip | 二进制 |
---|---|
192.168.0.0/24 | 192.168.0000 0000. 0000 0000 |
192.168.1.0/24 | 192.168.0000 0001. 0000 0000 |
192.168.2.0/24 | 192.168.0000 0010. 0000 0000 |
192.168.3.0/24 | 192.168.0000 0011. 0000 0000 |
观察上面我们可以看出 0.0 和 1.0 左移 1 位子网掩码后,它们的网络号变得相同(都是 192.168.0000 000),
而 1.0 和 2.0 左移 1 位子网掩码后,它们的网络号依然不相同,一个是192.168.0000 000 另一个是 192.168.0000 001 ,所以 1.0 和 2.0 不能通过左移一位进行合并; 那如果左移两位它们的网络号不是变的一样的了, 左移两位它们的网络号是变得一样了,但是如果左移两位,浪费的一半的 IP 地址。
而 2.0 和 3.0 又可以通过左移一位后使得网络号变为一致,都为 192.168.0000 001
判断一个网络是子网还是超网
- 首先: 看看该网段的类型,是 A类网络、B 类网络、C 类网络? 默认情况下,A类子网掩码的位数是 8, B 类子网掩码的位数是 16,C 类子网掩码的位数是 24
- 然后: 如果该网段的子网掩码位数比默认子网掩码多,就是子网, 如果该网段的子网掩码位数比默认子网掩码少,则是超网
- 比如: 25.100.0.0/16 是一个 A类子网 ; 200.100.0.0/16 是一个 C 类超网。
- 下面两台主机可以通信吗?

这是网线直连的通信方式, 只要保证两台主机在同一网段,那么两台主机之间就可以通信。
我们分别计算两台主机的网络号:
计算机 0:
1100 0000. 1010 1000. 0000 0000. 0000 1010 (IP:192.168.0.10)
&1111 1111 . 1111 1111 . 1111 1111. 0000 0000 ( 子网掩码:255.255.255.0)
= 1100 0000. 1010 1000 0000 0000 0000 0000 (网络号:192.168.0.0)
计算机 1:
1100 0000. 1010 1000. 0000 1010. 0000 1010 (IP:192.168.0.10)
&1111 1111 . 1111 1111 . 1111 1111. 0000 0000 ( 子网掩码:255.255.0.0)
= 1100 0000. 1010 1000 0000 0000 0000 0000 (网络号:192.168.0.0)
通过上面的计算,我们发现计算机 0 和计算机 1 的网络号都是 192.168.0.0, 所以他们在同一网段,是可以通信的。
上面计算网段的算法没问题,但是计算机 0 在向计算机 1 发信息的时候,是先分析计算机 1 和计算机 0 是否处在同一网段,那计算机 0 是怎么分析是否和计算机 1 是否处在同一网段了,使用子网掩码, 使用计算机 0 的子网掩码和计算机 1 的 ip 做按位与的运算,为什么是用计算机0 的子网掩码呢?因为计算机 0 只知道计算机 1 的 ip,不知道计算机 1 的子网掩码,所以我们使用计算机 0 的子网掩码和计算机1 的 ip 再进行按位与的运算
1100 0000. 1010 1000. 0000 1010. 0000 1010 (IP:192.168.0.10)
&1111 1111 . 1111 1111 . 1111 1111. 0000 0000 ( 子网掩码:255.255.255.0)
= 1100 0000. 1010 1000. 0000 1010. 0000 0000 (网络号: 192.168.10.0)
这次计算出来的计算机 1 的网络号是192.168.10.0 和计算机 0 的192.168.0.0 明显不一样,所以 这两台计算机不能通信
如果是计算机 1向计算机 0 发信息呢?
计算机 1 用自己的子网掩码(255.255.0.0) 和 计算机 0 的 ip(192.168.0.10) 按位与计算出来的网段是 255.255.0.0, 是和自己的网段一致的, 计算机1 可以向计算机 0 发信息,但是计算机 0 收到后不能向计算机 1 返回信息,因为计算机 0 算出来和计算机不在同一网段。
- 192.168.0.255/23 这个 IP 地址,可以分配给计算机使用么?
其二进制位: 1100 0000.1010 1000.0000 0000.1111 1111
前 23 位为网络号,后 9 位为主机号, 主机号全为 0 的是网段号,全为 1 的是广播号,除了这两个不给主机使用,其他的都可以,我们看192.168.0.255的主机号是 0 1111 1111 既不是全为0,也不是全为 1 。所以可以给计算机使用
网友评论