4796 字
24 分钟
IP协议相关技术

DNS#

DNS(Domain Name System,域名系统) 是一种将域名(例如 www.example.com)转换为 IP 地址(例如 192.0.2.1)的系统。由于计算机在互联网上通过 IP 地址进行通信,而人类使用的是域名,DNS 就是为了桥接这两者,提供域名与 IP 地址之间的转换功能。

DNS 使得用户可以通过易于记忆的域名来访问网站,而不需要记住复杂的 IP 地址。它就像互联网的“电话簿”,记录了所有域名到 IP 地址的映射。

DNS 的工作原理基于层次化的结构,分为多个层级的服务器和缓存机制。当你输入一个域名时,DNS 会根据以下步骤来解析并返回相应的 IP 地址。

在域名中,越靠右的位置表示其层级越高

根域是在最顶层,它的下一层就是 com 顶级域,再下面是 server.com。

所以域名的层级关系类似一个树状结构:

  • 根 DNS 服务器
  • 顶级域 DNS 服务器(com)
  • 权威 DNS 服务器(server.com)

DNS(域名系统)解析的详细流程可以分为多个步骤,涉及到从用户发起请求到最终返回 IP 地址的过程。以下是 DNS 解析的详细流程:

1. 用户发起请求#

用户在浏览器中输入一个域名(例如 www.example.com)。浏览器需要将这个域名转换为 IP 地址才能访问服务器。

2. 本地 DNS 缓存查询#

操作系统会首先检查本地的 DNS 缓存中是否有该域名对应的 IP 地址。如果缓存中有结果,则直接返回 IP 地址,还没有就检查本机域名解析文件  hosts,如果还是没有,就会对 DNS 服务器进行查询。

3. 本地 DNS 服务器查询#

如果本地没有缓存,操作系统会向本地 DNS 服务器(通常是路由器或操作系统配置的 DNS 服务器,也就是客户端的 TCP/IP 设置中填写的 DNS 服务器地址)发送查询请求。

4. 递归查询过程#

如果本地 DNS 服务器无法直接解析该域名,它会向更高层次的 DNS 服务器进行递归查询。以下是递归查询的详细过程:

  • 根域名服务器查询: 本地 DNS 解析器首先会向根域名服务器发送查询请求。根域名服务器是 DNS 层次结构的最上层,负责管理顶级域服务器的地址。根服务器的 IP 地址通常是预配置在本地 DNS 解析器中的。 根域名服务器会返回该域名所属(如 .com.org)顶级 DNS 服务器的 IP 地址。
  • 顶级 DNS 服务器查询: 接下来,本地 DNS 服务器会向顶级 DNS 服务器(例如,.com 域的服务器)发送查询请求。 顶级 DNS 服务器会返回该域名的权威 DNS 服务器的 IP 地址。
  • 权威 DNS 服务器查询: 本地 DNS 解析器最终向权威 DNS 服务器(即负责管理特定域名的 DNS 服务器)发送查询请求。权威 DNS 服务器存储着域名的真实记录,如 A 记录、CNAME 记录等。权威 DNS 服务器会返回该域名对应的 IP 地址(A 记录)。

5. 返回 IP 地址#

DNS 解析器将从权威 DNS 服务器获得的 IP 地址返回给用户的操作系统,操作系统再将其传递给浏览器。

6. 浏览器访问服务器#

最后,浏览器通过返回的 IP 地址向目标服务器发起请求,建立连接并获取网页内容。

7. DNS 缓存#

为了提高后续访问效率,操作系统和本地 DNS 服务器会缓存此域名与 IP 地址的映射,缓存会在一定时间后过期(通常由 TTL 值控制),以减少后续解析的延迟。

ARP#

ARP(地址解析协议,Address Resolution Protocol) 是一种用于将网络层地址(如 IPv4 地址)映射到数据链路层地址(如 MAC 地址)的协议。ARP 主要用于局域网(LAN)内,确保设备能够找到彼此的物理地址以进行数据包的发送。

ARP 的具体流程#

1. 设备发起 ARP 请求#

假设设备 A(源设备)要向设备 B(目标设备)发送数据包,但设备 A 只知道设备 B 的 IP 地址,而不知道其 MAC 地址。此时,设备 A 会发送一个ARP 请求广播包到网络中,内容包括目标设备的 IP 地址,并询问 “谁拥有这个 IP 地址?请告知我你的 MAC 地址。” ARP 请求包格式:

  • 目标 IP 地址:设备 B 的 IP 地址
  • 目标 MAC 地址:全零(因为设备 A 还不知道目标 MAC 地址),00:00:00:00:00:00
  • 源 IP 地址:设备 A 的 IP 地址
  • 源 MAC 地址:设备 A 的 MAC 地址

2. 设备接收 ARP 请求#

网络中的所有设备都会收到这个广播包,但只有目标设备 B 会检查包中的目标 IP 地址是否与自身 IP 地址匹配。如果匹配,设备 B 会返回自己的 MAC 地址。

3. 设备返回 ARP 响应:#

设备 B 向设备 A 发送一个 ARP 响应 包,包中包含设备 B 的 MAC 地址,并且是单播发送给设备 A 的。 ARP 响应包格式:

  • 目标 IP 地址:设备 A 的 IP 地址
  • 目标 MAC 地址:设备 A 的 MAC 地址
  • 源 IP 地址:设备 B 的 IP 地址
  • 源 MAC 地址:设备 B 的 MAC 地址

4. 设备 A 更新 ARP 缓存:#

当设备 A 接收到 ARP 响应后,它会将设备 B 的 IP 地址和 MAC 地址的映射关系保存到 ARP 缓存中。这样,如果设备 A 需要再次与设备 B 通信,就可以直接使用缓存中的 MAC 地址,而不需要重新发起 ARP 请求。

5. 数据传输:#

设备 A 现在知道设备 B 的 MAC 地址,便可以将数据包发送到设备 B 的 MAC 地址,数据就能够在局域网中正确传输。

ARP 缓存#

  • 为了减少每次通信时都要发送 ARP 请求,设备会将 ARP 映射关系保存到本地的 ARP 缓存中。ARP 缓存会定期过期,过期后需要重新发送 ARP 请求来更新映射关系。
  • 缓存中包含了 IP 地址和对应的 MAC 地址的映射,每个条目都有生存时间(TTL,Time to Live),TTL 到期后,缓存会被清除。

ARP 的类型#

  • ARP 请求:设备发起查询,询问目标设备的 MAC 地址。
  • ARP 响应:目标设备回应请求,提供自己的 MAC 地址。

ARP 的安全性问题#

  • ARP 欺骗(ARP Spoofing):恶意攻击者可以向局域网中的设备发送虚假的 ARP 响应,使得设备误认为攻击者的 MAC 地址与某个合法设备的 IP 地址绑定,从而实现中间人攻击、数据窃听或拒绝服务攻击。
  • ARP 缓存中毒:由于 ARP 请求和响应是不加密的,攻击者可以伪造 ARP 响应,导致目标设备缓存了错误的 MAC 地址,从而让攻击者拦截或篡改数据。

总的来说,ARP 是一个非常基础但至关重要的协议,确保设备在同一局域网内能够正确地找到彼此并进行数据通信。

DHCP#

DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是一种网络协议,主要用于为网络中的设备(如计算机、手机、打印机等)自动分配 IP 地址及其他网络配置信息。它使得网络管理员无需手动为每个设备分配静态 IP 地址,从而简化了网络管理。

DHCP 的工作流程#

DHCP 工作流程可以分为以下几个阶段,通常是一个四步过程(称为 DORA):

1. DHCP Discover(客户端广播请求)#

  • 目的:客户端设备(如电脑、手机等)在启动时,并不知晓网络中是否有可用的 IP 地址,因此,它会向网络广播一个 DHCP Discover 消息,向 DHCP 服务器请求分配 IP 地址。
  • 信息:该消息是一个广播包,目的地址是 255.255.255.255,表示发送给网络中的所有设备,主要用于查找可用的 DHCP 服务器。

2. DHCP Offer(DHCP 服务器响应)#

  • 目的:网络中所有的 DHCP 服务器接收到客户端的 DHCP Discover 消息后,会为客户端提供一个可用的 IP 地址,并将此信息发送回客户端。
  • 信息:DHCP 服务器发送的 Offer 消息中包含:
    • 服务器为客户端提供的 IP 地址。
    • 子网掩码。
    • 默认网关地址。
    • DNS 服务器地址(如果有配置)。
    • 租约时间(该 IP 地址的有效期)。
  • 这时,客户端收到了来自 DHCP 服务器的响应,但并没有确定分配的 IP 地址。

3. DHCP Request(客户端选择响应)#

  • 目的:客户端选择其中一个服务器提供的 IP 地址,并向该服务器发出 DHCP Request 消息,表示自己接受此 IP 地址。
  • 信息:DHCP Request 消息是广播发送的,意味着网络中的所有 DHCP 服务器都会收到此请求,但只有客户端选择的那台 DHCP 服务器会被最终确认。
  • 在这一步,客户端会通知所有 DHCP 服务器其已选择的 IP 地址,并且告知其他服务器其不再需要提供该地址。

4. DHCP Acknowledge(服务器确认)#

  • 目的:当 DHCP 服务器接收到客户端的 Request 消息时,确认并分配 IP 地址。服务器发送一个 DHCP Acknowledge(ACK)消息,表示 IP 地址分配已成功。
  • 信息:此确认消息中会再次包含:
    • 客户端分配的 IP 地址。
    • 子网掩码、默认网关、DNS 等网络配置信息。
    • 租约时间(即 IP 地址的使用期限)。

其他细节#

  • 租约(Lease):DHCP 分配的 IP 地址是有时间限制的,这个时间称为“租约”。租约到期前,客户端可以发送续约请求(DHCP Request)来延长租约。
  • DHCP NAK(Negative Acknowledgment):如果 DHCP 服务器无法满足客户端的请求(比如某个 IP 地址已经被分配给其他设备),它会发送一个 DHCP NAK 消息,告知客户端重新请求一个新的 IP 地址。
  • 重新获取(Rebinding):当客户端使用的 IP 地址租约快到期时,客户端会尝试重新从 DHCP 服务器获取一个新的 IP 地址或者延长租约。如果客户端不能联系到原来的 DHCP 服务器,它会尝试联系其他 DHCP 服务器。
  • DHCP 交互中,全程都是使用 UDP 通信

  • DHCP 中继代理是解决跨子网 DHCP 请求的关键技术,它可以将客户端的 DHCP 请求从一个子网转发到不同子网的 DHCP 服务器,确保客户端能够正常获取 IP 地址。

总结#

  1. Discover:客户端广播请求 IP 地址。
  2. Offer:DHCP 服务器响应提供可用的 IP 地址。
  3. Request:客户端选择并请求确认提供的 IP 地址。
  4. Acknowledge:DHCP 服务器确认并分配 IP 地址给客户端。

这个过程确保了客户端可以自动配置网络设置,无需手动配置 IP 地址、子网掩码、网关等信息。

ICMP#

ICMP(Internet Control Message Protocol,互联网控制消息协议)是一种用于网络设备之间发送控制消息的协议,主要用于诊断和错误报告。它通常与 IP 协议一起使用,并且是一种网络层协议。ICMP 的主要功能是帮助网络设备(如路由器)报告错误信息或传达控制信息,比如不可达主机、网络或端口等。

ICMP 的常见用途#

  1. 错误报告:当一个数据包无法到达目的地时,ICMP 会发送错误报告。例如,当目的主机不可达或路由不可达时,ICMP 就会生成一个消息。
  2. 诊断工具:ICMP 通常用于网络诊断工具,如pingtracerouteping通过发送 ICMP 回显请求消息并等待回显应答来测试网络连通性。

ICMP 的基本工作流程#

1. 发送 ICMP 请求#

  • 发送方生成一个 ICMP 请求消息并将其封装到 IP 数据包中。
  • 这可以是如ping命令所使用的**回显请求(Echo Request)**消息。

2. 通过网络传输#

  • ICMP 请求消息像其他 IP 数据包一样通过网络传输,经过中间路由器或其他设备。

3. 接收 ICMP 请求:#

  • 目标主机收到 ICMP 请求消息后,会检查消息类型,并根据请求类型做出相应处理。

4. 返回 ICMP 应答#

  • 如果目标主机正常工作并能接收请求,它会生成相应的 ICMP 应答消息并将其封装到 IP 数据包中发送回发送方。
  • 例如,收到回显请求时,目标会发送回显应答(Echo Reply)消息。

5. ICMP 错误报告#

  • 如果数据包传输过程中发生了错误(如目的地不可达、TTL 过期等),路由器会生成相应的 ICMP 错误消息(如目的不可达消息或时间超过消息)并返回给源主机。

ICMP 消息类型#

ICMP 消息可以分为几类,每种类型有不同的功能,最常见的包括:

  • Echo Request(回显请求):用于测试目标主机是否可达,通常通过ping命令发起。
  • Echo Reply(回显应答):用于响应回显请求,告诉发送者目标主机正常。
  • Destination Unreachable(目的不可达):当路由器无法将数据包送到目标时,发送给发送方的错误消息。
  • Time Exceeded(时间超过):当数据包的 TTL(生存时间)值为 0 时,路由器会发送此消息,通常用于traceroute工具。
  • Redirect(重定向):当路由器发现发送方应该使用另一个路由时,发送此消息来指引发送方。

ICMP 消息的格式#

每个 ICMP 消息都由以下几个部分组成:

  1. 类型(Type):消息的类型标识符,表示消息的目的。比如回显请求的类型是 8,回显应答的类型是 0。
  2. 代码(Code):类型下的细分信息,用于提供更多的上下文。例如,Destination Unreachable消息的代码表示不同的不可达原因(网络不可达、主机不可达等)。
  3. 校验和(Checksum):用于检测消息在传输过程中是否被损坏。
  4. 其他数据:根据不同的消息类型,这部分的内容会有所不同,比如回显请求和回显应答消息会包含一个“标识符”和“序列号”来匹配请求和应答。

ICMP 的应用#

  • 网络诊断:通过工具如pingtraceroute来检查网络的连通性和路径。
  • 路由调整:某些路由器会根据 ICMP 重定向消息来调整数据包的路由。
  • 错误报告:帮助发送方识别传输过程中出现的问题。

总之,ICMP 在网络中起到了非常重要的控制和反馈作用,尤其是在网络故障检测和调试过程中。

NAT#

NAT(网络地址转换,Network Address Translation)是一种网络技术,用于在不同的 IP 地址空间之间转换数据包的源 IP 或目的 IP 地址。通常,NAT 用于将私有网络地址(通常是内部网络中的地址)转换为公共网络地址(例如互联网的地址),或者将公共地址转换回私有地址。这项技术广泛应用于路由器、防火墙和网关设备中,以便实现网络地址复用和提高安全性。

原理#

NAT 的工作原理基于以下几个步骤:

  1. 私有网络到公共网络的转换
    • 当内部设备(如本地网络中的计算机)发起与外部网络(如互联网)的通信时,NAT 设备(通常是路由器)会将数据包的源 IP 地址从私有 IP 地址转换为一个公共 IP 地址。
    • 例如,内部网络中的一台计算机的 IP 地址可能是192.168.1.10,而 NAT 设备会将该 IP 地址转换为公共 IP 地址,如203.0.113.1
  2. 端口映射(如果使用 PAT 时)
    • 如果多个内部设备共享同一个公共 IP 地址,NAT 会使用端口号来区分不同的会话,这个过程叫做端口地址转换(PAT,Port Address Translation)。每个从内部网络发出的请求都会分配一个唯一的端口号,这样即使多个设备共享同一个公共 IP 地址,也能通过不同的端口号来区分不同的连接。
  3. 外部网络返回数据时的反向转换
    • 当外部网络(例如互联网)发送数据包到 NAT 设备时,NAT 会根据预设的规则或转换表,将数据包的目的 IP 地址转换回相应的私有 IP 地址,并将其转发到相应的内部设备。

示例#

假设内部网络有一台设备192.168.1.10,NAT 设备的公共 IP 地址是203.0.113.1

  • 内部设备发起请求:设备192.168.1.10向互联网发送 HTTP 请求。
  • NAT 转换:NAT 设备将源 IP 地址192.168.1.10转换为公共 IP 地址203.0.113.1,并为该请求分配一个端口号(例如,203.0.113.1:10001)。
  • 互联网响应:互联网服务器将响应数据包发送到203.0.113.1:10001
  • NAT 反向转换:NAT 设备根据端口号将目标地址转换回私有 IP 地址192.168.1.10,并将数据转发给该设备。

常见的 NAT 类型#

  1. 静态 NAT
    • 每个私有 IP 地址都映射到一个固定的公共 IP 地址。这种映射是永久性的,适用于需要直接访问外部网络的设备。
  2. 动态 NAT
    • 私有 IP 地址池会动态地映射到公共 IP 地址池中的地址,这样可以在多个设备之间共享公共 IP 地址。
  3. 端口地址转换(PAT)
    • 也叫 NAT 过载。它允许多个私有 IP 地址共享一个公共 IP 地址,使用不同的端口号来区分不同的连接。PAT 是最常用的 NAT 类型,适用于家庭和小型办公室的网络。

优势#

  • 节省 IP 地址:NAT 可以让多个私有网络中的设备共享一个公共 IP 地址,从而缓解 IPv4 地址不足的问题。
  • 安全性:NAT 通过隐藏内部网络的真实 IP 地址,使得外部攻击者难以直接访问内部网络。
  • 简化网络配置:NAT 允许内部网络使用私有 IP 地址,网络管理员无需为每个设备分配公共 IP 地址。

NAT 是现代网络中不可或缺的一部分,尤其是在 IPv4 地址匮乏的情况下,它使得大规模部署私有网络变得可能。