想象一下,用户坐在以太网连接的PC上。他打开了一个浏览器。他在地址栏中输入“www.google.com”并点击进入。
现在告诉我在以太网上出现的第一个数据包是什么。
我在这里找到了这个问题:Interview Questions on Socket Programming and Multi-Threading
由于我不是网络专家,我想听听答案(我认为这是“它取决于”;))。
使用像Wireshark这样的工具,我显然可以检查自己的计算机行为。我想知道我看到的数据包(例如ARP,DNS,VRRP)在每个以太网配置中是否相同(它依赖于操作系统?驱动程序?浏览器甚至:)?)以及哪些条件是它们出现了。在数据链路层,它是否可能依赖于物理网络(连接到集线器/交换机/路由器)?
答案 0 :(得分:8)
关于使用ARP查找DNS服务器的答案通常是错误的。
特别是,使用ARP 从不完成对网外IP地址的IP地址解析,并且路由器不负责回答此类ARP查询。
离线路由由客户端机器完成,知道哪些IP地址位于它所连接的本地子网上。如果请求的IP地址不是本地的,则客户端机器引用其路由表以找出将数据包发送到哪个网关。
因此,在大多数情况下,发出的第一个数据包将是一个ARP请求,用于查找默认网关的MAC地址(如果它尚未存在于ARP缓存中)。
只有这样才能通过网关发送DNS查询。在这种情况下,数据包与IP目标字段中的DNS服务器的IP地址一起发送,但是在以太网数据包上使用网关的MAC地址。
答案 1 :(得分:6)
您随时可以下载wireshark并查看。
虽然破坏了乐趣。
假设没有缓存主机的IP地址,并且没有缓存DNS服务器的MAC地址,首先发送的是广播ARP消息,试图找出MAC DNS服务器的地址(路由器将使用其自己的地址响应)。
接下来,将使用DNS解析主机名。然后使用ARP解析返回的IP地址(路由器将再次使用自己的地址进行响应),最后,实际将发送HTTP消息。
答案 2 :(得分:2)
实际上,它取决于您未指定的各种初始条件。
假设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。这在以后很重要。
如果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缓存已包含条目对于有问题的地址,主机将发送的第一个数据包是A记录或与域搜索列表中第一个完全限定域名匹配的AAAA记录的直接DNS查询。或者,如果第一个DNS服务器在链路上不可寻址,并且默认路由器已经有ARP / ND6缓存条目,则DNS查询数据包将被发送到默认路由器以转发到DNS服务器。
如果本地on-link DNS服务器或默认路由器(分别如上所述)在ARP / ND6缓存中没有条目,则主机将发送的第一个数据包要么是相应地址的ARP请求或ICMP6邻居请求。
哦,但等等......这更可怕了。有两个奇怪的边缘情况,主机发送的第一个数据包可能是LLMNR查询,IKE启动,或......或......或者......你真正关心这一切,buckaroo?
答案 3 :(得分:1)
取决于
说得对。例如。本地DNS缓存是否包含地址?如果没有,那么DNS查找可能是第一件事。
答案 4 :(得分:1)
嗯,无论你怎么做,首先发生的事情是一些与以太网协议相关的数据。值得注意的是,以太网适配器必须决定以太网总线是否可用(因此这里发生了一些碰撞检测)
答案 5 :(得分:1)
如果主机名不在DNS缓存中,也不在主机文件中,则第一个数据包将转到DNS。
否则,第一个数据包将是HTTP GET。