我正在尝试学习ARP / TCP / HTTP的基础知识(以散射方式)。 举个例子,当我去google.com并进行搜索时会发生什么?
到目前为止我的理解:
为了让我的机器与他人通信(在这种情况下是网关), 它可能需要进行ARP广播(如果它还没有 ARP缓存中的MAC地址)
然后需要解析google.com的IP地址。它通过这样做 联系DNS服务器。 (我不完全确定它是怎么知道的 DNS服务器在哪里?或者它是知道的网关?)
这涉及通过TCP协议进行通信,因为HTTP是 建立在它上面(TCP握手:SYN,SYN / ACK,ACK,然后请求 内容,然后是RST,RST / ACK,ACK)
要实际加载网页,浏览器会获取index.html,解析 它,然后根据需要发送更多请求? (图像等)
最后,要做实际的谷歌搜索,我不明白怎么做 浏览器知道通信“我在搜索框中输入了一些内容 然后按Enter键。
这看起来是对的吗? /我有什么不妥或遗漏任何关键的东西吗?
答案 0 :(得分:7)
首先尝试了解您的家庭路由器是两个设备:交换机和路由器。
关注这些事实:
我的机器与他人通信(在这种情况下是网关), 它可能需要进行ARP广播(如果它还没有MAC ARP缓存中的地址)
正确。
如果要将dekstop中的文件发送到笔记本电脑,则不希望通过路由器。你想要通过开关,因为它更快(下层)。但是,您只知道网络中笔记本电脑的IP。因此,您需要获取其MAC地址。这就是ARP开始的地方。
在这种情况下,您将在LAN中广播ARP请求,直到有人响应您。这可能是路由器或连接到交换机的任何其他设备。
然后需要解析google.com的IP地址。它通过这样做 联系DNS服务器。 (我不完全确定它是怎么知道的 DNS服务器是?或者它是知道的网关?)
如果您使用DHCP,那么它已经为您提供了DNS服务器的IP。如果没有,则表示您手动提供了DNS的IP。因此,DNS服务器的IP存储在您的计算机本地。
发出DNS请求只是将其IP包含在带有请求的数据包中,并将数据包转发到网络。
Sidenote :DHCP还提供路由器的IP地址。
这涉及通过TCP协议进行通信,因为HTTP是 建立在它上面(TCP握手:SYN,SYN / ACK,ACK,然后请求 内容,然后是RST,RST / ACK,ACK)
是。澄清事情:当您的计算机发送请求时
FRAME[IP[TCP[GET www.google.com]]]
正在将帧发送到LAN的交换机,该交换机将其转发到路由器的MAC。您的路由器将打开帧以检查目标IP并相应地路由它(在本例中为WAN)。最后,当帧到达服务器时,服务器将打开TCP段并读取有效负载,即HTTP消息。 ACK / SYN等消息仅由您的计算机和服务器处理,而不是任何路由器或交换机。
要实际加载网页,浏览器会获取index.html,解析 它,然后根据需要发送更多请求? (图像等)
是。 HTML文件本质上是一种树结构,可以嵌入资源,如图像,javafiles,CSS等。对于每个这样的资源,都必须发送新的请求。
一旦您的浏览器获得所有这些资源,它将呈现网页。
最后,要进行实际的谷歌搜索,我不明白如何 浏览器知道通信“我在搜索框中输入了一些内容 然后按Enter键。
当您键入单个字符时,它将被发送到服务器。然后服务器响应其建议。很简单。
参考文献(好读):