本文概览
IP 协议
Internet Protocol,工作在网络层。网络层将数据从一台计算机传输到另一台计算机,即使该计算机位于远程网络上,而数据链路层仅处理本地的设备。IP 协议的核心目标是实现分组交换(packet-switched)网络中的数据传输。为了实现此目标,IP 协议需要提供寻址、封装和路由的功能。
寻址(Address)和路由(Route)的区别 寻址,表示设备处于什么位置,而路由,表示该如何到达那里。IP 协议最主要的目的是处理寻址,即确保数据包能够通过网络传递到目标地址。
IP 协议的主要作用
IP 协议的作用是 end-to-end transmission,即端对端传输。这里的 end 并不是表示最终处理报文的应用进程,而是表示应用进程所在的设备,因此 end-to-end transmission 也被称为 host-to-host transmission。IP 协议必须了解网络的拓扑结构(即所有路由器和链路的集合),并在其中选择适当的路径。
IP 协议主要解决三个问题,如何寻址、如何路由和数据包如何正确传输。1
- 寻址,即如何标识数据包目的设备的位置
- 路由,如何将数据包送达至目的设备
- 正确传输,即在异构网络中如何能将数据包正确、完整的送达至目的设备
解决“寻址”
网络层需要提供给传输层一个统一的网络地址,即使在局域网和广域网之间也是如此,这个统一的网络地址就是 IP 地址。IP 协议借助 IP 地址完成寻址和路由的功能。需要注意的是,每个网络设备都可能有多个 IP 地址,所以“寻址”寻的是网络接口,即 Addressing host interfaces,而不是某一设备 Addressing host。
网络层“寻址” VS 数据链路层“寻址”
在快速理解网络协议(三)MAC 层中我们提到数据链路层通过 MAC 地址来解决寻址的问题。那么在网络层的“寻址”和数据链路层的“寻址”有什么区别?
- 适用的网络范围不同
- 数据链路层的“寻址”是在局域网中“寻址”
- 网络层的“寻址”是在广域网中“寻址”
- 主要目的不同
- 数据链路层“寻址”的主要目的是在直接相连的设备间传输数据
- 网络层“寻址”的主要目的是在不同的网络间传递数据
解决“路由”
IP 协议通过路由来实现数据包在网络间的传输,路由是根据目标地址选择适当的路径将数据包从源主机(网络设备)传递到目标主机(网络设备)的过程。IP 地址的网络号部分用于路由控制。
IP 协议路由的基本步骤如下:
-
解析目标 IP 地址
通过 IP 地址的网络号部分,判定源 IP 地址和目标 IP 地址是否同属于一个网络。若属于同一个网络,则直接发送至目标设备。(详情参见快速理解网络协议(四)ARP、RARP 协议)
-
查找路由表
源主机在其本地的路由表中查找到达目标网络的合适路由,根据该记录转发数据包到相应的下一个路由器。路由表是一个存储网络路径信息的表格,其中包含了到达不同网络的下一跳路由器的信息。这样每次都转发至下一跳,以接力棒的方式逐跳转发直到目标服务器。从本质上讲,它形成了互联网,并使用逻辑寻址系统并执行路由,即将数据包从源主机转发到距离另一个网络上的预期目标主机更近一跳的下一个路由器。
-
决定下一跳
路由表中的每条表项都包含一个目标 IP 地址和一个子网掩码,路由器在查找时会与数据包的目标 IP 地址进行比较。当路由表中有多条相同的网络地址的记录,选择与目标 IP 地址最长匹配(最长前缀匹配)的路由表项。
-
封装和传输
按照 IP 协议填充字段值,封装数据包并转发。
-
送达至目标设备
数据包最终到达目标设备,解析数据包头部,根据目标 IP 地址确定是自己的数据包后,将数据包传递给上层应用程序。
解决“正确传输”
由于在数据链路层,存在各种异构的物理网络,不同硬件的网络不仅传输速度不同,而且最大传输单元(MTU)也不同。为了适应各种异构物理网络的约束,当数据包“经过”不同的网络时,每个网络可能有不同的 MTU,因此需要对其数据包进行分片 Fragmentation,并在接收端完成重组 Reassembly。
我们最常见的数据链路是以太网,它的 MTU 为 1500 字节。当一个“大数据包”被分片成多个“小数据包”,其中的一个“小数据包”丢失,会导致整个“大数据包”无效。TCP 协议使用 MSS(Maximum Segment Size)指定一个 TCP 连接中的 TCP 数据报文段(segment)的最大大小。TCP 连接的每个数据段由 TCP 层负责分割和重组,避免在 IP 层分片。而对于 UDP,则尽量不要发送一个大于 MTU 的数据报文。
IP 地址
IP 地址是网络层提供给传输层的一个统一的网络地址,因此 **IP 地址是一个逻辑地址,使得网络设备能够通过这个逻辑地址在全球范围内进行通信,而不需要关心物理网络的细节。**逻辑地址是在网络协议级别上分配的,与物理硬件地址(如 MAC 地址)不同。
IP 地址的作用
上文我们提到过,IP 协议借助 IP 地址完成寻址和路由的功能,IP 地址中包含两个部分,网络号(Network Number)和主机号(Local Address)
网络号,用于标识一个子网或网络,当数据在网络中传递时,路由器等三层设备使用网络部分来确定数据应该被发送到哪个网络。
主机号,用于标识在该网络中的具体设备(网络接口)。
因此,IP 地址有两个主要功能
- 主机号:标识主机,或更具体地说是其网络接口
- 网络号:提供主机在网络中的位置,从而提供建立到该主机的路径的能力
IP 地址 vs MAC 地址
MAC 地址是指网络设备的硬件地址,是由网络设备的制造商烧录在设备的网卡中的一个全球唯一的地址,如果一台设备有多个网卡,则每个网卡都需要并会有一个唯一的 MAC 地址。MAC 地址共 48 位(6 个字节),以十六进制表示。
既然 MAC 地址是全球唯一的地址,为什么我们还需要 IP 地址呢?
如果在网络设备很少的情况下,这么做是完全没问题的,事实上,在早期的以太网中,网络设备使用 MAC 地址进行直接通信,而没有使用 IP 地址。这些网络主要是局域网,设备通过广播机制来交换数据。而随着局域网中的设备逐渐增多,会带来两个问题,一个是物理介质传输时的碰撞概率上升,另一个是交换机中的 MAC 地址表条目数过多,如果内存中放不下,每次通信交换机都会发出广播报文寻找具体的目标设备,这样会占用大量的网络带宽资源。于是,大家开始将一个大的网络划分成很多个小网络,即划分子网。划分子网之后,如果仍旧只使用 MAC 地址通信,那么其转发数据包的网络设备(通常是路由器)需要记住每个 MAC 地址所在的子网是哪一个,这个庞大的数量不是我们所能接受的。
更近一步的,出现了 IP 地址。首先,IP 地址是逻辑地址,不依赖于物理的连接方式。因此可以在逻辑层次上自行分配 IP 地址。对于同一个子网上的设备,其被分配的子网掩码是相同的,即 IP 地址的网络部分相同。路由器通过 IP 地址的网络号来确定设备所在的子网,在路由时将子网当作一个整体来计算,在子网内部的“寻址”子网自行解决。这样可以大大简化计算逻辑和计算数量。
区别 | IP 地址 | MAC 地址 |
---|---|---|
通信范围 | 广域网 WAN | 局域网 LAN |
用途 | 在网络通信中用于逻辑寻址 | 在局域网中用于物理寻址 |
模型层级 | 在网络层(第三层)使用,提供逻辑标识 | 在数据链路层(第二层)使用,提供物理标识 |
分配方式 | 自行分配,手动或自动(DHCP) | 通常由网络适配器制造商分配 |
IP 地址 CIDR 详解查看:快速理解网络协议(一) IP 地址、MAC 地址
IPv4
IPv4(Internet Protocol version 4)是 IP 协议的第四个版本。IP 数据包由包头部分和数据部分组成。
IPv4 数据包格式
IPv4 头具体格式如图所示
- 版本:指定 IP 协议的版本,4 表示 IPv4,占用 4 bits
- 首部长度 IHL:表示 IP 头的长度,占用 4 bits,其数值表示几个 32 位,如 IHL 为 5,则表示 5 * 32 = 160 bit = 20 Bytes
- 区分服务:用于标识网络中不同类型的数据流,只有在使用区分服务时,此字段才有作用,占用 6 bits
- 显示拥塞通告:可选功能,在两端都支持且底层网络支持时可被使用,占用 2 bits
- 全长:IP 数据报总长度,包括 IP 首部和 IP 数据部分的长度,占用 16 bits
- 标识符:唯一标识一个 IP 数据报的所有分片,占用 16 bits
- 标志:用于控制和识别报文的分片,占用 3 bits
- 分片偏移:用于标识每个分片相对于原始报文开头的偏移量,占用 13 bits
- 生存时间:用于防止 IP 数据报在网络中无限循环,作为跳数计数器,每经过一个路由都会减 1,为0时,将丢弃该数据报,占用 8 bits
- 协议:表示 IP 数据报中使用的上层协议类型,例如 TCP、UDP 等,占用 8 bits
- 首部校验和:用于检验 IP 首部(不包括数据部分)在传输过程中是否有错,占用 16 bits
- 源地址:IP 数据报的源地址
- 目的地址:IP 数据报的目的地址
- 选项:其他附加信息,首部长度必须是 32 的倍数,若不满足则填充 EOL(0x00),直至满足
可以看到 IPv4 字段主要包含以下几个部分
- 标识设备:Source IP、 Destination IP
- 分片和重组:Identification、Flags、Fragment Offset
- 边界信息:Total Length、Header Length
- 流量控制:DSCP、ECN
- 防止路由环路:TTL
- 上层应用:Protocol
- 完整性校验:Checksum
下篇继续 IPv4 抓包实践及 IPv6 数据包格式
-
IP 协议提供的 2 个基本功能:https://datatracker.ietf.org/doc/html/rfc791#section-1.4 ↩︎