开始浏览时发送的第一个数据包

2024-03-06

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

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

我在这里找到了这个问题:Socket编程和多线程面试题 https://stackoverflow.com/questions/177197/interview-questions-on-socket-programming-and-multi-threading

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

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


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

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

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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

开始浏览时发送的第一个数据包 的相关文章

随机推荐

  • 是否可以从(函子成员的)函数签名中检索参数类型以在模板中使用?

    假设你有一个函子 struct MyFunctor bool operator int value return true 是否可以检索函子的成员参数类型以在模板中使用 以下是这个神话功能的使用 template lt typename F
  • android - 连接时套接字超时

    我正在尝试在 Android 上实现 tcp 客户端应用程序 当我尝试连接到 C 服务器时 套接字在尝试连接到服务器时超时 My code new Thread new ClientThread start try PrintWriter
  • 从字符数组更改为字符串时出现“字符串下标超出范围”错误?

    我开始使用字符串代替字符数组 当我将大小为 5 定义的字符数组之一更改为字符串时遇到错误 我在尝试运行程序时得到的错误是 表达式 字符串下标超出范围 newWord 最初是一个字符数组 但将其更改为字符串后 我收到此错误 我不明白是什么原因
  • 为什么这个补码捷径有效?

    形成二进制数的补码的一种捷径方法是从右侧复制位 直到复制了一位 然后对剩余位求补 反转 这在SO上有解释here https stackoverflow com questions 33592801 converting binary to
  • 如何获取字符串中可能重叠的匹配项

    我正在寻找一种方法 无论是在 Ruby 还是 Javascript 中 它都能为我提供字符串中与正则表达式匹配的所有匹配项 可能重叠 假设我有str abcadc 我想找到出现的a后跟任意数量的字符 后跟c 我正在寻找的结果是 abc ad
  • 根据其他常数定义一个常数

    很抱歉 如果这个问题看起来很幼稚 但我无法在任何地方找到明确的答案 我必须根据先前定义的常量定义一个常量 例如 define CONST A 2 define CONST B 3 define CONST C CONST A CONST B
  • PHP die() 清理所有页面

    一道php die函数问题 当我使用 die 时 它会清除所有页面元素 有什么方法可以回显错误消息而不清理所有页面 当我使用 die 停止代码并调出消息时 它看起来像是跳转到另一个页面 这是我的代码
  • 平凡的析构函数会导致别名吗

    C 11 3 8 1 声明 对于具有简单析构函数的对象 我可以通过分配其存储来结束其生命周期 我想知道微不足道的析构函数是否可以延长对象的生命周期 并通过 销毁一个我更早结束生命周期的对象 来导致别名问题 首先 我知道一些东西是安全且无别名
  • 在 VS Code 中调试时观察窗口或计算表达式?

    我很喜欢视觉工作室代码 https code visualstudio com 它是一个很棒的编辑器 但在调试 Node 应用程序时有一件事确实让我烦恼 我看不到任何类型的监视窗口或在调试时评估表达式的能力 这使得调试非常痛苦 我正在考虑回
  • 天蓝色通知中心 - 应用程序卸载

    我想使用 Azure 通知中心向跨 iOS Android 和 Windows Phone 运行我的应用程序的用户发送推送通知 我已经成功地完成了基础工作 但我不知道如何管理应用程序卸载故事 启动时 移动应用程序将调用我的 Identity
  • 是否可以手动销毁SurfaceView?

    即使调用活动的 onPause 我的 SurfaceView 也不会被破坏 我正在处理中的线程 public void surfaceCreated SurfaceHolder holder if mGameThread getState
  • R Shiny:通过循环添加到绘图

    我正在尝试创建一个使用 Shiny 显示采样方式动画的应用程序 与所示示例类似的内容here http onlinestatbook com stat sim sampling dist 这是一些最小的代码 仅显示我遇到问题的部分 这不是我
  • CakePHP 链接 css 文件和 javascript 文件

    如何将 css 文件和 javascript jquery 文件链接到控制器 视图 我正在使用 CakePHP 1 3 并在网上找到了以下代码 但我似乎无法弄清楚将其放在哪里 其次 将名为 css file 的 css 文件放在哪里 任何帮
  • OSX Play 框架自动重新加载

    我已经在互联网上搜索了几个小时 有很多 有用 的建议 但只会带来问题 这就是我 几乎一模一样 在docker容器中播放框架自动加载 https stackoverflow com questions 26022395 play framew
  • Ansible - 包含来自远程主机的 vars 文件

    我想包含远程主机上文件中的变量 而不是 Ansible 运行的控制机上的变量 例如我有一个文件 var database credentials yml 在我的网络服务器上 将该文件中的变量添加到主机变量以便我可以在模板中使用它们的最佳方法
  • 如何在 Eclipse 中通过远程 Java 应用程序调试来调试 Groovy 代码

    我正在努力调试一个构建为 Sling 捆绑包的应用程序 该应用程序几乎完全是 Groovy 代码 我有 Groovy Eclipse 插件 Eclipse 使用 Maven 正在构建 jar 并将其安装在 Sling 中 没有任何问题 但是
  • 将链接放入 console.log() 中。 Node.js

    我想做这样的事情 console log Your server available at a href localhost 3000 a 但不幸的是节点控制台无法识别 a 标签 有什么想法如何将链接放入节点控制台吗 您无法让终端解释 HT
  • -不再支持webkit-text-size-adjust,如何将font-size设置为小于12px

    当我将 chrome 更新为28 0 1500 11 开发 m 我找到 webkit text size adjust none 不再支持 我在这里找到了 changlisthttp trac webkit org changeset 14
  • 与 MySQL 电话号码数据库作斗争

    我的应用程序想要存储一个列表国际电话号码在 mysql 数据库中 然后应用程序需要查询数据库并搜索特定号码 听起来很简单 但实际上是一个很大的问题 因为用户可以以不同的格式搜索该号码 所以我们每次都必须对数据库进行完整扫描 例如 我们可能将
  • 开始浏览时发送的第一个数据包

    想象一下用户坐在一台连接以太网的电脑前 他打开了浏览器 他在地址栏中输入 www google com 并按回车键 现在告诉我以太网上出现的第一个数据包是什么 我在这里找到了这个问题 Socket编程和多线程面试题 https stacko