2

想象一个用户坐在连接以太网的 PC 前。他打开了一个浏览器。他在地址栏中输入“www.google.com”并按回车键。

现在告诉我以太网上出现的第一个数据包是什么。

我在这里找到了这个问题:关于套接字编程和多线程的面试问题

因为我不是网络专家,所以我想听听答案(我假设它是“取决于”;))。

使用像 Wireshark 这样的工具,我显然可以检查我自己的计算机行为。我想知道我看到的数据包(例如 ARP、DNS、VRRP)在每个以太网配置中是否相同(它是否依赖于操作系统?驱动程序?甚至是浏览器:)?)以及哪些条件他们出现。在数据链路层上,它是否甚至可能依赖于物理网络(连接到集线器/交换机/路由器)?

4

6 回答 6

8

关于使用 ARP 查找 DNS 服务器的答案通常是错误的。

特别是,网外 IP 地址的 IP 地址解析永远不会使用 ARP 完成,并且路由器不负责回答此类 ARP 查询。

离网路由是由客户端机器完成的,它知道哪些 IP 地址在它所连接的本地子网上。如果请求的 IP 地址不是本地的,那么客户端机器会参考它的路由表来找出将数据包发送到哪个网关。

因此,在大多数情况下,发出的第一个数据包将是一个 ARP 请求,以查找默认网关的 MAC 地址,如果它尚未在 ARP 缓存中。

只有这样它才能通过网关发送 DNS 查询。在这种情况下,数据包在 IP 目标字段中使用 DNS 服务器的 IP 地址发送,但在以太网数据包上使用网关的 MAC 地址。

于 2009-03-24T16:18:07.020 回答
6

您可以随时下载wireshark并查看。


虽然破坏了乐趣。

假设主机的 IP 地址没有被缓存,DNS 服务器的 MAC 地址也没有被缓存,那么首先发送的将是一个广播ARP消息,试图找出 DNS 服务器的 MAC 地址(即路由器将使用自己的地址进行响应)。

接下来,将使用 DNS 解析主机名。然后返回的 IP 地址将使用 ARP 解析(再次路由器将用自己的地址响应),最后,HTTP 消息将实际发送。

于 2009-03-20T16:18:42.090 回答
2

实际上,这取决于您未指定的各种初始条件。

  1. 假设 PC 运行的操作系统包含本地 DNS 缓存解析器(我的有),在发送任何数据包之前发生的第一件事就是在缓存中搜索 IP 地址。这很复杂,因为“www.google.com”不是一个完全限定的域名,即它缺少尾随点,因此 DNS 解析器将首先接受其缓存中与它的搜索域列表匹配的任何记录。例如,如果您的搜索域列表是“example.com”。其次是“yoyodyne.com”。然后缓存与名称“www.google.com.example.com”匹配的资源。“www.google.com.yoyodyne.com。” 最后是“www.google.com”。如果可用,将被使用。另请注意:如果网络浏览器是最受欢迎的浏览器之一,并且 PC 正在运行一个合理的当前操作系统,并且主机具有至少一个分配了全球范围 IPv6 地址的网络接口(并且主机位于 www.google.com 在其 DNS 范围内具有 AAAA 记录的网络上),那么服务器的远程地址可能是 IPv6 而不是 IPv4。这在以后很重要。

  2. 如果 Google Web 服务器的远程地址在 DNS 中本地缓存,并且 ARP/ND6 缓存包含默认路由器的 IPv4/IPv6 地址条目(分别),则第一个传输的数据包将是 TCP SYN 数据包来源来自连接到路由器的接口地址并以缓存的远程 IPv4/IPv6 地址为目的地。或者,默认路由器可以通过某种第 2 层或第 3 层隧道到达,在这种情况下,SYN 数据包将被适当地封装。

  3. 如果 Google 网络服务器的远程地址不是本地缓存,则主机首先需要在 DNS 域搜索列表中依次查询 A 和/或 AAAA 记录,直到得到肯定响应。如果解析器配置中的第一个 DNS 解析服务器地址在本地 IPv4 子网范围之一中,或者在路由器通告中设置了 L=1 位的本地附加 IPv6 前缀中,并且 ARP/ND6 缓存已经包含一个条目对于有问题的地址,那么主机将发送的第一个数据包是对匹配域搜索列表中第一个完全限定域名的 A 记录或 AAAA 记录的直接 DNS 查询。或者,如果第一个DNS服务器在链路上不可寻址,并且默认路由器已经有一个ARP/ND6缓存条目,那么DNS查询包将被发送到默认路由器转发给DNS服务器。

  4. 如果本地在线 DNS 服务器或默认路由器(分别,如上述情况)在 ARP/ND6 缓存中没有条目,则主机将发送的第一个数据包是 ARP 请求或 ICMP6邻居请求相应的地址。

哦,但是等等……它更可怕。有一些奇怪的边缘情况,主机发送的第一个数据包可能是 LLMNR 查询、IKE 启动,或者......或者......或者......你真的关心这一切,buckaroo?

于 2009-05-28T07:35:47.077 回答
1

这取决于

没看错。例如,本地 DNS 缓存是否包含地址?如果不是,那么 DNS 查找可能是第一件事。

于 2009-03-20T16:21:36.670 回答
1

好吧,无论您尝试做什么,首先发生的是一些与以太网协议相关的数据。值得注意的是,以太网适配器必须决定以太网总线是否可用(因此这里会发生一些冲突检测)

很难回答您的问题,因为它在很大程度上取决于您使用的以太网网络的类型。有关以太网传输的更多信息,请参见此处此处

于 2009-03-20T16:22:08.777 回答
1

如果主机名不在 DNS 缓存中,也不在 hosts 文件中,第一个数据包将转到 DNS。

否则,第一个数据包将是 HTTP GET。

于 2009-03-20T16:32:00.763 回答