IP 地址
# IP 地址
# 简单介绍
- IP 地址是一个网卡在网络世界的通讯地址,相当于我们现实世界的门牌号码。
- IP 地址并不是根据主机台数来配置的,而是以网卡。服务器、路由器等设备往往会有两个以上网卡,即两个以上的 IP 地址。
- IP 地址需要具有唯一性,如果地址冲突,会出现上不去网的情况。
- 大部分的网卡都会有一个 IP 地址,但这不是必须的。
# IP 地址组成
IP 地址是由「网络号」和「主机号」两个部分组成:
- 网络号:负责标识该 IP 地址是属于哪个「子网」的。
- 主机号:负责标识同一「子网」下的不同主机。
# IP 地址划分
前面说了 IP 地址有「网络号」和「主机号」两个部分,现在看看是怎么划分的。
# 五类划分
形如 10.100.122.2 这样的一个 IP 地址,它被点(.)分隔为四个部分,每个部分 8 个 bit,所以 IP 地址总共是 32 位。
这种 32 位的 IP 地址,还被分成了 5 类:
(五类 IP 地址的划分)
- 主机号全为 0 指定某个网络。
- 主机号全为 1 表示广播地址,即只有在同一个网络号内的主机才能收到这个广播消息,其它网络的收不到这个消息。
- 32 位全为 1 表示全局网络地址,主机将消息发给所有与它相连的计算机,不管它是不是在同一个网络号的。
在网络地址中,至少在当时设计的时候,对于 A、B、 C 类主要分两部分,前面一部分是网络号,后面一部分是主机号。
A、B、C 分类对应的地址范围、最大主机个数如下表所示:
(A、B、C 三类地址的地址范围和最大主机个数)
五类 IP 地址各地有其适用范围:
- A 类地址分配给规模特别大的网络使用。第一个字节表示网络本身的地址,后面三个字节作为连接于网络上的主机地址。例如 MS 和 IBM、阿里这样公司的网络。
- B 类地址一般分配给中型网络。
- C 类地址一般分配给小型网路,如一般的局域网和校园网,它连接的主机数量比较少,把用户分为若干段进行管理。
- D 类和 E 类地址是没有主机号的,所以不可用于主机 IP。
- D 类是一个保留的地址,不指向特定的网络,目前这一类地址被用在多点广播中。多点广播用来一次寻址一组计算机,它标识共享同一协议的一组计算机。
- E 类是预留的分类,暂时未使用。
但这种 IP 划分方式有一个缺点:
- C 类地址能包含的最大主机数量实在太少了,只有 254 个,估计一个大点的网吧都不够用。
- B 类地址能包含的最大主机数量又太多了,6 万多台机器放在一个网络下面,一般的企业基本达不到这个规模,闲着的地址就是浪费。
基于这两个缺点,于是有了 CIDR。
# 无类型域间选路(CIDR)
CIDR 这种方式打破了原来设计的几类地址的做法,将 32 位的 IP 地址一分为二,前面是网络号,后面是主机号。
举个例子:10.100.122.2/24,这个 IP 地址中有一个斜杠,斜杠后面有个数字 24。这种地址表示形式,就是 CIDR。
后面 24 的意思是,32 位里面前 24 位是网络号,后 8 位是主机号。
伴随着 CIDR 存在的,一个是广播地址(此处为 10.100.122.255)。如果发送这个地址,所有 10.100.122 网络里面的机器都可以收到。另一个是子网掩码(此处为 255.255.255.0)。
将子网掩码和 IP 地址进行 AND 计算。前面三个 255,转成二进制都是 1。1 和任何数值取 AND 都是原来数值,因而前三个数不变,为 10.100.122。后面一个 0,转换成二进制是 0,0 和任何数值取 AND 都是 0,因而最后一个数变为 0,合起来就是 10.100.122.0。这就是网络号。将子网掩码和 IP 地址按位计算 AND,就可得到网络号。
小贴士 1
CIDR 表示形式为 a.b.c.d/x,其中 /x 表示前 x 位属于网络号, x 的范围是 0 ~ 32,这就使得 IP 地址更加具有灵活性。
小贴士 2
子网掩码是一种用来指明一个 IP 地址的哪些位标识的是主机所在的网络。子网掩码是一个 32位 地址,用于屏蔽 IP 地址的一部分以区别网络标识和主机标识。
# 公有 IP 地址和私有 IP 地址
在日常的工作中,几乎不用划分 A 类、B 类或者 C 类,所以时间长了,很多人就忘记了这个分类,而只记得 CIDR。但是有一点还是要注意的,就是公有 IP 地址和私有 IP 地址。
- 私有 IP 地址:平时我们接触的办公室、家里或学校的 IP 地址,一般都是私有 IP 地址段。这些地址允许组织内部的 IT 人员自己管理、自己分配,而且可以重复。因此学校的某个私有 IP 地址段和公司的可以是一样的。
- 公有 IP 地址:有个组织统一分配,你需要去买。如果你搭建一个网站,给你学校的人使用,让你们学校的 IT 人员给你一个 IP 地址就行。但是假如你要做一个类似 4399 这样的网站,就需要有公有 IP 地址,这样全世界的人才能访问。
补全一下前面那张表:
(A、B、C 三类地址的地址范围和最大主机个数)
表格中的 192.168.0.x 是最常用的私有 IP 地址。家里有 Wi-Fi,对应就会有一个 IP 地址。一般家里的上网设备不会超过 256 个,所以 /24 基本就够了。有时候我们也能见到 /16 的 CIDR,这两种是最常见的,也是最容易理解的。
如果 CIDR 中 / 后面的是 8 的整数倍,那么不需要将十进制转换为二进制 32 位,就能明显看出 192.168.0 是网络号,后面是主机号。而整个网络里面的第一个地址 192.168.0.1,往往就是这个私有网络的出口地址。例如,家里的电脑连接 Wi-Fi,Wi-Fi 路由器的地址就是 192.168.0.1,而 192.168.0.255 就是广播地址。一旦发送这个地址,整个 192.168.0 网络里面的所有机器都能收到。
# 环回地址
环回地址是在同一台计算机上的程序之间进行网络通信时所使用的一个默认地址。他不会流向网络中。
计算机使用一个特殊的 IP 地址 127.0.0.1 作为环回地址。与该地址具有相同意义的是一个叫做 localhost 的主机名。使用这个 IP 或主机名时,数据包不会流向网络。
# MAC 地址
在 Linux 服务器上输入命令 ip addr:
root@study:~# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether fa:16:3e:c7:79:75 brd ff:ff:ff:ff:ff:ff
inet 10.100.122.2/24 brd 10.100.122.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::f816:3eff:fec7:7975/64 scope link
valid_lft forever preferred_lft forever
2
3
4
5
6
7
8
9
10
11
12
13
这个命令显示了这台机器上所有的网卡,其中:
10.100.122.2就是一个 IP 地址。- 在 IP 地址的上一行是
link/ether fa:16:3e:c7:79:75 brd ff:ff:ff:ff:ff:ff,这个被称为 MAC 地址。
MAC 地址是一个网卡的物理地址,用十六进制,6 个 byte 表示。
MAC 地址全局唯一,不会有两个网卡有相同的 MAC 地址,而且网卡自生产出来,就带着这个地址。它就像是身份证,是一个唯一的标识。
它的唯一性设计是为了组网的时候,不同的网卡放在一个网络里面的时候,可以不用担心冲突。从硬件角度,保证不同的网卡有不同的标识。
小贴士
MAC 地址只能是两个设备之间传递时使用的,如果要从大老远发消息进行通信,是离不开 IP 的。
MAC 地址配合 IP 地址的形象比喻:
送快递的时候,通过 IP 地址(门牌号码)定位到 xx 市 xx 路 xx 号 xx 楼 xx 层,然后通过 MAC 地址(身份证号)找到具体的某个人。
提问:arp 获取 MAC 地址只能获取到内网机器的 MAC 地址,那么公网服务器的 MAC 地址是在什么时机通过什么方式获取到的呢?
回答:在发送数据包时,如果目标主机不是本地局域网,填入的 MAC 地址是路由器,也就是把数据包转发给路由器,路由器一直转发下一个路由器,直到转发到目标主机的路由器,发现 IP 地址是自己局域网内的主机,就会 arp 请求获取目标主机的 MAC 地址,从而转发到这个服务器主机。
转发的过程中,源 IP 地址和目标 IP 地址是不会变的(前提:没有使用 NAT 网络的),源 MAC 地址和目标 MAC 地址是会变化的。
(完)