概述

IP 协议也称为网际协议(Internet Protocol),它是 TCP/IP 协议栈中最核心的协议之一,负责将数据包发送给最终的目标计算机。正是 IP 协议支持了世界上任何两台计算机之间进行通信。
IP(IPv4,IPv6)对应于 OSI 参考模型中的第三层(网络层),用于实现终端节点之间的通信,也称为点对点通信。在之前的文章中,我们已经了解了,数据链路层能够支持在同一个数据链路中的节点之间互相通信,而一旦跨越了数据链路后,就需要通过网络层来实现数据的传输了。
image.png

IP 基础知识

IP 寻址

我们知道,在计算机通信中,为了能够正常识别通信目标,必须要有一个地址来进行标识。例如,对于数据链路层通信而言,MAC 地址就是通信过程中的标识地址。而在网络层中,通信的目标地址就是 IP 地址。因此,在 TCP/IP 通信过程中,所有的主机和路由器都必须配置自己的 IP 地址后才能正常通信。
image.png

路由控制

路由控制是指将分组数据发送到最终目标地址的逻辑,路由控制一旦异常,将会导致数据包在复杂的网络世界中迷路,从而无法到达目标地址。因此,数据包能否正常发送到最终的目标地址路由控制起到了关键的作用。
image.png
事实上,IP 数据包正是在网络中通过 Hop 的方式被不断进行转发从而最终达到目的地。每次 Hop 的过程其实是依次计算的下一个路由或主机的地址,而不是直接通过最终目标地址提前将全部通路都计算出来。具体来说,当 IP 包到达路由器时,路由器首先根据其目标地址计算下一步包应该发送给哪个路由器,然后将数据包直接发送过程;当数据包到达下一个路由器后,再依次进行相同的操作,直到最后达到目标主机。
为了让主机/路由器能够正常将数据包发送给对应的下一个目标,所有主机/路由器其实都维护了一个路由控制表,IP 包正式根据这个路由表对 IP 数据包进行转发的。
image.png

IP分包和组包

IP 协议是实现多个数据链路之间通信的协议,因此它一定需要对不同的数据链路进行统一抽象。然而,不同的数据链路中,它们支持的最大传输单位(MTU)不同,类似于我们邮寄快递是包裹大小的要求可能不一致。当 IP 层传输的数据大于对应数据链路的 MTU 时,数据就必须进行分片传输了。为了解决这个问题,IP 协议支持了分片处理,具体来说,就是将较大的 IP 包分为多个较小的 IP 包,等到数据包到达对端目标地址后,再被组合起来传递给上一层。这样一来,对应上层业务而言,就完全屏蔽了不同的数据链路MTU之间的差异。
我们以快递运输为例,那么就如下图所示:
image.png

面向无连接型传输

IP 协议是无连接类型的传输,具体来说,在发送数据包之前不需要建立对应目标地址之间的连接。那么,IP 协议为什么是面向无连接的呢?核心的目的就是简化和提速。
PS:由于无连接型传输的可靠性低,因此为了高可靠性,通常我们基于 TCP 协议来提供可靠的、面向有连接的数据传输。

IP 地址详解

在 TCP/IP 通信过程中,IP 地址用于识别主机和路由器。

IP地址的定义

IP地址(IPv4)由32位正整数表示,在计算机内部,IP 地址是以二进制方式进行处理等。而人类设备不习惯于二进制模式,因此就将32位的IP地址以每8位为一组,分成4组,每组以 . 隔开,再转化成十进制数。
示例如下:
image.png
在 IP 地址中,IP 地址本质上其实是由网络标识(网络地址)和主机标识(主机地址)两部分来组成。
image.png
如上图所示,在不同的网络链路中网络标识的配置也不同,即必须满足的是相互连接的每个段的地址不会重复,而同一个数据链路段中的网络标识配置一定相同,同时主机标识在同一个段不同。正是通过网络标识和主机标识的组合,IP 地址从而具备了唯一性。
image.png
PS:在路由器转发IP包的过程,仅需要根据网络标识即可判断出将IP包转发到对应的数据链路中。

知道了 IP 地址由网络标识和主机标识两部分组成之后,那么具备哪几位算是网络标识?哪几位算是主机标识呢?针对这点有两种不同的方式:

  • IP 地址分类
  • 子网掩码

下面,我们来分别看一下。

IP 地址的分类

早期,人们将 IP 地址分为了四个类型:A 类、B 类、C 类和 D 类。

  • A 类地址以 0 开头,第1位到第8位是它的网络标识,转化为十进制区间就是 0.0.0.0 ~ 127.0.0.0 是 A 类网络地址。A 类地址的后 24 位是主机标识,因此,一个网段内可容纳的主机地址上限为 16,777,214 个。
  • B 类地址以 10 开头,第1位到第16位是它的网络标识,转化为十进制区间就是 128.0.0.1 ~ 191.255.0.0 是 B 类网络地址。B 类地址的后 16 位是主机标识,因此,一个网段内可容纳的主机地址上限为 65,534 个。
  • C 类地址以 110 开头,第1位到第24位是它的网络标识,转化为十进制区间就是 192.168.0.0 ~ 239.255.255.0 是 C 类网络地址。C 类地址的后 8 位是主机标识,因此,一个网段内可容纳的主机地址上限为 254 个。
  • D 类地址以 1110 开头,32 位全部都是它的网络标识,从 224.0.0.0 开始都是 D 类地址。它没有主机标识,主要用于多播的场景。

image.png

在 IP 地址中,主机地址全部是0或者全部是1时,它们具备一些特殊函数。全部是0时仅当IP地址不确定时使用,全部是1时表示它是广播地址。

广播与多播

在开始讲解子网掩码之前,我们先来看一下网络通信过程中的广播与多播相关概念。
在上文中,我们已经提到如果对于一个IP地址而言,其主机地址全部是1时,则表示该地址是一个广播地址。而广播又分为本地广播和直接广播两种。

  • 本地广播是指在本网络内部的广播,该广播地址的 IP 包会被路由器屏蔽,不会发送给当前数据链路之外的其他链路上;
  • 不同网络之间的广播则叫做直接广播,例如由 192.168.0.0/24 主机发送给 192.168.1.255/24 目标地址。此时,收到这个包的路由器将数据转发给 192.168.1.0/24,将会使得所有 192.168.1.1 - 192.168.1.254 的所有主机都能收到这个包。

image.png
了解了广播的概念后,我们再来看一下什么是 IP 多播吧。
多播可以用于将IP包发送给特定组内的所有主机,例如常用于视频会议等场景。相比广播而言,多播具有如下优势:

  • 可以穿透路由器
  • 避免无效数据发送

PS:多播通常使用 D 类地址进行传播。
image.png

子网掩码

在 IP 地址分类的场景下,一个 IP 地址是要确定了其分类,也就确定了它的网络标识和主机标识。其中,针对一个 B 类IP地址而言,一个链路中允许有65000+台计算机。然而,实际的网络环境中,很少会在同一个网络链路上连接六万多台计算机,从而导致了大量的主机标识对应的IP地址被浪费。
为此,人们提出了一种新的 IP 地址标识方法 - 子网掩码。子网掩码是一种替代IP地址分类的方法。
子网掩码中,一个 IP 地址包含了两种识别码:

  • IP 地址本身
  • 网络标识部门的子网掩码,它本身也是一个32位的数字,其中网络位标识全部是1,主机位全部是0。其中,子网掩码必须是IP地址的首位开始连续的1。

这样一来,IP 地址就不需要按照分类来区分网络标识和主机标识,而是通过子网掩码部分来进行区分。
由于子网掩码部门针对的网络表示全部是1,因为,也可以直接简化为对应1的数量。
例如:172.20.100.52/26 则表示前26位都是网络标识,只有后6位是主机标识。
image.png
使用子网掩码的方式来代替IP地址的分类这一方案也称为 CIDR(无分类域间路由选择)方法。
在 CIDR 应用到互联网的初期,网络内部不同部门之间都是采用固定长度的子网掩码机制。然而,由于部门之间的大小存在差异,人们又提出了VLSM(可变长子网掩码)技术,从而能够实现在组织内部不同部门之间采用不同的子网掩码。

全局地址与私有地址

早期,互联网中的任何一台主机或者路由器都必须配有一个唯一的IP地址。然而,随着计算机和互联网的发展,IP 地址不足的问题日趋明显,很快会存在耗尽的问题。于是就出现了一种新的技术:它不要求为每台主机/路由器分配一个固定的IP地址,而是在必要的时候才为相应数量的设备分配唯一的IP地址。
那么什么是必要的时候?例如,如果一台计算机只需要连接一个独立网络,而不需要接入互联网时,我们只需要保证当前网络内IP地址唯一即可,不需要与互联网全局唯一。针对这种场景,人们提出了私有网络,并定义了一定的规范:

  • A 类私有网络:10.0.0.0 - 10.255.255.255(10/8)
  • B 类私有网络:172.16.0.0 - 172.31.255.255(172.16/12)
  • C 类私有网络:192.168.0.0 - 192.168.255.255(192.168/16)

包含在这个 IP 范围内的 IP 地址都属于私有 IP,除此之外的 IP 地址均为全局 IP。

起初,私有 IP 没有连接互联网的需求,只用于独立网络。然而,随着一种能够互换私有IP和全局IP的NAT技术诞生之后,配置有私有IP的主机也能够通过配置有全局IP的主机实现互联网的通信。目前,大部分学校、家庭、公司都是为每个终端分配一个私有IP,而在路由器上配置一个全局IP,从而通过NAT实现互联网访问。
image.png
既然提到了全局 IP 地址的唯一性和稀缺性,那么全局 IP 地址究竟是由谁来管理呢?世界范围内,全局 IP 由 ICANN 机构进行管理,而在每个国家中,可能又会存在一些代理机构进行国家内部的统一管理。
早期的互联网用户可能需要直接向 IP 管理机构申请全局 IP,而目前,我们只需要向通信运营商(联调、移动等公司)申请开通服务后,它们会帮助我们申请对应的 IP。

路由控制详解

IP分包与组包详解

IPv6

IP 包首部

IP 协议相关技术