标签 TCP/IP 下的文章

从输入 URL 到页面展示

本文从网络层以上讨论从浏览器输入 HTTPS 协议的 URL 到页面展现的全过程。由于不同浏览器之间也存在差异,这里以 Chrome 浏览器为例。

1. DNS查询

DNS 缓存有好几个环节,浏览器缓存,系统缓存,路由器缓存,ISP 缓存。

  • 浏览器首先会查看自身是否已经有进行 DNS 缓存。Chrome 可以通过 chrome://net-internals/#dns 查看缓存的 DNS,浏览器的 DNS 缓存可以加快 DNS 解析速度,但缓存时间不会太长。

    Chrome 的 DNS 缓存

  • 如果浏览器没有相应的缓存,则查找系统缓存,浏览器会向系统发送一个查询请求,如果系统存在缓存或者设置了 host ,则返回相应的 ip 地址给浏览器。

  • 如果系统没有缓存,那么它会发出一个 DNS 查询请求给路由器。

    如果路由器有 DNS 缓存,他会提取出 IP 地址返回。否则,他会向本地域名服务器发出查询,从请求主机到本地域名服务器的请求一般是递归查询,而其他的查询一般是迭代查询。

    DNS 请求主机到本地域名服务器的查询

    DNS 域名服务器之间的查询

    请求报文如下

    DNS 请求报文

    我们先简单分析下请求报文。

    1. DNS 使用 UDP 协议,端口号53。
    2. 在 DNS 报文的 Flags 中的 RD=1。表示它建议域名服务器以递归方式查询。
    3. Question section format 需要给出 QNAME, QTYPE, QCLASS。即查询的域名,查询的类型以及查询的类。

    有关DNS报文的更多信息可以参考RFC1035

    响应报文如下

    DNS 响应报文

    我们也简单分析下,如果想详细了解,可以查看上面的 RFC1035 标准。

    1. 与请求报文相比,对比 Flags 可以发现,QR=1 表示这是一个响应报文。RA=1 表示递归查询可用。
    2. ARecord 记录了DNS请求获得的一个或多个IP地址。一般还会得到 CNAME 记录和存活时间等信息。
    3. 这里对 Rcode 也稍加说明下,Rcode=0 表示成功,他还有好几种状态码,比如1表示 Format error,2表示 Server failure,3表示 Name error,4表示 Not lmplemented,5表示 Refused,具体信息可以参考 RFC1035

- 阅读剩余部分 -