Open tomoya06 opened 4 years ago
千古难题 20200829补充:MDN也有一份参考答案,在这里。包括了网络部分和浏览器渲染。
千古难题
20200829补充:MDN也有一份参考答案,在这里。包括了网络部分和浏览器渲染。
关键是向目标服务器发送了一个HTTP请求,收到一个HTML文件以及其他静态文件,交由浏览器渲染。
HTTP请求要有客户端和服务端才能成立,HTTP协议基于TCP/IP协议簇,所以在发送前需要知道这个域名、也就是服务端的IP地址,当然客户端自己也先要有自己的IP地址,请求才能返回本机。
假设主机最开始没有 IP 地址以及其它信息,那么就需要先使用 DHCP 来获取。
完整过程参考这里
过程概述:主机广播一个申请IP地址的DHCP发现报文,DHCP服务器(可能有多个)收到之后,回复一个可用的IP地址以及其他所需信息。主机选用一个IP地址包之后,向这个DHCP服务器发送请求报文,服务器再次回复ack确认报文,这时新主机就有IP地址可以用了。
主机通过浏览器生成一个 TCP 套接字,套接字向 HTTP 服务器发送 HTTP 请求。为了生成该套接字,主机需要知道网站的域名对应的 IP 地址。
因此主机需要生成一个 DNS 查询报文。该 DNS 查询报文被放入目的地址为 DNS 服务器 IP 地址的 IP 数据报中、然后封装到一个以太网帧,该帧将发送到网关路由器,所以还需要知道网关路由器的MAC地址。
为什么需要知道网关地址?来自知乎回答的提示:PC本身不具备路由寻址能力,所以PC要把所有的IP包发送到一个默认的中转地址上面进行转发,也就是默认网关。
但是,DHCP 过程只知道网关路由器的 IP 地址,因此需要使用 ARP 协议。
完整过程也参考这里
过程概述:主机生成一个包含目的地址为网关路由器 IP 地址的 ARP 查询报文,将该 ARP 查询报文广播给所有的连接设备,网关路由器接收到该帧后,分解报文发现其中的 IP 地址是它自己,就发送一个 ARP 回答报文,包含了它的 MAC 地址,发回给主机。
知道网关MAC地址之后就可以继续发送DNS查询报文了。
DNS解析完整过程参考这里。另外IP地址可能会有缓存,包括:浏览器缓存、系统hosts。
过程概述:主机先向本地DNS服务器查询(递归查询),如果本地DNS服务器有缓存,就直接返回;没有的话,本地DNS服务器就帮忙向更高级的DNS服务器查询(迭代查询),查到了就返回给主机。
FYI,网关路由器到DNS服务器的路由表项,则是通过路由器的内部网关协议(RIP、OSPF)+外部网关协议(BGP)来选择的。
得知目标服务器的IP地址之后,就可以生成TCP套接字、发送HTTP请求了。
建立TCP连接完整参考这里
过程概述:生成TCP套接字,首先要和目标服务器进行三次握手来建立连接。建立连接之后,浏览器生成HTTP报文,发送给目标服务器,后者生成一个HTTP相应报文,把Web内容放入报文主体,发回给主机。
之后浏览器就可以将网址渲染出来了。
完整的渲染过程参考这里
概述
关键是向目标服务器发送了一个HTTP请求,收到一个HTML文件以及其他静态文件,交由浏览器渲染。
完整版
HTTP请求要有客户端和服务端才能成立,HTTP协议基于TCP/IP协议簇,所以在发送前需要知道这个域名、也就是服务端的IP地址,当然客户端自己也先要有自己的IP地址,请求才能返回本机。
前言
【应用层】DHCP配置主机信息
假设主机最开始没有 IP 地址以及其它信息,那么就需要先使用 DHCP 来获取。
过程概述:主机广播一个申请IP地址的DHCP发现报文,DHCP服务器(可能有多个)收到之后,回复一个可用的IP地址以及其他所需信息。主机选用一个IP地址包之后,向这个DHCP服务器发送请求报文,服务器再次回复ack确认报文,这时新主机就有IP地址可以用了。
【网络层】ARP解析MAC地址
主机通过浏览器生成一个 TCP 套接字,套接字向 HTTP 服务器发送 HTTP 请求。为了生成该套接字,主机需要知道网站的域名对应的 IP 地址。
因此主机需要生成一个 DNS 查询报文。该 DNS 查询报文被放入目的地址为 DNS 服务器 IP 地址的 IP 数据报中、然后封装到一个以太网帧,该帧将发送到网关路由器,所以还需要知道网关路由器的MAC地址。
但是,DHCP 过程只知道网关路由器的 IP 地址,因此需要使用 ARP 协议。
过程概述:主机生成一个包含目的地址为网关路由器 IP 地址的 ARP 查询报文,将该 ARP 查询报文广播给所有的连接设备,网关路由器接收到该帧后,分解报文发现其中的 IP 地址是它自己,就发送一个 ARP 回答报文,包含了它的 MAC 地址,发回给主机。
【应用层】DNS解析域名
知道网关MAC地址之后就可以继续发送DNS查询报文了。
过程概述:主机先向本地DNS服务器查询(递归查询),如果本地DNS服务器有缓存,就直接返回;没有的话,本地DNS服务器就帮忙向更高级的DNS服务器查询(迭代查询),查到了就返回给主机。
【网络层】路由选择协议
FYI,网关路由器到DNS服务器的路由表项,则是通过路由器的内部网关协议(RIP、OSPF)+外部网关协议(BGP)来选择的。
【应用层/传输层】HTTP/TCP
得知目标服务器的IP地址之后,就可以生成TCP套接字、发送HTTP请求了。
过程概述:生成TCP套接字,首先要和目标服务器进行三次握手来建立连接。建立连接之后,浏览器生成HTTP报文,发送给目标服务器,后者生成一个HTTP相应报文,把Web内容放入报文主体,发回给主机。
【Web】浏览器渲染
之后浏览器就可以将网址渲染出来了。