![“在浏览器中输入链接”到“寻找到主机的路线”如何工作的?](https://linux22.com/image/514736/%E2%80%9C%E5%9C%A8%E6%B5%8F%E8%A7%88%E5%99%A8%E4%B8%AD%E8%BE%93%E5%85%A5%E9%93%BE%E6%8E%A5%E2%80%9D%E5%88%B0%E2%80%9C%E5%AF%BB%E6%89%BE%E5%88%B0%E4%B8%BB%E6%9C%BA%E7%9A%84%E8%B7%AF%E7%BA%BF%E2%80%9D%E5%A6%82%E4%BD%95%E5%B7%A5%E4%BD%9C%E7%9A%84%EF%BC%9F.png)
是否有一个 wiki 或书籍,解释当用户在浏览器中输入链接时会发生什么,以及如何解析 DNS、路由器如何找到到主机的路由等。我主要对路由数据包感兴趣。
谢谢
答案1
这绝对是一个广泛的话题。我最熟悉的书是TCP/IP 图解,第 1 卷:协议。此外,以下是如何 路由器 工作。
答案2
这是对这个过程的一个比较详细的概述。我省略了一些关于路由的细节。实际的路由决策并不那么有趣,它“只是”归结为找到最具体的路由(255.255.255.0 是一个比 255.0.0.0 更具体的网络掩码)。在路由方面,有趣的是路由信息是如何通过网络传播的。
- 用户
http://www.example.com/
在浏览器中输入。 - 浏览器使用自己的解析器库或 libresolv
- 解析器库查询主机定义的名称服务器
- 名称服务器要么知道答案,要么代表主机查找答案,要么说“询问根名称服务器”。
- 名称服务器可能会向根服务器请求为 com. 域提供服务的名称服务器
- 然后询问谁是 example.com. 域名的服务器
- 然后询问 www.example.com 的 IP 地址
- 浏览器向 www.example.com 的 IP 地址发起 TCP 连接(发送 TCP SYN)。
- 主机在其路由表中查找该 IP 地址的下一跳,然后发送一个 IP 帧,其中嵌入了 TCP SYN,其自身 IP 为源,www.example.com 的地址为目标。该 IP 帧嵌入以太网帧中,其源 MAC 为主机出站接口,目标 MAC 为下一跳网关。
- 默认网关接收帧,增加 TTL,重新计算校验和并将其发送到下一跳。
- 此过程持续进行,直到 IP 数据包到达距离 www.example.com 最近的路由器
- 此时,路由器发现其目的地是本地网络。它会查询其 ARP 表,查看是否有目的地的 IP 到 MAC 映射。
- 如果没有,它会发送 ARP 请求,以将 MAC 地址解析为 IP 地址。
- www.example.com 主机接收 TCP SYN,发送 TCP SYNACK 作为响应。
- 网络遍历如上所述,只是“反向”进行。
- 用户主机以 TCP ACK 进行响应。
- 当 TCP ACK 到达 www.example.com 时,主机操作系统通知 Web 服务器 14. 有一个等待连接。
- 用户主机发送 HTTP GET 请求
- 服务器主机将 HTTP GET 传递给 Web 服务器进程。
- Web 服务器进程使用一个或多个带有网页的数据包进行响应。
- 用户主机将此流量传递到浏览器。
- 浏览器解析 HTML 并将页面显示给用户(如果引用了 CSS 文档、引用了图像或可能需要其他链接文档才能完成渲染,则可能会发起更多请求)