3

I'm trying to learn the basics of ARP/TCP/HTTP (in sort of a scatter-shot way). As an example, what happens when I go to google.com and do a search?

My understanding so far:

  • For my machine to communicate with others (the gateway in this case), it may need to do an ARP Broadcast (if it doesn't already have the MAC address in the ARP cache)

  • It then needs to resolve google.com's IP address. It does this by contacting the DNS server. (I'm not completely sure how it knows where the DNS server is? Or is it the gateway that knows?)

  • This involves communication through the TCP protocol since HTTP is built on it (TCP handshake: SYN, SYN/ACK, ACK, then requests for content, then RST, RST/ACK, ACK)

  • To actually load a webpage, the browser gets the index.html, parses it, then sends more requests based on what it needs? (images,etc)

  • And finally, to do the actual google search, I don't understand how the browser knows to communicate "I typed something in the search box and hit Enter".

Does this seem about right? / Did I get anything wrong or leave out anything crucial?

4

1 回答 1

7

首先尝试了解您的家庭路由器是两个设备:交换机和路由器。 在此处输入图像描述

关注这些事实:

  • 交换机将局域网中的所有设备(包括路由器)连接在一起。
  • 路由器仅将您的交换机(LAN)与 ISP(WAN)连接起来。
  • 您的 LAN 本质上是一个使用 MAC 地址的以太网。

为了让我的机器与其他人(在这种情况下为网关)进行通信,它可能需要进行 ARP 广播(如果它在 ARP 缓存中还没有 MAC 地址)

正确的。

当您想将文件从您的桌面发送到您的笔记本电脑时,您不想通过路由器。你想通过开关,因为它更快(下层)。但是,您只知道网络中笔记本电脑的 IP。因此,您需要获取其 MAC 地址。这就是 ARP 发挥作用的地方。

在这种情况下,您将在 LAN 中广播 ARP 请求,直到有人响应您。这可能是路由器或连接到交换机的任何其他设备。

然后它需要解析 google.com 的 IP 地址。它通过联系 DNS 服务器来做到这一点。(我不完全确定它是如何知道 DNS 服务器在哪里的?还是网关知道?)

如果您使用 DHCP,那么它已经为您提供了 DNS 服务器的 IP。如果不是,则表示您手动提供了 DNS 的 IP。因此 DNS 服务器的 IP 存储在本地计算机上。

发出 DNS 请求只是将其 IP 放入请求的数据包中并将数据包转发到网络。

旁注: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 文件本质上是一个树结构,可以嵌入图像、javafile、CSS 等资源。对于每个这样的资源,都必须发送一个新请求。

一旦您的浏览器获得所有这些资源,它将呈现网页。

最后,要进行实际的 google 搜索,我不明白浏览器如何知道如何传达“我在搜索框中输入了一些内容并按 Enter”。

当您键入单个字符时,它将被发送到服务器。然后服务器用它的建议进行响应。就这么简单。

参考资料(好读):

于 2014-01-06T18:13:25.467 回答