Fork me on GitHub

IP 协议相关技术

IP(Internet Protocol)旨在让最终目标主机收到数据包,但是这一过程中仅仅有 IP 是无法实现通信的,还必须具有解析主机名、MAC 地址以及数据包在发送过程中异常情况处理等功能。

下文将详细介绍 IP 的各种辅助技术,主要包括:

  • DNS
  • ARP
  • DHCP
  • NAT
  • Mobile IP

DNS

通常来说,我们在访问某个网站时不会直接使用 IP 地址,而是使用类似于 www.chuquan.me 这样的域名进行访问。为什么使用域名就能访问目标地址?因为有 DNS(Domain Name System)的支持,其可以将域名转换为具体的 IP 地址。

DNS 的产生

在互联网的起源 ARPANET 中,起初由互联网信息中心(SRI-NIC)整体管理一份 hosts 文件,记录 ARPANET 网中所有计算机的 IP 地址。由于主机的 IP 地址可以变更,所以其他计算机也需要定期下载最新的 hosts 文件才能正常使用网络。

随着网络规模的扩大,这种集中管理方式的可行性及可靠性均逐渐下降。于是,诞生了一个可以有效管理主机名和 IP 地址之间对应关系的系统,即 DNS 系统。在 DNS 系统中,主机的管理机构维护了一个用来表示组织内部主机名和 IP 地址映射关系的数据库。当用户在应用(如浏览器)中输入主机名(域名)时,DNS 会自动检索数据库,并返回对应的 IP 地址。

域名的构成

域名是为了标识主机名和组织机构名的一个具有分层结构的字符串。如:

1
pku.edu.cn

其中,pku 表示北京大学(Peking University)固有的域名;edu 表示教育相关结构;cn 表示中国。

域名的分层如下图所示,各级分层构成一个树形结构,顶点 root 是树的根节点,根节点的下一层称为第 1 层域名,又称 顶级域名,如:cnjp 等国别顶级域名,comorg 等特定领域域名。顶级域名的下一层称为第 2 层域名,如:acco 等表示不同组织结构的属性域名,beijing 等表示地域的通用域名。

  • 域名服务器
    域名服务器是指管理域名的主机和相应的软件,它可以管理所在分层的域的相关信息。其所管理的分层称为 ZONE。如图所示,每层都有一个域名服务器。

DNS 分层结构的根节点设置的 DNS 称为 根域名服务器。根域名服务器中注册了 顶级域名服务器 的 IP 地址。顶级域名服务器中则注册了第 2 层域名服务器的 IP 地址,以此类推,构成一个分层系统。如果域名服务器宕机,则针对该域的 DNS 查询就会失败。因此为了提高容灾能力,一般会设置至少两个以上的域名服务器。一旦第一个域名服务器无法查询,就会自动转到第二个甚至第三个域名服务器上进行。

  • 解析器
    进行 DNS 查询的主机和软件称为 DNS 解析器。用户所使用的工作站或个人电脑都属于解析器。一个解析器至少要注册一个以上域名服务器的 IP 地址。通常,至少包括组织内部的域名服务器的 IP 地址。

DNS 工作原理

那么 DNS 的工作原理是什么呢?假设 yuanfudao.com 域中的主机 A 访问网站 pku.edu.cn,该过程的 DNS 查询流程如图所示。

解析器为了获取 IP 地址,向域名服务器进行查询。接收到查询请求的域名服务器首先在自己的数据库进行查找。如果有该域名对应的 IP 地址就返回。如果没有,则域名服务器再向上一层域名服务器进行查询,依次类推,直到根域名服务器。然后根节点遍历,直到找到指定的域名服务器,并由该域名服务器返回对应的 IP 地址。

解析器和域名服务器通过将查询结果进行缓存来提高查询性能。

ARP

通过 DNS 确定了目标域名的 IP 地址之后,就可以向该目标地址发送 IP 数据报。然而,在底层数据链路层,进行实际通信时有必要了解每个 IP 地址对应的 MAC 地址。

ARP(Address Resolution Protocol)是一种解决地址问题的协议。ARP 以目标 IP 地址为线索,确定下一个应该接收数据分包的网络设备的 MAC 地址。如果目标主机不在同一个链路上,可以通过 ARP 查找下一跳路由器的 MAC 地址。

ARP 只适用于 IPv4,不能用于 IPv6。IPv6 中可以使用 ICMPv6 替代 ARP 发送邻居探索消息。

ARP 工作原理

ARP 是如果确定 MAC 地址的呢?事实上,ARP 主要通过 ARP 请求ARP 响应 两种类型的包来确定 MAC 地址的。

如图所示,主机 A 向同一链路上的主机 B 发送 IP 包,主机 A 的 IP 地址为 172.20.1.1,主机 B 的 IP 地址为 172.20.1.2,它们互不知道对方的 MAC 地址。

主机 A 为了确定主机 B 的 MAC 地址,先通过广播发送一个 ARP 请求包,请求包中包含了主机 B 的IP 地址 172.20.1.2。由于广播的包可以被同一个链路上的所有主机或路由器接收,因此 ARP 包的请求包也会被同一链路上所有的主机和路由器进行解析。如果 ARP 请求包中的目标 IP 地址与自己的 IP 地址一致,则该节点就将自己的 MAC 地址存入 ARP 响应包并返回给主机 A。

如果每发送一个 IP 数据报都要进行一次 ARP 请求以此确定 MAC 地址,那么将会产生大量不必要的网络流量。为此,通常会将 IP 与 MAC 地址的映射关系缓存在一个 ARP 缓存表 中。除了 ARP 请求发送端可以缓存发送端 MAC 地址,接收端也可以从 ARP 请求包获取发送端主机的 IP 地址及其 MAC 地址并将其进行缓存。

不过,MAC 地址的缓存是有一定的期限的。超出期限之后,缓存的内容将被清除。

RARP

RARP(Reverse Address Resolution Protocol)是一种根据 MAC 地址定位 IP 地址的协议。例如:将打印机服务器等小型嵌入式设备接入到网络时就会用到。

通常,我们使用个人电脑设置 IP 地址时,可以通过 DHCP 自动分配获取 IP 地址。但是对于嵌入式设备,会遇到没有任何输入接口或无法通过 DHCP 动态获取 IP 地址的情况。在这种情况下,一般使用 RARP。为此,需要架设一台 RARP 服务器,然后再接入该设备到网络,启动设备时,设备会发送一条类似于“我的 MAC 地址是 xxx,我的 IP 地址是什么”的请求信息。RARP 服务器接收到请求消息之后,返回类似于“MAC 地址为 xxx 的设备,IP 地址为 xxx”的信息。设备根据该应答信息设置自己的 IP 地址。

代理 ARP

通常 ARP 包会被路由器隔离,但是采用代理 ARP(Proxy ARP)的路由器可以将 ARP 请求转发给邻近的网段。因此,两个以上网段的节点之间可以像在同一个网段中一样进行通信。

在目前的 TCP/IP 网络中,一般情况下用路由器链接多个网络时,会在各个网段上定义各自的子网,从而进行路由控制。然而,对于那些不支持设定子网掩码的老设备,不适用代理 ARP,有时就无法更好地使用网络。

DHCP

每一台主机在接入网络时都需要设置 IP 地址,尤其是对于移动设备,每移动到一个新的地方,都需要重新设置 IP 地址。

DHCP(Dynamic Host Configuration Protocol)就是一种可以实现自动设置 IP 地址、统一管理 IP 地址分配的协议。通过 DHCP,计算机只要连接到网络就可以进行 TCP/IP 通信。

DHCP 工作原理

使用 DHCP 之前,需要先架设一台 DHCP 服务器。然后将 DHCP 所要分配的 IP 地址、子网掩码、路由控制信息、DNS 服务器地址等设置到服务器上。

从 DHCP 获取 IP 地址的过程主要分为两个步骤:

  • DHCP 请求:客户端广播发送 DHCP 发现包,请求设置 IP 地址和子网掩码。DHCP 服务器收到请求后返回 DHCP 提供包,通知可以使用的网络设置。
  • DHCP 确认:客户端再次广播发送 DHCP 请求包,通知想要使用前一次 DHCP 提供包中的网络设置,以确保在 DHCP 服务器上重复设置也可以正常工作。

当 DHCP 服务器遇到故障时,将导致无法自动分配 IP 地址,从而导致网段内所有主机之间无法进行 TCP/IP 通信。为了提高网络的可靠性,通常会架设两台以上的 DHCP 服务器。由于每个 DHCP 服务器内部都记录着 IP 地址的分配信息,因此可能会导致不同 DHCP 服务器分配的 IP 地址产生冲突。

为了检查所要分配的 IP 地址以及已分配的 IP 地址是否可用,DHCP 服务器或 DHCP 客户端必须具有以下功能:

  • DHCP 服务器:在分配 IP 地址前发送 ICMP 回送请求包,确认没有返回应答。
  • DHCP 客户端:针对从 DHCP 获取到的 IP 地址发送 ARP 请求包,确认没有返回应答。

DHCP 中继代理

家庭网络大多只有一个以太网(无线 LAN)的网段,与其连接的主机台数也不会很多。因此,只需要一台 DHCP 服务器就能应对 IP 地址分配的需求,而大多数情况下都由 宽带路由器 充当 DHCP 的角色。

相比之下,一个企业或学校的网络环境中,一般会有多个以太网(无线 LAN)的网段。在这种情况下,如果针对每个网段都设置 DHCP 服务器,则将是一个浩大的工程。即使路由器可以分担 DHCP 的功能,如果网络中有 100 个路由器,就要为 100 个路由器设置它们各自可分配 IP 地址的范围,并对这些范围进行后续的更新维护,这是极其难以管理的。

因此,在这类网络环境中,往往需要 DHCP 统一管理,具体方法可以使用 DHCP 中继代理实现。

这种方法需要在每个网段设置一个 DHCP 中继代理。它可以设置 DHCP 服务器的 IP 地址,从而可以在 DHCP 服务器上为每个网段注册 IP 地址的分配范围。

DHCP 客户端会向 DHCP 中继代理发送 DHCP 请求包,DHCP 中继代理收到广播的请求包后,以单播的方式发给 DHCP 服务器。服务器收到包后再向 DHCP 中继代理返回应答,并由 DHCP 中继代理将此包转发给 DHCP 客户端。由此,DHCP 服务器即使不在同一个链路上也可以实现统一分配和管理的 IP 地址。

NAT

NAT(Network Address Translator)是用于在本地网络中使用私有地址,在连接互联网时使用全局 IP 地址的技术。NAT 主要是为了应对 IPv4 日渐枯竭而开发的技术。

NAT 工作原理

如下图所示,以 10.0.0.10 的主机与 163.221.120.9 的主机进行通信为例。局域网中的主机发起请求时,NAT 路由器会将发送源地址从 10.0.0.10 转换为全局的 IP 地址 202.244.174.37 后再发送数据。反之,当数据从地址 163.221.120.9 发送过来时,目标地址 202.244.174.37 先被转换成私有 IP 地址 10.0.0.10 后再被转发。

NAT 路由器内部有一个自动生成的用来转换地址的表。当 10.0.0.10163.221.120.9 发送第一个数据包时生成这张表,并按照表中的映射关系进行处理。

NAPT

NAPT(Network Address Port Translator)是 NAT 的升级版,不仅可以转换 IP 地址,还可以转换 TCP、UDP 端口号,可以实现用一个全局 IP 地址与多个主机的通信。

如下图所示,主机 163.221.120.9 的端口号是 80,LAN 中有两个客户端 10.0.0.1010.0.0.11 同时进行通信,并且两个客户端的本地端口都是 1025。此时,仅仅将 IP 地址为路由器的全局地址 202.244.174.37 将无法区分两个客户端。因此,只要将 10.0.0.11 的端口号转换为 1026 就可以进行区分。

类似于 NAT,NAPT 路由器也会生成自动一个转换表。如:在 TCP 的情况下,建立 TCP 连接首次握手时的 SYN 包发出后就会生成转换表。断开 TCP 连接时的 FIN 包发出后就会被删除。

Mobile IP

在与移动设备进行通信时,所连接的子网一旦发生变化,则无法通过 TCP 继续通信。因为 TCP 是面向连接的协议,自始至终都需要发送端和接收端主机的 IP 地址保持不变。类似的,UDP 也无法继续通信。

Mobile IP 技术就是为了解决所连接的子网发生变化时继续保持通信的需求。

Mobile IP 工作原理

基本概念

  • 移动节点(MN,Mobile Node):从一个网络切换到另一个网络的设备,如:手机从一个网络切换到另一个网络。
  • 对等节点(CN,Correspondent Node):与移动节点通信的设备。
  • 归属地址(Permanent Address):一个固定的 IP 地址,如同一个人的户籍,即使移动了也不会改变。
  • 转交地址(CoA:Care-of-Address):设备移动当前所处网络予以分配的 IP 地址。
  • 归属代理(HA:Home Agent):暂时认为是移动设备当前所处网络的路由器。
  • 外地代理(FA:Foreign Agent):暂时认为是移动设备归属网络的路由器。

如下图所示,为 Mobile IP 的工作原理。

当移动节点接入切换至另一个网络时,首先请求外地代理为它服务,并向归属代理注册转交地址。

当对等节点向移动节点的归属地址发送分组数据时,归属代理能够截获该分组,并将该分组转发给移动节点最新注册的转交地址。外地代理收到分组数据后,转发给转交地址对应的设备,即移动节点。移动节点可以直接响应对等节点。

注意,归属代理和外地代理之间的通信是通过 IP 隧道实现的。因为归属代理会将对等节点的原始分组数据进行封装,再由外地代理进行拆封。

参考

  1. 《图解 TCP/IP》
  2. Mobile IP 基本知识, NC & IS
欣赏此文?求鼓励,求支持!