networking - 发送请求时哪个数据包最先到达

标签 networking tcp udp dns

正如其他论坛中有人提到的,面试官问了下面给出的问题。
我不知道确切的答案,但我会说 HTTP 请求?任何建议和解释

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

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

谢谢

最佳答案

没有保证永远正确的答案,但有一些可能的可能性。

如果客户端配置为DNS over UDP , 那么第一个数据包将是一个包含 DNS query 的 UDP 数据报将 www.google.com 解析为 IP 地址。

如果客户端配置为DNS over TCP并且浏览器还没有建立到 DNS 服务器的 TCP 连接,第一个数据包将是与 DNS 的连接握手的一部分,因此答案将是 SYN 数据包先出大门。

如果浏览器已被编码以保持与 DNS 服务器的长期 TCP 连接,并且假设 DNS 服务器允许连接保持事件状态,则第一个数据包将是 DNS 查询,通过现有连接发送到DNS 服务器。

最后,如果浏览器最近访问过 www.google.com 并且被构建为对 DNS 查询结果进行一些智能本地缓存,那么第一个数据包将是一个 SYN 以建立新连接到谷歌的网络服务器。

如果你想表达得淋漓尽致,但又要绝对精确,请将你的答案降低一层,然后说,“第一个输出的数据包将是一个以太网帧,其中包含一个有效载荷,它支持所需的任何更高级别的协议(protocol)为浏览器服务 www.google.com”。 公平地说,问题是关于以太网层的......

关于networking - 发送请求时哪个数据包最先到达,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7829689/

相关文章:

c++ - 仅接受来自特定 IP 的套接字

c# - 通过环回在 C# 中发送 UDP 数据包。为什么我无法追踪他们?

python - recvfrom 返回的地址的第二部分是什么?

linux - 如何使用 netcat 更改监听规则?

mysql - 无法连接到安装在其他虚拟机上或通过网络安装的 MySQL

tcp - Erlang:{packet,N} 选项适用于 N = 0 但不适用于 1,2,4?

Tomcat 端口打开但应用程序无法加载

android - 网络调用报警超时

c#:堆栈在 Invoke 处停止

c++ - 如何让每个子进程获得不同的客户端地址(UDP SOCKET)?