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

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

我在这里发现了这个问题: Socket编程和多线程面试题

由于我不是网络专家,我想听到答案(我认为它是“这取决于”;))。

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

有帮助吗?

解决方案

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

特别是,对于网外IP地址的IP地址解析是 绝不 使用 ARP 完成,路由器没有责任回答此类 ARP 查询。

网外路由由 客户 机器知道哪些 IP 地址位于其所连接的本地子网上。如果请求的 IP 地址不是本地的,则客户端计算机将参考其路由表来查找将数据包发送到哪个网关。

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

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

其他提示

您可以随时下载 线鲨 看看吧。


虽然破坏了乐趣。

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

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

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

  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. "名称相匹配的缓存资源将被使用(如果可用)。另请注意:如果 Web 浏览器是最流行的浏览器之一,并且 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 子网范围之一中,或者位于本地附加的 IPv6 前缀(在路由器通告中设置了 L=1 位),并且 ARP/ND6 缓存已包含条目对于有问题的地址,那么主机将发送的第一个数据包是直接 DNS 查询,以查找与域搜索列表中第一个完全限定域名匹配的 A 记录或 AAAA 记录。或者,如果第一 DNS 服务器不可在线寻址,并且默认路由器已经具有 ARP/ND6 缓存条目,则 DNS 查询数据包将被发送到默认路由器以转发到 DNS 服务器。

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

哦,但是等等...更可怕的是。有一些奇怪的边缘情况,其中主机发送的第一个数据包可能是 LLMNR 查询、IKE 启动或...或者...或者...你到底有多关心这一切,布卡鲁?

这取决于

说得对。例如。本地 DNS 缓存是否包含该地址?如果没有,那么 DNS 查找可能是第一件事。

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

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top