IP协议看这篇就够了


IP 协议的基本认知

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

IP1

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 地址会不断的发生变化。就像下图这样:

image-20211119104050308

IP 地址的分类

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

image-20211119105027526

从图中可以看出:橙色的叫做分类号,用以区分 IP 地址类别。其中对于 A、B、C 类主要分为两个部分,分别是网络号和主机号。那什么是网络号和主机号呢?

  • 网络号表示其属于互联网的哪一个网络。
  • 主机号表示其属于该网络中的哪一台主机。

那这两个是用来干什么的呢?

因为两台计算机要通讯,首先要判断是否处于同一个广播域内,即网络地址(网络号)是否相同:

  • 如果网络地址相同,表明接受方在本网络上(本地网络主机),那么可以把数据包直接发送到目标主机,无需转发给其他的网络。
  • 网络号不相同的主机称之为远程网络主机,远程网络中的主机要相互通信必须通过本地网关来传递转发数据。

路由器寻址工作中,也就是通过这样的方式来找到对应的网络号的,进而把数据包转发给对应的网络内。就像下图这样:

image-20211119111251428

那这样的分类方式有啥优点呢?

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

image-20211119112049255

那 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 类地址为例:

image-20211119193205837

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

image-20211119193801414

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

image-20211119193933690

为什么网络中的最大主机数为什么都要减 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 以外的其他链路上。如下图:

image-20211119201510421

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 的主机都能收到这个包。如下图所示:

image-20211119201800897

单播

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

image-20211119202159520

多播

上面我们讲了 A、B、C 类地址,D、E 类还没讲。D 类和 E 类地址是没有主机号的,所以不可用于主机 IP。多播使用 D 类地址,因此如果首位是 1110,就可以认为是多播地址,而剩下的 28 位可以称为多播的组编号。E 类是预留的分类,暂时未使用。

那么什么是多播(组播)呢?多播用于将包发送给特定组内的所有主机(可以穿透路由器),即一个发送方,特定的多个接收方。由于其直接使用 IP 协议,因此也不存在可靠传输。

在人们使用多播功能之前,一直采用广播的方式。通过广播将数据发送给所有终端主机,再由这些主机 IP 之上的一层去判断是否有必要接收数据。这种方式会给那些毫无关系的网络或主机带来影响,造成网络上很多不必要的流量。再者,由于我们在大部分情况下使用的本地广播是无法穿透路由的,所以多播这种既能够穿透路由,又可以实现只给那些必要的组发送数据包的技术就成为必选之路了。如下图所示:

image-20211119202933189

子网划分

为什么要进行子网划分

网络号相同的计算机属于同一个网络,以 B 类网络为例,网络号 16 位(除分类号 “10”,还有14 位),也就是说理论上一个链路上允许大约 2^16 ≈ 6 万台计算机连接。然而,在实际架构中,一般不会出现一个链路上连接这么多计算机的情况。因此,直接使用 A 类、B 类或 C 类地址,确实有些浪费资源,因此出现了子网划分来减少这种浪费。

子网划分

所谓子网划分就是:将传统的两级 IP 地址(网络号 + 主机号)转换成粒度更小的三级 IP 地址(网络号 + 子网号 + 主机号),也就是将主机地址划分为子网号和子网内的主机号。

image-20211119211615456

同样的,子网主机号不能全 0 或全 1。

注意:某单位划分子网后,对外仍表现为一个网络,即本单位外的网络看不见本单位内的子网划分。如下图所示,将网络地址 145.13.0.0 (B类地址)划分成 3 个子网,子网的网络地址分别为 145.13.3.0145.13.7.0145.13.21.0

所谓网络地址就是只指定了网络号,未指定主机号,主机号全 0。

子网的网络地址就是指定了网络号和子网号,未指定主机号,主机号全 0。

如下图所示:

image-20211119213154254

子网掩码

那么,子网具体是怎么划分的呢?

这里就需要引出一个新的概念:子网掩码 subnet mask。子网掩码只有一个作用,就是将某个 IP 地址划分成网络地址和主机地址两部分

子网掩码由一连串的 0 和 1 构成(0 或 1 必须连续),二级 IP 地址中的网络号和三级 IP 地址中的网络号 + 子网号对应到子网掩码中都用 1 来表示,而主机号对应到子网掩码中用 0 来表示。因此 A、B、C 类的子网掩码如下:

image-20211119214743397

将 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.1203.183.225.254 的地址合并为同一个网络(它们本来是 2 个 C 类地址):

image-20211119222616789

上例中,合并该区间的地址后,主机数为 2^9 - 2 = 510 个,也就是说从 203.183.224.1203.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


文章作者: Gtwff
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Gtwff !
  目录