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

Browser 开始浏览时要发送的第一个数据包,browser,network-programming,network-protocols,packet,arp,Browser,Network Programming,Network Protocols,Packet,Arp,想象一个用户坐在一台连接以太网的PC前,他打开了一个浏览器。他在地址栏中键入“www.google.com”,然后按enter键 现在告诉我以太网上出现的第一个数据包是什么 我在这里发现了这个问题: 因为我不是一个网络专家,所以我想听听答案(我假设答案是“视情况而定”) 有了Wireshark这样的工具,我显然可以检查自己的计算机行为。我想知道我看到的数据包(例如ARP、DNS、VRRP)在每个以太网配置中是否相同(是否取决于操作系统?驱动程序?甚至浏览器:)?),以及它们出现的条件。在数据链路

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

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

我在这里发现了这个问题:

因为我不是一个网络专家,所以我想听听答案(我假设答案是“视情况而定”)

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

您可以随时下载并查看


虽然这会破坏乐趣

假设主机的IP地址未缓存,DNS服务器的MAC地址未缓存,则将发送的第一件事将是广播消息,试图找出DNS服务器的MAC地址(路由器将用自己的地址响应)

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

视情况而定


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

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


很难回答您的问题,因为这在很大程度上取决于您使用的以太网类型。可以找到有关以太网传输的更多信息,如果主机名不在DNS缓存或主机文件中,则第一个数据包将转到DNS


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

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

特别是,离线IP地址的IP地址解析永远不会使用ARP完成,路由器也不负责回答这样的ARP查询

离线路由由客户机完成,客户机知道哪些IP地址位于其连接的本地子网上。如果请求的IP地址不是本地的,那么客户机将参考其路由表,以确定将数据包发送到哪个网关

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


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

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

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

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

  • 如果Google web服务器的远程地址未在本地缓存,则主机首先需要在DNS域搜索列表中按顺序查询A和/或AAAA记录,直到得到肯定响应。如果解析程序配置中的第一个DNS解析服务器地址位于一个本地IPv4子网范围内,或者位于路由器公告中设置了L=1位的本地连接IPv6前缀内,并且ARP/ND6缓存已包含有关地址的条目,然后,主机将发送的第一个数据包是直接DNS查询,以查找与域搜索列表中第一个完全限定域名匹配的a记录或AAAA记录。或者,如果第一个DNS服务器在链路上不可寻址,并且默认路由器已经具有ARP/ND6缓存条目,则DNS查询数据包将被发送到默认路由器以转发到DNS服务器

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

  • 哦,但是等等。。。更可怕的是。有一些奇怪的边缘情况