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 台主机。
引用地址: