IP详解

互联网使用的是 TCP/IP 协议,其中 IP 协议又是最重要的协议之一。 IP 协议是基于 IP 地址将数据包发送给目的主机,能够让互联网上任何两台主机进行通信。

IP 协议位于 OSI 参考模型的第三层,即网络层。网络层的主要作用是实现终端节点之间的通信。这种终端节点之间的通信,也叫点对点通信。

  • 主机:配置有 IP 地址,不进行路由控制的设备。
  • 路由器:既有 IP 地址又具有路由控制功能的设备。
  • 节点:主机和路由器的统称。

数据如何传输到目的地?

数据链路层实现两个直连设备之间的数据传输,网络层的 IP 协议实现没有直连的两个网络之间的数据传输。

以旅行为例,小美要去一个很远的地方旅行,先计划要乘坐的高铁、地铁、公交车,并且购买相应车票,再制定一个详细行程表,记录乘车时间。

高铁票、地铁票只能在一个区间内移动,就像网络上的数据链路。出发点就像源 MAC 地址,目的地就像目的 MAC 地址,整个行程表的作用就相当于网络层,出发点就像源 IP 地址,目的地就像目的 IP 地址。

小美如果只有行程表,没有车票,就无法乘坐交通工具到达目的地。相反,小美只有车票,不知道坐什么车,在哪里换乘,恐怕也到不了目的地。只有两者兼备,既有某个区间的车票又有整个旅行的行程表,才能保证到达目的地。网络中也需要数据链路层和网络层协同工作,才能实现最终目的地址的通信。

IP 地址的基础知识

在 TCP/IP 通信中使用 IP 地址识别主机和路由器。 IP 地址是逻辑地址,需要手工配置或自动获取,为了保证正常通信,每个设备必须配置 IP 地址。

IP 地址的定义

IP 地址由 32 位二进制数组成。为了方便记录,将 32 位的 IP 地址分为 4 组,每 8 位为一组,每组以.隔开,再将每组数转换为十进制数。

常用二进制数与十进制数的转换

IP 地址一共有多少个?

将 IP 地址的32位二进制进行计算,得出约 43 亿个 IP 地址。

232 = 4294967296

实际上,网络的发展超乎想象,互联网上的设备远超 43 亿,2019 年 11 月 25 日全球的 IPv4 地址已经彻底耗尽,但是直到现在大家仍然还在用 IPv4,并没有因为地址没了而无法上网。是因为除了 IPv6 之外,我们使用 NAT 技术缓解了地址不足的问题。

IP 地址的组成

IP 地址由网络号(网段地址)和主机号(主机地址)两部分组成。

网络号是设备所在区域的一种标识,网络号相同的设备位于同一个网段内,网络号不同的设备通过路由器实现通信。主机号是在同一个网段中不同设备的标识,不允许同一个网段内出现重复的主机号。

路由器是根据目的 IP 地址的网络号进行路由。

那么 IP 地址哪几位是网络号?哪几位是主机号?早期是以分类地址区分,现在是以子网掩码区分。

IP 地址的分类

IP 地址分为四类,分别是 A 类、B 类、C 类、D 类(还有一个保留的 E 类)。分类地址使用的是固定网络位数,A 类 8 位网络号,B 类 16 位网络号,C 类 24 位网络号。既可以通过判断分类地址类型( A 类、B 类、C 类其中之一)识别出网络号,也可以通过子网掩码识别出网络号。

A 类地址

A 类 IP 地址是首位以 0 开头的地址。从第 1 位到第 8 位是它的网络号,网络号的范围是0~127。其中 0 和 127 属于保留地址,减去两个保留地址,因此有 28-1-2=126 个可用的 A 类地址。

后 24 位是主机号,一个 A 类地址的主机地址数量就是 224,即 16777216 个主机地址。其中主机位全为 0 和主机位全为 1 分别为网段地址和广播地址,不能分配给主机使用,每个 A 类地址可用的主机地址就是 224-2 = 16777214 个。

A 类地址的范围是1.0.0.0 ~ 126.255.255.255

A 类地址子网掩码是255.0.0.0,也可写作/8

B 类地址

B 类 IP 地址是前两位以 10 开头的地址。从第 1 位到第 16 位是它的网络号,网络号的范围是128.0~191.255。其中128.0191.255属于保留地址,减去两个保留地址,因此有 216-2-2=16382 个可用的 B 类地址。

后 16 位是主机号,一个 B 类地址的主机地址的数量就是 216,即 65536 个主机地址。其中网段地址和广播地址不能分配给主机使用,每个 B 类地址可用的主机地址就是65536–2=65534个。

B 类地址的范围是128.0.0.0~191.255.255.255

B 类地址子网掩码是255.255.0.0,也可写作/16

C 类地址

C 类 IP 地址是前三位以 110 开头的地址。从第 1 位到第 24 位是它的网络号,网络号的范围是192.0.0~223.255.255。其中192.0.0223.255.255属于保留地址,减去两个保留地址,因此有 224-3-2=2097150 个可用的 C 类地址。

后 8 位是主机号,一个 C 类地址的主机地址的数量就是 28,即 256 个主机地址。其中网段地址和广播地址不能分配给主机使用,每个 C 类地址可用的主机地址就是256–2=254个。

C 类地址的范围是192.0.0.0 ~ 223.255.255.255

C 类地址子网掩码是255.255.255.0,也可写作/24

D 类地址

D 类 IP 地址是前四位以1110开头的地址。从第 1 位到第 32 位是它的网络号,网络号的范围是224.0.0.0~239.255.255.255。D 类地址没有主机号,用于组播。

当主机号全为 0 时,表示的是网段地址,非主机地址。当主机号全为 1 时是广播地址,也不是主机地址。因此在分配 IP 地址过程中,需要排除这两个地址。例如一个 C 类地址192.168.1.0/24最多只有 254 个可用主机地址,而不是 256 个。

总结

类别 IP 地址范围 私有 IP 地址范围
A 0.0.0.0~127.255.255.255 10.0.0.0~10.255.255.255
B 128.0.0.0~191.255.255.255 172.16.0.0.0~172.31.255.255
C 192.0.0.0~223.255.255.255 192.168.0.0~192.168.255.255
网络类别 最大网络数 第一个可用的网络号 每个网络中最大的主机数 每个网络中的最大主机数
A 126(27 – 2) 1 126 16,777,214
B 16,383(214 - 1) 128.1 191.255 65,534
C 2,097,151(221 - 1) 192.0.1 223.255.255 254

一般不使用的特殊的 IP 地址,这些地址只能在特定的情况下使用:

网络号 主机号 源地址使用 目标地址使用 代表的意思
0 0 可以 不可 在本网络上的本主机
0 主机号 可以 不可 在本网络上的某台主机主机号
全1 全1 不可 可以 只在本网络上进行广播(各路由器均不转发)
网络号 全1 不可 可以 对 网络号 上的所有主机进行广播
127 非全0或全1的任何数 可以 可以 用于本地软件环回测试

广播地址

网段地址是主机号全为 0 的地址,表示某个网段,比如:网段地址192.168.10.0/24表示的是网络号为192.168.10的所有地址。

IP 地址中的主机号全部为 1 的就是广播地址,它是向同一个网段中的所有主机发送数据包。例如一个 B 类主机地址172.20.1.100的广播地址是172.20.255.255

IP 组播

组播用于将包发送给特定组内的所有主机。

组播使用 D 类地址。因此 IP 地址前四位是1110开头的,就是组播地址。剩下的 28 位就是组播的组编号。组播的地址范围是224.0.0.0 ~ 239.255.255.255,其中224.0.0.0 ~ 224.0.0.255既可以在同一个网段内实现组播,又可以跨网段给全网所有组员发送组播包。

子网掩码

早期网络地址采用固定网络位长度的方式,使 IPv4 地址遭到大量浪费。如今网段地址的长度可变,同时也需要一种标识来获取网段地址,以便路由器对数据包进行转发,这种识别码就是子网掩码。

子网掩码用 32 位的二进制表示,IP 地址的网段地址部分设置为 1,IP 地址的主机地址部分设置为 0。换句话说,IP 地址有多少位网段地址,子网掩码就有多少位取 1,其余都取 0。为了方便记录,每 8 位为一组,以.隔开,再转换为十进制数。

例如:201.20.100.25的子网掩码是255.255.255.0,算出它的网段地址。

将子网掩码和 IP 地址进行与(AND)运算,可得到这个 IP 地址的网段地址。

与(AND)运算

IP 地址和子网掩码的二进制数,逐位进行计算。只有当 IP 地址和掩码都是 1 时,运算结果为 1。其余情况计算结果都为 0。

IP 地址的另一种表示方式是在每个 IP 地址后面追加网络号的位数用/隔开。例如:201.20.100.25/255.255.255.0可表示为201.20.100.25/24

CIDR 与 VLSM

解决 IP 地址浪费问题,除了使用子网掩码,还使用了 CIDR 和 VLSM 技术。

CIDR,即无类域间路由,采用任意长度分割 IP 地址的网络号和主机号。它有两个作用:

  • 把多个网段聚合到一起,生成一个更大的网段;
  • 汇总路由表 IP 地址,分担路由表压力。

VLSM,即可变长子网掩码,它可以对 A、B、C 类地址再进行子网划分,以达到充分利用 IP 地址的目的。

假如一家企业有 100 台电脑,按以前的办法,只能分配一个 C 类地址222.222.222.0。但是 VLSM 可以在一个 C 类地址上划分出多个子网地址,再分配其中一个容纳主机数量与稍大于企业需求数量的子网地址给企业,这样就可以实现 IP 地址的合理使用。

计算容纳 100 台电脑的子网:使用主机号的位数计算出子网的主机地址数量。当主机号有 7 位时,有 126 个可用主机地址,可容纳 100 台电脑。

计算子网地址:当主机号有 7 位时,网络号有 32 – 7 = 25 位,也就是222.222.222.0/24向主机位借了一位作为子网位,那么子网掩码也就是255.255.255.128。可分配222.222.222.0/25使用。

222.222.222.0/25子网详情:

CIDR 和 VLSM 的区别

CIDR 是主机号向网络号借位,目的是把几个网络汇总成一个大的网络,增加子网主机数量;

VLSM 是网络号向主机号借位,目的是把一个标准的网络划分成几个子网,减少子网主机数量。

子网划分

子网划分是从 IP 地址主机位的最左边开始,把主机位划入网络位,得到多个子网地址。主机位变成网络位的部分叫做子网号,划分后的子网数量等于 2 的 N 次方,N 等于子网号的位数。

即每把一位主机位变成网络位,一个网段地址就变成两个子网地址,子网地址的地址数量只有原来网段地址的一半。

举个栗子

一个学校有 150 台电脑,有三个电脑室,每个电脑室 50 台电脑。使用私有地址 192.168.0.0/24 给每个电脑室都分配一个网段地址。

网络规划步骤:

  1. 每个电脑室 50 台电脑,计算出子网地址的主机位是 6 位。
  2. 计算子网地址的网络位,即 32 – 主机位 = 26 位。
  3. 使用私网地址192.168.0.0/24分配三个主机位同为 26 位的子网地址。子网号有 2 位,因此可以划分出 4 个大小相同的子网地址。
  4. 按照子网号从小到大的顺序,分配 3 个子网地址给电脑室使用。即分配192.168.0.0/26、192.168.0.64/26、192.168.0.128/26这三个子网地址。

再来个栗子

一个公司有 157 人,市场部 100 人,技术部 50 人,行政部 4 人,财务部 3 人,每人一台办公电脑。使用私有地址192.168.100.0/24分别为每个部门划分网络地址。

网络规划步骤:

  1. 按照需要 IP 地址数量,从大到小依次进行子网划分。先计算有 100 人的市场部所需子网的主机位是 7 位。
  2. 计算市场部所需子网地址的网络位,即 32 – 主机位 = 25 位。
  3. 使用私网地址192.168.100.0/24分配第一个主机位为 25 位的子网地址,即192.168.100.0/25
  4. 保证与第一个子网地址不重复的前提下,使用未分配的子网值最小的子网地址,计算第二个需要分配的子网地址。即使用192.168.100.128/25分配第二个子网地址给技术部(50 人)使用。重复步骤 1 ~ 3,计算出第二个子网的主机位是 6 位,网络位是 26 位,第二个子网地址是192.168.100.128/26
  5. 保证与前面两个子网地址不重复的前提下,使用未分配的子网值最小的子网地址,计算第三个需要分配的子网地址。即使用192.168.100.192/26分配第三个子网地址给行政部(4 人)使用。重复步骤 1 ~ 3,计算出第三个子网的主机位是 3 位,网络位是 29 位,第三个子网地址是192.168.100.192/29
  6. 依次类推,计算给财务部(3 人)使用的第四个子网地址。得出第四个子网的主机位是 3 位,网络位是 29 位,第四个子网地址是192.168.100.200/29

超网合并

与子网划分相反,把一些小网络组合成一个大网络就是超网合并。

192.168.3.64/26192.168.3.128/26可以合并吗?

192.168.3.64/26192.168.3.128/26不能合并。

当子网掩码向左移动一位时,网络号不相同,无法合并;

当子网掩码向左移动两位是,网络号是相同了,但是合并了四个网段,非192.168.3.64/26192.168.3.128/26合并。

结论:子网掩码左移一位,且网络号相同,能够合并两个网段;左移两位,且网络号相同,能够合并四个网段;左移三位,能够合并八个网段。依次类推。

公网地址与私有地址

IP 地址分为公网地址和私有地址。公网地址是在互联网上使用的,私有地址是在局域网中使用的。

公网地址由 Internet NIC 负责分配,通过它直接访问互联网。

私有地址是一段保留的 IP 地址。只在局域网中使用,无法在互联网上使用。但是私有地址可以通过 NAT 技术,将私有地址转换为公网地址接入互联网。

公网 IP 地址在互联网范围内是唯一的,私有 IP 地址只要在同一个局域网内唯一即可。在不同局域网内出现相同的私有 IP 不会影响使用。

IP数据报的格式

一个 IP 数据报由首部和数据两部分组成。首部的前一部分是固定长度,共 20 字节,是所有 IP 数据报必须具有的。在首部的固定部分的后面是一些可选字段,其长度是可变的。

各字段含义

  1. 版本:占 4 位,指 IP 协议的版本。通信双方使用的 IP 协议的版本必须一致。IPv4 的版本号是 4。
  2. 首部长度:占 4 位,可表示的最大数值是 15(1111) 个单位,一个单位是 4 字节,因此 IP 的首部长度的最大值是 60 字节。没有可选项的 IP 包,首部长度为 5,即 20 字节(4×5=20)。
  3. 区分服务:占 8 位,用来说明数据是要加速传输还是精确传输,以及数据在传输过程中是否遇到了拥塞。只有在使用区分服务(DiffServ)时,这个字段才起作用。在一般的情况下都不使用这个字段。
  4. 总长度:占 16 位,指首部和数据之和的长度,单位为字节,因此数据报的最大长度为 216 - 1 = 65535 字节。总长度必须不超过最大传送单元 MTU。
  5. 标识:占 16 位,它是一个计数器,用于分片重组。同一个分片的标识值相同,不同分片的标识值不同。通常,每发送一个 IP 包,它的值也逐渐递增。另外,即使 ID 相同,如果目标地址、源地址或协议不同的话,也会被认为是不同的分片。
  6. 标志:占 3 位,表示分片信息。每比特的具体含义:
    比特位 含义
    0 未使用,现在必须是 0
    1 表示是否可以进行分片
    0——可以分片
    1——不能分片
    2 被分片时表示是否为最后一个包
    0——最后一个分片包
    1——分片中段的包
  7. 片偏移:占 13 位,表示分片在整个数据包中的位置。作用是告诉重组分片的设备,应该按照什么样的顺序重组数据包。片偏移以 8 个字节为偏移单位。
  8. 生存时间:占 8 位,记为 TTL(Time To Live),表示数据包可以经过的中转路由器数量。数据报能在因特网中经过的路由器的最大数值是 255。每经过一个路由器,TTL 会减少 1,直到变成 0 则丢弃改包,避免数据包在网络中无限传递。
  9. 协议:占 8 位,表示 IP 上一层所使用的协议。常见的 IP 上层协议有 TCP 和 UDP。
  10. 首部校验和:占 16 位,用来校验数据包的头部是否被破坏。设备会丢弃校验失败的数据包。IPv6 以取消头部校验和字段,通过上层的 TCP 或 UDP 校验协议是否正确。
  11. 源地址:占 32 位。表示发送端 IP 地址。
  12. 目的地址:占 32 位。表示接收端 IP 地址。
  13. 可选字段:选项字段的长度可变,从 1 个字节到 40 个字节不等,取决于所选择的项目。增加可选字段是为了增加 IP 数据报的功能,但这同时也使得 IP 数据报的首部长度成为可变的。这就增加了每一个路由器处理数据报的开销。实际上这个字段很少使用。在 IPv6 协议中已经取消。
  14. 填充:在有可选字段的情况下,头部长度不是 32 比特的整数倍时,通过向字段填充 0,调整为 32 比特的整数倍。

首部检验和的计算过程

IP 分片与重组

数据链路不同, MTU 则不同

每种数据链路的最大传输单元(MTU)不同,网络层的 IP 是数据链路的上一层,IP 通过分片屏蔽数据链路的差异,实现不同数据链路互通。从 IP 的上一层看,它完全可以忽略各个数据链路上的 MTU,只需要按照源 IP 地址发送的长度接收数据包。

数据链路 MTU(字节)
IP最大MTU 65535
IP over ATM 9180
FDDI 4352
以太网 1500
PPP(Default) 1500
IEEE 802.3 Ethernet 1492
PPPoE 1492
IP最小MTU 68

IP 报文的分片与重组

当遇到 IP 数据包大于数据链路 MTU 时,往往无法直接发送出去,主机或路由器就会对 IP 数据包进行分片处理。

经过分片后的 IP 数据,只会在目标主机上进行重组,中途经过路由器时不会进行重组。

路径MTU发现

分片机制有两点不足:

  • 加重路由器的处理性能;
  • 在分片传输中,一旦某个分片丢失,会造成整个 IP 数据包作废。

为了解决这个问题,要使用路径 MTU 发现(Path MTU Discovery)技术。路径 MTU 是指从发送端主机到接收端主机之间不需要分片时最大 MTU 值。即路径中存在的所有数据链路中最小的 MTU。路径 MTU 发现是从发送主机按照路径 MTU 的值将数据报分片后进行发送,避免在中途的路由器上进行分片处理。

路径 MTU 发现的工作原理如下:
发送端主机发送 IP 数据包时将其头部的分片禁止标志位设置为 1 。根据这个标志位,途中的路由器即使收到需要分片的大包,也不会分片,而是直接将包丢弃。之后通过一个 ICMP 不可达消息将数据链路上 MTU 值给发送端主机。

发送端主机根据收到的 MTU 值对数据包进行分片处理,再把 IP 数据包发送给相同的目的主机。如此重复,直到数据包被发送到目标主机为止没有再收到任何 ICMP,就认为最后一次 ICMP 所通知的 MTU 即是一个合适的 MTU 值。MTU 值至少可以缓存约 10 分钟,在这 10 分钟内使用刚得到的 MTU,过了 10 分钟后就重新做一次路径 MTU 发现。

上面的例子是 UDP,如果是在 TCP 的情况下,根据路径 MTU 的大小计算出最大段长度(MSS),然后再根据这些信息进行数据包的发送。因此,在 TCP 中如果使用路径 MTU 发现,IP 层则不会再分片。

打赏
  • Copyrights © 2017-2023 WSQ
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信