示例:在一个小型家庭网络,对于刚刚启动的计算机(具有手动配置的 IP 地址,尚未在网络上进行通信),用户打开 Web浏览器并尝试浏览 www.iis.se,会发生什么?

参考链接:https://www.homenethowto.com/advanced-topics/traffic-example-the-full-picture/

步骤1:计算机希望发送流量

一个连接到家庭网络的计算机刚刚启动。该计算机具有手动配置的:

  • IP地址:192.168.1.5
  • 子网掩码(Subnet Mask):255.255.255.0
  • 默认网关(Gateway):192.168.1.1
  • DNS服务器(DNS Server):192.168.1.1
  • Mac地址:00:19:a7:51:cd:9f

用户打开 Web 浏览器,访问 www.iis.se,Web 浏览器指示操作系统建立计算机与 www.iis.se 之间的通信。

 

步骤2:DNS

2a:DNS缓存

计算机操作系统检查DNS缓存,以查看是否已经知道 www.iis.se 的IP地址。

由于计算机刚刚启动,DNS 缓存为空,计算机必须向 DNS 服务器查询 www.iis.se 的IP地址。

2b:构建DNS查询

构建DNS查询,DNS 查询会包括:

  • 目标 IP 地址:192.168.1.1
  • 源 IP 地址:192.168.1.5

DNS 使用 UDP 作为传输协议,数据被封装在 UDP 数据包中:包括端口信息(目标端口+源端口)

  • 目标端口 :DNS 查询的标准端口。
    • 53/UDP
  • 源端口:为 DNS 查询随机分配一个源端口(需要与回复相匹配)。
    • 21874/UDP

确定目标 MAC 地址:在构建数据包时,计算机注意到需要知道应该将数据包发送到哪个目标 MAC 地址。操作系统会将数据包放入内存中的队列,并开始确定要使用的目标 MAC 地址。

2c:检查ARP表

计算机通过 ARP 协议来查找 IP 地址与 MAC 地址之间的映射关系,以便将数据包准确地传递给目标设备。

在这种情况下,由于计算机刚刚启动并且没有进行过通信,ARP 表为空,需要执行额外的步骤来获取所需的 MAC 地址。

2d:计算机向网络发送ARP请求

计算机向网络的其余部分构造一个 ARP 请求。该请求将被发送到目标 MAC 地址 FF:FF:FF:FF:FF:FF—广播地址。局域网上的每台设备都会接收到这个请求。家用路由器也接收到了这个 ARP 请求。ARP 请求中的消息显示计算机正在寻找IP地址为192.168.1.1 的设备,这是家用路由器的 IP 地址。路由器会构建一个 ARP 回复,其中包含自己的 MAC 地址,并将其发送回计算机。

2e:路由器向计算机回复ARP响应

当计算机收到 ARP 回复时,操作系统会读取回复内容。然后,操作系统会将这个回复中关联到 IP 地址 192.168.1.1 的 MAC 地址存储在其 ARP 表中,以便在接下来的几分钟内使用。

计算机收集到发送 DNS 的全部信息:

  • 源 MAC 地址:00:13:fe:19:c7:9e

  • 目标 MAC 地址:00:19:a7:51:cd:9f

  • 源 IP 地址:192.168.1.5

  • 目标 IP 地址:192.168.1.1

  • 源端口:21874/UDP

  • 目标端口:53/UDP

2f:发送DNS查询

家用路由器是内部网络中的 DNS 服务器,它收到这个查询后,发现目标是自身的 IP 和 MAC 地址。家用路由器会查找本地 DNS 缓存来寻找答案,如果没有,将查询转发到互联网上的 DNS 服务器以获取答案。这确保了计算机可以获得所需的域名解析结果。

家用路由器和计算机一样,也有 DNS 缓存。每当家用路由器处理计算机的 DNS 查询时,它会将 DNS 回复保存在自己的 DNS 缓存中一段时间。这有助于避免重复处理相同的 DNS 查询,提高响应速度。

2g:家用路由器检查DNS缓存

家用路由器充当 DNS 服务器,但也需要依赖互联网上的其他 DNS 服务器。它无法知道所有互联网上的 DNS 地址,因此会根据需要向负责不同域(如example.com)的 DNS 服务器发出请求。

在这个情况下,家用路由器很长时间没有收到关于 www.iis.se 的查询,因此它的 DNS 缓存中没有相应记录。因此,路由器需要询问配置在互联网上的 DNS 服务器以获取这个 DNS 查询的答案。这确保了家用路由器可以获得所需的域名解析结果。

2h:家用路由器准备并发送DNS查询

家用路由器在启动时通过 DHCP 从互联网服务提供商获取了可用的 DNS 服务器的信息,并获得了自己的公共 IP 地址。当需要解析域名时,家用路由器准备了一个 DNS 查询。它将查询放入一个 UDP 消息中,该消息的目标端口是 53/UDP,源端口是随机选择的。然后,它将 UDP 消息放入一个 IP 数据包中。家用路由器准备好发送数据包后,它查看路由表以确定如何发送数据包。尽管内部 LAN 192.168.1.0 的最佳路径是通过 LAN 端口,但因为这个数据包需要发送到互联网上的另一个 IP 网络,所以家用路由器选择了 WAN 端口作为最佳目标。家用路由器在准备好数据包后,可能需要执行 ARP 请求,以获取下一跳路由器(例如115.20.97.113)的 MAC 地址。不过,由于我们假设家用路由器已经在其 ARP 缓存中获得了这些信息,所以无需再执行 ARP 请求。家用路由器将准备好的 IP 数据包发送到互联网上的 DNS 服务器,以获取域名解析的答案。家用路由器的公共 IP 地址作为源 IP 地址,而 DNS 服务器的地址作为目标 IP 地址。

2i:DNS查询在互联网上路由

收到数据包的每个互联网路由器都会执行以下操作:

  1. 接收数据包。
  2. 查看目标 IP 地址以确定数据包的目的地。
  3. 查阅路由表以确定最适合数据包的路径。
  4. 从数据包中删除旧的 MAC 地址,并添加新的 MAC 地址。路由器在出站接口上使用自身的 MAC 地址作为流量的源 MAC 地址,并将下一跳路由器的 MAC 地址作为目标 MAC 地址。
  5. 将数据包发送到下一跳路由器。

2j:DNS服务器回复

最终,数据包会到达 DNS 服务器,该服务器将处理数据包并准备好一个响应。就像普通计算机一样,服务器也有一个 IP 地址、子网掩码和默认网关。因此,它的工作方式与普通计算机非常相似。

2k:家庭路由器可以向计算机发送 DNS 回复

在从 DNS 服务器收到 DNS 响应后,家用路由器最终可以创建一个 DNS 响应并将其发送到计算机,以便让计算机知道 www.iis.se 对应的 IP 地址。

步骤3:建立会话到 www.iis.se

“TCP三次握手”:TCP 通信的设置阶段,由计算机和服务器之间的三条消息组成。

TCP三次握手的步骤包括:

  1. 计算机发送,称为"SYN"(同步)。计算机希望同步TCP会话设置。
  2. 服务器发送,称为"SYN-ACK"(同步确认)。服务器确认收到消息,并准备好建立通信会话。
  3. 计算机发送,称为"ACK"(确认)。这表示一切都准备就绪。

计算机已在其 ARP 缓存中获取了家用路由器 IP 地址的正确 ARP 信息,因此它可以直接通过家用路由器将数据包发送到互联网,无需进行 ARP 查找。但是,这也是示例中计算机首次希望直接与互联网上的目标通信。

TCP 三次握手将在计算机和互联网上的 Web 服务器之间进行。

在DNS查找过程中,计算机只是与家用路由器进行通信。家用路由器则与互联网上的 DNS 服务器进行通信。但是,并没有直接在计算机和互联网上的任何 IP 地址之间进行通信。不同之处在于,现在计算机希望直接与互联网上的某个目标通信,因此家用路由器必须对通信进行地址转换。

3a:计算机发送TCP SYN消息

计算机操作系统会随机生成一个 TCP 源端口用于通信。然后,它组装一个空的 TCP SYN 消息并将其发送给 Web 服务器。当 TCP SYN 消息经过路由器时,路由器会执行网络地址转换(NAT),同时在 NAT 表中保存执行 NAT 的信息,以便跟踪会话并执行逆向 NAT。

“I would like to synchronise a TCP session with you”

3b:Web 服务器回复TCP SYN-ACK消息

Web 服务器向计算机的 TCP SYN-ACK 响应:

“Okay, I’m good to set up a session and I confirm that I got your message”

数据包与路由器上的 NAT 表条目相匹配,以便路由器可以看到应将数据包转发给哪台局域网计算机,并如何对数据包执行 NAT。

3c:计算机发送TCP ACK消息

计算机向 Web 服务器发送了 TCP ACK 消息:

“Then I confirm that from now on we have established a session!”

只要计算机和服务器继续彼此通信,它们将继续使用相同的会话进行通信。这还包括使用相同的 TCP 端口,从而让沿途的所有设备都能跟踪会话、地址转换等情况。会话的持续时间可能刚好足够下载网页,或者 Web 服务器和计算机可以选择在用户希望继续在网页上浏览时保持会话活动更长时间。

步骤4:Web 浏览器与 Web 服务器对话

一旦操作系统建立了TCP会话,它会通知 Web 浏览器可以与 Web 服务器进行通信。Web 浏览器将使用 HTTP 协议来实现这一点。

HTTP 是在互联网上传输网页的标准协议。

这标志着我们已经完成了这个示例,其中包括了设置通信所涉及的大部分步骤。从此刻开始,计算机和服务器可以相互通信,传输网页,直到完成。如果需要,它们还可以选择通过发送 TCP RESET消息来结束会话,这会通知所有设备会话已经结束。