Chilfish's avatar

Chilfish

IP协议

Chilfish
3007个字
cs
Warning
本文发布于 2022/11/12,内容可能已过时。

概述

IP 协议是整个 TCP/IP 协议族 的核心,也是构成互联网的基础,位于 TCP/IP 模型的网络层。用于屏蔽下层物理网络的差异,为上层提供统一的 IP 数据报

无连接的投递服务

发送端可于任何时候自由发送数据,而接收端永远不知道自己会在何时从哪里接收到数据。每个 IP 数据报独立处理和传输,一台主机发出的数据报序列,可能会走不同的路径, 甚至有可能其中的一部分数据报会在传输过程中丢失

不可靠的投递服务

IP 协议本身不保证 IP 数据报投递的结果。 在传输的过程中,IP 数据报可能会丢失、重复、延迟和乱序等, IP 协议不对内容作任何检测,也不将这些结果通知收发双方

IP 数据报的丢失,通过路由器发 ICMP 报文 告知; 必要时,由高层实体(如 TCP)负责差错恢复动作

尽力投递服务

每个数据链路上会规定一个最大传输单元 MTU,如果 IP 数据报的长度超过 MTU,那么网络层就会把这些报文分割成一个一个的小组(分组)进行传送,以适应具体的传输网络

IP 地址

概述

IP 地址是 IP 协议中非常重要的内容,IP 数据报中含有 收/发方的 IP 地址

那就是给因特网上的每台设备都规定了其全世界唯一的地址,叫做 “IP 地址”。正是由于有了 IP 地址,才保证了用户在连网的计算机上操作时,能够高效而且方便地从千千万万台计算机中选出自己所需的对象来

IP 地址就好像电话号码(地址码):有了某人的电话号码,你就能与他通话了。同样,有了某台主机的 IP 地址,你就能与这台主机通信了

IP 的作用就是在复杂的网络环境中将数据包发送给指定的主机
IP 的作用就是在复杂的网络环境中将数据包发送给指定的主机

按照 TCP/IP 协议规定,IP 地址用二进制来表示,每个 IP 地址长 32 比特,也就是 4 个字节(这里说的是 IPV4 地址长 32 比特 / 4 字节,而 IPV6 地址占 128 比特 / 16 字节)。那么,IPV4 地址的最大值就是 $2^{32} = 42,9496,7296$ ,也就是说:最多给大约 43 亿台接入互联网的设备配置其独一无二的 IPV4 地址,但在 2011 年 2 月 3 日,IPV4 就宣布耗尽了

一个采用二进制形式的 IP 地址是一串很长的数字,人们处理起来也太费劲了。为了方便人们的使用,IP 地址习惯性地被写成十进制的形式,使用 “.” 分开不同的字节。这种表示法叫做点分十进制表示法,这显然比一连串二进制地 1 和 0 容易记忆得多。举个例子:

IP 地址的格式

IP 地址由 网络地址主机地址 组成。网络地址是指某个局域网网段的标识,该网段内的主机们用主机地址来标识,因此同一网段内不允许有重复的主机地址。即 IP 地址在网段内有唯一性

IP 地址的主机标识
IP 地址的主机标识

而路由器接收包时,只要判断包的目标 IP 地址中的 网络地址 就能判断目标处于路由器内的哪个网段

IP 地址的网络标识
IP 地址的网络标识

网络地址和主机地址的分段点是由 子网掩码 来决定的,以及 IP 地址的分类

IP 地址的分类

A类地址

  • 第 1 字节为网络地址,其它 3 个字节为主机地址
  • 范围:1.0.0.1 — 126.255.255.254
  • 私有地址范围:10.0.0.0 - 10.255.255.25510.0.0.0/8
  • 0.0.0.0 为特殊地址,表示本网主机(例在 HTTP 服务中用 0.0.0.0 当 host,主机局域网内均可访问)

B类地址

  • 前两个为网络地址,后两个字节为主机地址
  • 范围:128.0.0.1 — 191.255.255.254
  • 私有地址: 172.16.0.0 — 172.31.255.255172.16.0.0/12
  • 如果你的 IP 地址是自动获取 IP 地址,而你在网络上又没有找到可用的 DHCP 服务器,就会得到其中一个 IP

C类地址

  • 前三个字节为网络地址,第 4 个个字节为主机地址。且第 1 个字节的前三位固定为 110
  • 范围:192.0.0.1 — 223.255.255.254
  • 私有地址:192.168.0.0 - 192.168.255.255192.168.0.0/16
  • 常用于小型局域网

D类地址

  • D 类地址不分网络地址和主机地址,它的第 1 个字节的前四位固定为 1110
  • 范围:224.0.0.1 — 239.255.255.254
  • 留给 Internet 体系结构委员会(IAB)使用【组播地址】

E 类地址

  • E 类地址不分网络地址和主机地址,它的第 1 个字节的前五位固定为 11110
  • 范围:240.0.0.1—255.255.255.254
  • 保留,仅作为搜索、Internet 的实验和开发用

特殊的 IP 段

网络号主机号是否可以作为源地址是否可以作为目的地址备注/描述
全为 0全为 0允许禁止表示本网主机
全为 0Host ID允许禁止表示特定主机
全为 1全为 1禁止允许定向广播地址
127任意合法的值允许允许迂回地址,用于本地测试
Network ID全为 1禁止允许直接广播地址

子网掩码

处于同一网段属于在同一路由器的子网中,而子网掩码是一种用来指明一个 IP 地址的哪些位标识的是主机所在的网络地址,以及哪些位标识的是主机地址的位掩码

自从引入了子网以后,一个 IP 地址就有了两种识别码。一是 IP 地址本身 另一个是表示网络部的子网掩码。子网掩码用二进制方式表示的话,也是一个 32 位的数字。它对应 IP 地址网络标识部分的位全部为“1”,对应 IP 地址主机标识的部分则全部为“0”

由此,一个 IP 地址可以不再受限于自己的类别,而是可以用这样的子网掩码自由地定位自己的网络标识长度。当然,子网掩码必须是 IP 地址的首位开始连续的“1”

子网的划分

类别起始位开始结束子网掩码
A00.0.0.0127.0.0.0255.0.0.0
B10128.0.0.0191.255.0.0255.255.0.0
C110192.0.0.0223.255.255.0255.255.255.0

子网的划分是一个将主机部分的若干位分配到网络部分的过程。例如,对于一个给定的 A 类网络:10.0.0.0,子网掩码:255.255.0.0 可以将其划分为 256 个子网(从 10.0.0.010.255.0.0)—— 第一个八位位组表示网络地址,第二个表示子网号,而最后两个表示主机部分。用子网掩码对主机地址进行位与操作,就能够提取出完整的子网地址

IP 地址的分配

IP 地址是在主机加入网络时动态分配的,或是通过主机硬件/软件的配置永久分配给主机的。永久性的配置也称为使用静态 IP 地址。相反,在每次重新启动时分配的 IP 地址,称为使用动态 IP 地址

动态 IP 地址是通过网络使用 动态主机配置协议(DHCP) 分配的。DHCP 是分配地址最常用的技术。它避免了为网络上的每台设备分配特定静态地址的管理负担。如果某些设备在特定的时间处于联机状态,它还允许设备共享网络上有限的地址空间。通常,默认情况下会启用动态 IP 地址分配(通常,重启路由器也会重新分配 IP)

DHCP 分配的地址于租约相关联,并且一般都是具有有效期。如果主机在到期前未能续订租约,则可以将该地址分配给其他设备中的一台设备。某些 DHCP 实现会在主机每次加入网络时根据其 MAC 地址尝试将相同的 IP 地址重新分配给该主机。网络管理员可以通过基于 MAC 地址分配特定的 IP 地址来配置 DHCP

用于网络设施的计算机和设备(例如:路由器或者邮件服务器等),通常配置为静态地址分配

在动态或者静态地址分配失效的情况下,操作系统可以将无状态地址自动配置,将链接本地的地址分配给主机

IPV4 数据报的首部格式

IPV4 报文的首部格式
IPV4 报文的首部格式

标识: 同一个 IP 数据报 的分片,使用相同的标识;IP 数据报大小超过 MTU 时,将数据报分片,分片完成的 IP 数据报分片,其标识都是相同的

标志: 由 3 位组成,$[48,50]$,只有 2 位有意义

  • 最高位: 是保留位,没有意义
  • 中间位: DF 位,Don’t Fragment;DF = 1 时 ,禁止分片;DF = 0 时,允许分片
  • 最低位: MF 位,More Fragment;MF = 1 时,后面还有分片;MF = 0 时,本分片就是该分组的最后一个分片,后面没有分片

只有 DF = 0 时,MF 才有意义

片偏移: 较长的分组的分片,中间的某个分片,在原来的 IP 分组中的相对位置;单位是 8 字节;也就是说除了最后一个分片,每个分片的长度是 8 字节的整数倍

IP 数据报的分片

当 IP 数据包的长度超过链路层的 MTU 时,IP 分片就会被使用。MTU 是指链路层数据传输的最大传输单元,它是硬件和网络协议的共同限制,通常为 1500 字节

分片的过程

  • 发送方的 IP 层将原始数据包分成一些小片,每个小片的大小不超过 MTU

  • IP 层在每个小片的头部中添加一个 IP 分片首部,其中包含片偏移、标识符和其他控制信息。其中,片偏移指定小片在原始数据包中的位置,标识符用于标识原始数据包

  • 将 IP 分片发送到网络中

  • 接收方的 IP 层接收所有分片,并将它们按顺序组装成原始数据包。组装过程使用分片首部中的片偏移和标识符信息来确定分片的顺序和关系

  • 如果一个分片在传输过程中丢失或无法组装,接收方的 IP 层会请求发送方重新发送数据

需要注意的是,IP 分片会增加网络负载和带宽占用,同时会降低网络性能和可靠性。因此,当可能出现 IP 分片时,建议尽量避免使用大的 IP 数据包,或者使用更高效的数据传输协议,如 UDP

分片的示例

IP 数据报:总长度为 3820 字节,其中数据部分 3800 字节,需要分片为不超过 1420 字节的数据报片。(同一个分组的分片,标识相同)

第一片

  • 分片数据:首部 1(20 字节)+ 1400 字节数据部分
  • 标志:DF = 0,允许分片; MF = 1,后续还有分片
  • 片偏移量:0,单位是 8 字节,本片偏移量相当于 0 字节

第二片

  • 分片数据:首部 2(20 字节)+ 1400 字节数据部分
  • 标志;DF = 0,允许分片 ; MF = 1,后续还有分片
  • 片偏移量:175,单位是 8 字节,本片偏移量相当于 1400 字节

第三片

  • 分片数据:首部 3(20 字节)+ 1000 字节数据部分
  • 标志:DF = 0,允许分片;MF = 0,后续没有分片
  • 片偏移量:350,单位是 8 字节,本片偏移量相当于 2800 字节