tomoya06 / web-developer-guidance

Actually it's just a notebook for keeping down some working experience.
4 stars 0 forks source link

Network - What happens after you enter an URL in browser? #9

Open tomoya06 opened 4 years ago

tomoya06 commented 4 years ago

千古难题

20200829补充:MDN也有一份参考答案,在这里。包括了网络部分和浏览器渲染。

概述

关键是向目标服务器发送了一个HTTP请求,收到一个HTML文件以及其他静态文件,交由浏览器渲染。

完整版

HTTP请求要有客户端和服务端才能成立,HTTP协议基于TCP/IP协议簇,所以在发送前需要知道这个域名、也就是服务端的IP地址,当然客户端自己也先要有自己的IP地址,请求才能返回本机。

前言

层级 协议/应用 数据单位
应用层 HTTP/DNS/DHCP 报文
传输层 TCP/UDP 报文段
网络层 IP/ARP 数据报
链路层 MAC地址
物理层 比特

【应用层】DHCP配置主机信息

假设主机最开始没有 IP 地址以及其它信息,那么就需要先使用 DHCP 来获取。

完整过程参考这里

过程概述:主机广播一个申请IP地址的DHCP发现报文,DHCP服务器(可能有多个)收到之后,回复一个可用的IP地址以及其他所需信息。主机选用一个IP地址包之后,向这个DHCP服务器发送请求报文,服务器再次回复ack确认报文,这时新主机就有IP地址可以用了。

【网络层】ARP解析MAC地址

主机通过浏览器生成一个 TCP 套接字,套接字向 HTTP 服务器发送 HTTP 请求。为了生成该套接字,主机需要知道网站的域名对应的 IP 地址。

因此主机需要生成一个 DNS 查询报文。该 DNS 查询报文被放入目的地址为 DNS 服务器 IP 地址的 IP 数据报中、然后封装到一个以太网帧,该帧将发送到网关路由器,所以还需要知道网关路由器的MAC地址。

为什么需要知道网关地址?来自知乎回答的提示:PC本身不具备路由寻址能力,所以PC要把所有的IP包发送到一个默认的中转地址上面进行转发,也就是默认网关。

但是,DHCP 过程只知道网关路由器的 IP 地址,因此需要使用 ARP 协议。

完整过程也参考这里

过程概述:主机生成一个包含目的地址为网关路由器 IP 地址的 ARP 查询报文,将该 ARP 查询报文广播给所有的连接设备,网关路由器接收到该帧后,分解报文发现其中的 IP 地址是它自己,就发送一个 ARP 回答报文,包含了它的 MAC 地址,发回给主机。

【应用层】DNS解析域名

知道网关MAC地址之后就可以继续发送DNS查询报文了。

DNS解析完整过程参考这里。另外IP地址可能会有缓存,包括:浏览器缓存、系统hosts。

过程概述:主机先向本地DNS服务器查询(递归查询),如果本地DNS服务器有缓存,就直接返回;没有的话,本地DNS服务器就帮忙向更高级的DNS服务器查询(迭代查询),查到了就返回给主机。

【网络层】路由选择协议

FYI,网关路由器到DNS服务器的路由表项,则是通过路由器的内部网关协议(RIP、OSPF)+外部网关协议(BGP)来选择的。

完整过程参考这里

【应用层/传输层】HTTP/TCP

得知目标服务器的IP地址之后,就可以生成TCP套接字、发送HTTP请求了。

建立TCP连接完整参考这里

过程概述:生成TCP套接字,首先要和目标服务器进行三次握手来建立连接。建立连接之后,浏览器生成HTTP报文,发送给目标服务器,后者生成一个HTTP相应报文,把Web内容放入报文主体,发回给主机。

【Web】浏览器渲染

之后浏览器就可以将网址渲染出来了。

完整的渲染过程参考这里