IP 协议的基本认知
IP(Internet Protocol)协议,中文叫网际协议 ,是位于网络层的一个协议。它用于屏蔽下层物理网络的差异,为上层提供统一的 IP 数据报。就像下面这样:

IP 协议的特点:IP 协议提供无连接的、不可靠的、尽力的数据报投递服务:
- 无连接的投递服务:发送端可于任何时候自由发送数据,而接收端永远不知道自己会在何时从哪里接收到数据。每个 IP 数据报独立处理和传输, 一台主机发出的数据报序列,可能会走不同的路径, 甚至有可能其中的一部分数据报会在传输过程中丢失。
- 不可靠的投递服务:IP 协议本身不保证 IP 数据报投递的结果,在传输的过程中,IP 数据报可能会丢失、重复、延迟和乱序等, IP 协议不对内容作任何检测,也不将这些结果通知收发双方。
- 尽力投递服务:每个数据链路上会规定一个最大传输单元 MTU,如果 IP 数据报的长度超过 MTU,那么网络层就会把这些报文分割成一个一个的小组(分组)进行传送,以适应具体的传输网络。
IP 地址
IP 地址的基本认知
IP 地址(IPv4 地址)由 32
位正整数来表示,IP 地址在计算机是以二进制的方式处理的。而人类为了方便记忆采用了点分十进制的标记方式,也就是将 32 位 IP 地址以每 8 位为组,共分为 4
组,每组以「.
」隔开,再将每组转换成十进制。
IP 地址的作用:在 TCP/IP 网络通信时,为了保证能正常通信,每个设备都需要配置正确的 IP 地址,否则无法实现正常的通信,IP 地址是全世界唯一的。
我们知道了IP地址有32位,那么 IP 地址的最大值就是 2^32 ,大约是43亿。那么意味着理论上最大允许 43 亿台计算机连接到网络。但是实际却不是这样,IP 地址并不是根据主机台数来配置的,而是以网卡。像服务器、路由器等设备都是有 2 个以上的网卡,也就是它们会有 2 个以上的 IP 地址。
IP 地址与 MAC 地址
这里简单的说一下 IP 地址与 MAC 地址的关系(什么,你不知道 MAC 地址,等我???)。那既然有了 MAC 地址,为啥还要 IP 地址呢?
MAC 的作用则是实现直连的两个设备之间通信,而 IP 则负责在没有直连的两个网络之间进行通信传输。怎么理解这句话呢?
我们知道 IP 是网络层的,网络层指定了从哪个主机(源 IP 地址)发送到哪个主机(目的 IP 地址),源 IP 地址和目标 IP 地址在传输过程中是不会变化的。而数据链路层则是根据 MAC 地址在一个接一个的区间中进行传输的,每个区间内的出发地址即源 MAC 地址,每个区间内的目的地址即目的 MAC 地址。显然,随着数据的传输,源 MAC 地址和目的 MAC 地址会不断的发生变化。就像下图这样:

IP 地址的分类
IP 地址分类成了 5 种类型,分别是 A 类、B 类、C 类、D 类、E 类,如下图所示:

从图中可以看出:橙色的叫做分类号,用以区分 IP 地址类别。其中对于 A、B、C 类主要分为两个部分,分别是网络号和主机号。那什么是网络号和主机号呢?
- 网络号表示其属于互联网的哪一个网络。
- 主机号表示其属于该网络中的哪一台主机。
那这两个是用来干什么的呢?
因为两台计算机要通讯,首先要判断是否处于同一个广播域内,即网络地址(网络号)是否相同:
- 如果网络地址相同,表明接受方在本网络上(本地网络主机),那么可以把数据包直接发送到目标主机,无需转发给其他的网络。
- 网络号不相同的主机称之为远程网络主机,远程网络中的主机要相互通信必须通过本地网关来传递转发数据。
路由器寻址工作中,也就是通过这样的方式来找到对应的网络号的,进而把数据包转发给对应的网络内。就像下图这样:

那这样的分类方式有啥优点呢?
不管是路由器还是主机解析到一个 IP 地址时候,我们判断其 IP 地址的首位是否为 0,为 0 则为 A 类地址,那么就能很快的找出网络地址和主机地址,就像下图这样:

那 A、B、C 分类对应的地址范围,最大主机数如下表所示:
类别 | IP 地址范围 | 最大主机数 |
---|---|---|
A | 0.0.0.0 ~ 127.255.255.255 | 16777214 |
B | 128.0.0.0 ~ 191.255.255.255 | 65534 |
C | 192.0.0.0 ~ 233.255.255.255 | 254 |
但是上面的地址并不是都可用,我们看下表:
类别 | 第一个可用网络号 | 最后一个可用网络号 |
---|---|---|
A | 1 | 126 |
B | 128.1 | 191.255 |
C | 192.0.1 | 223.255.255 |
下面我们看看第一个可用的网络号如何计算出来的?以 B 类地址为例:

那为啥是128.1而不是128.0呢?因为网络号全 0 代表此网络,因此可用的网络号应该是从1开始。就像下图这样:

那最后一个可用网络号是怎么计算出来的呢?很简单,就是网络号全是 1 即可,如下图:

为什么网络中的最大主机数为什么都要减 2 呢?
首先我们要明白,计算网络中的最大主机数就是要看主机号的位数,比如 B 类地址的主机号占 16 位,那么 B 类地址的最大主机个数就是 2^16 - 2 个。为什么要减 2 呢?
那是因为主机号全为 0 和主机号全为 1 的这两个 IP 地址是特殊的,主机号全为 1 指定某个网络下的所有主机,用于广播;主机号全为 0 指定某个网络。
IP 单播/广播/多播
广播
上面我们提到了主机号全为 1 指定某个网络下的所有主机,用于广播,那么什么是广播呢?
广播地址用于在同一个链路中相互连接的主机之间发送数据包,即一个发送方对应多个接收方。接收方在接收到数据包之后,可以根据自己的需要选择接收还是丢弃。
广播地址可以分为本地广播和直接广播两种:
1)在本网络内广播的叫做本地广播。例如网络地址为 192.168.0.0/24
(这种 IP 表示我们下文会讲解)的情况下,广播地址是 192.168.0.255
。因为这个广播地址的 IP 包会被路由器屏蔽(即路由器不转发该广播包,广播包无法穿透路由器),所以不会到达 192.168.0.0/24
以外的其他链路上。如下图:

2)在不同网络之间的广播叫做直接广播。例如网络地址为 192.168.0.0/24
的主机向 192.168.1.255/24
的目标地址发送 IP 包。收到这个包的路由器,将数据转发给 192.168.1.0/24
,从而使得所有 192.168.1.1
~ 192.168.1.254
的主机都能收到这个包。如下图所示:

单播
广播模式下,有一个发送方,多个接收方,而在单播模式下,只有一个发送方和一个接收方。单播是可以穿透路由器的,也即路由器会对数据包其进行转发:

多播
上面我们讲了 A、B、C 类地址,D、E 类还没讲。D 类和 E 类地址是没有主机号的,所以不可用于主机 IP。多播使用 D 类地址,因此如果首位是 1110,就可以认为是多播地址,而剩下的 28 位可以称为多播的组编号。E 类是预留的分类,暂时未使用。
那么什么是多播(组播)呢?多播用于将包发送给特定组内的所有主机(可以穿透路由器),即一个发送方,特定的多个接收方。由于其直接使用 IP 协议,因此也不存在可靠传输。
在人们使用多播功能之前,一直采用广播的方式。通过广播将数据发送给所有终端主机,再由这些主机 IP 之上的一层去判断是否有必要接收数据。这种方式会给那些毫无关系的网络或主机带来影响,造成网络上很多不必要的流量。再者,由于我们在大部分情况下使用的本地广播是无法穿透路由的,所以多播这种既能够穿透路由,又可以实现只给那些必要的组发送数据包的技术就成为必选之路了。如下图所示:

子网划分
为什么要进行子网划分
网络号相同的计算机属于同一个网络,以 B 类网络为例,网络号 16 位(除分类号 “10”,还有14 位),也就是说理论上一个链路上允许大约 2^16 ≈ 6 万台计算机连接。然而,在实际架构中,一般不会出现一个链路上连接这么多计算机的情况。因此,直接使用 A 类、B 类或 C 类地址,确实有些浪费资源,因此出现了子网划分来减少这种浪费。
子网划分
所谓子网划分就是:将传统的两级 IP 地址(网络号 + 主机号)转换成粒度更小的三级 IP 地址(网络号 + 子网号 + 主机号),也就是将主机地址划分为子网号和子网内的主机号。

同样的,子网主机号不能全 0 或全 1。
注意:某单位划分子网后,对外仍表现为一个网络,即本单位外的网络看不见本单位内的子网划分。如下图所示,将网络地址 145.13.0.0
(B类地址)划分成 3 个子网,子网的网络地址分别为 145.13.3.0
、145.13.7.0
、145.13.21.0
:
所谓网络地址就是只指定了网络号,未指定主机号,主机号全 0。
子网的网络地址就是指定了网络号和子网号,未指定主机号,主机号全 0。
如下图所示:

子网掩码
那么,子网具体是怎么划分的呢?
这里就需要引出一个新的概念:子网掩码 subnet mask。子网掩码只有一个作用,就是将某个 IP 地址划分成网络地址和主机地址两部分
子网掩码由一连串的 0 和 1 构成(0 或 1 必须连续),二级 IP 地址中的网络号和三级 IP 地址中的网络号 + 子网号对应到子网掩码中都用 1 来表示,而主机号对应到子网掩码中用 0 来表示。因此 A、B、C 类的子网掩码如下:

将 IP 地址与子网掩码做按位 AND(与)运算(只有两个都为 1,结果才为 1,否则为 0),得出的就是网络地址。
IPV4 地址
随着全球上网用户量越来越大,现行的 IPV4 地址越来越不够用,拯救枯竭的 IPV4 地址势在必行:
- 方案一:无分类 IP 地址 CIDR
- 方案二:NAT 地址转换
- …
然而,这些方案仅仅是解决燃煤之急,相对缓解了 IPV4 地址不够用的问题,但是 IPV4 地址的数量本身有限的事实无法改变,最根本的解决办法还是使用 128 比特的 IPV6 地址。
无分类 IP 地址 CIDR
CIDR 就是采用任意长度分割 IP 地址的网络号和主机号,像a.b.c.d/x
,其中 /x
表示前 x 位属于网络号, x 的范围是 0 ~ 32
,这就使得 IP 地址更加具有灵活性。
比如 10.100.122.2/24,这种地址表示形式就是 CIDR,/24
表示前 24 位是网络号,剩余的 8 位是主机号。
CIDR 把网络号都相同的连续 IP 地址组成一个 CIDR 地址块。这样,我们就可以把原来的多个 IP 地址合并成同一个网络,更有效的利用 IPV4 地址。举个例子,应用 CIDR 技术将 203.183.224.1
到 203.183.225.254
的地址合并为同一个网络(它们本来是 2 个 C 类地址):

上例中,合并该区间的地址后,主机数为 2^9 - 2 = 510 个,也就是说从 203.183.224.1
到 203.183.225.254
的这个网络内允许接入 510 台主机。
引用地址:
https://mp.weixin.qq.com/s?__biz=MzUxODAzNDg4NQ==&mid=2247484043&idx=1&sn=8e71338b2e62e7a6a7caaa7eb12defab&chksm=f98e4621cef9cf37ec18e1778dfac0c9bf46d056236c8df346f4e14af20f00f39c7019166512&scene=178&cur_album_id=1337204681134751744#rd
https://mp.weixin.qq.com/s?__biz=MzI0NDc3ODE5OQ==&mid=2247484306&idx=1&sn=0498760c107b773d01a79c340c7f3fcd&scene=19#wechat_redirect