这是一个有点详细的过程的概述。 我在路由上略去了一些细节。 实际的路由决策并不是那么有趣,它只是归结为find最具体的路由(255.255.255.0是一个比255.0.0.0更具体的networking掩码)。 在路由方面,有趣的是如何通过networking传播路由信息。
- 用户在浏览器中input
http://www.example.com/ 。
- 浏览器使用自己的parsing器库或libresolv
- parsing器库查询主机定义的名称服务器
- 名字服务器要么知道答案,要代表主机查询,或者说“询问根名称服务器”。
- 名称服务器可能会回到根服务器并要求提供com的名称服务器。 域
- 然后询问example.com的服务器。 域
- 然后询问www.example.com的IP地址
- 浏览器启动TCP连接(发送TCP SYN)到www.example.com的IP地址。
- 主机在其路由表中查找该IP地址的下一跳,然后发送一个IP帧,其中embedded了TCP SYN,其自己的IP为源,地址为www.example.com作为目的地址。 它embedded在一个以太网帧中,主机的出站接口的源MAC和下一跳网关的目的MAC。
- 默认网关接收帧,增加TTL,重新计算校验和并将其发送到下一跳。
- 这个过程一直持续到IP数据包到达距离www.example.com最近的路由器
- 在这一点上,路由器会看到它是指向本地networking的。 它查阅它的ARP表,看它是否有一个到目的地的IP到MAC的映射。
- 如果没有,则发送ARP请求,以parsingIP地址的MAC地址。
- http://www.example.com主机收到TCP SYN,发送一个TCP SYNACK作为响应。
- networking遍历发生如上,只有“反向”。
- 用户主机响应TCP ACK。
- 当TCP ACK到达www.example.com时,主机操作系统通知Web服务器14.有一个等待连接。
- 用户主机发送一个HTTP GET请求
- 服务器主机将HTTP GET传递给Web服务器进程。
- Web服务器进程用一个或多个数据包与网页进行响应。
- 用户主机将此stream量传递给浏览器。
- 浏览器parsingHTML并将页面显示给用户(如果存在引用的CSS文档,引用图像或完成渲染可能需要的其他链接文档,则可能会发起更多请求)