-
浏览器,首先会根据这里的域名,查询对应的 IP 地址;
1. 先检查一下自身的缓存
2. 再查 hosts 文件
3. 再查 DNS 服务器
-
浏览器构造一个 HTTP 请求,这个 HTTP 数据就包含了这个域名信息(用户输入的域名)。
-
浏览器调用操作系统的 socket API,把这个 HTTP 数据交给 TCP 做进一步处理,TCP 协议就会将此数据构造一个 TCP 数据段。
1. 在发送 TCP数据段之前,首先要进行“三次握手”,建立连接;(此处的“三次握手”所涉及的 SYN/ACK 同样要经过网络层、数据链路层、物理层依次封装到达对端服务器之后再依次进行分用)
2. 具体进行传输,发送方会把这个 TCP数据段交给IP协议进行再一次封装; -
网络层把TCP数据段进一步封装成一个IP数据报;(也可能是多个IP数据报,IP协议会进行自动分包的过程)然后把数据报交给数据链路层。
-
数据链路层会进一步把这个数据封装成以太网数据帧, 在构造帧头的时候就需要根据IP映射MAC地址,这个构造的过程依赖了ARP协议。然后再把这个数据交给物理层传输。
-
物理层将这个数据转换为光电信号继续进行传输。
-
电信号沿着网线,到达下一个设备(路由器),路由器就会针对收到的数据进行分用,物理层把数据交给了数据链路层,数据链路层把数据交给了网络层,路由器拿到了网络层中的IP数据报,取出其中的 IP地址,查询路由表,找到下一个需要传输的目标,进一步再找到下一个目标的 MAC地址,然后将数据重新封装(把数据交给数据链路层和物理层)。此时的 源MAC 和 目的MAC 已经发生更改。
-
数据到达接收方,仍然要进行分用。层层解析,物理层将电信号转换成以太网数据帧,交给数据链路层;数据链路层解析出 IP数据报,交给网络层(都涉及到了CRC校验,如果校验和不对,说明数据错误,直接丢弃);IP 协议再进行解析,获得了一个 TCP 数据段(IP报头中有协议类型);这个解析过程可能还涉及组包的过程,再根据 TCP数据报中的端口号,找到对应的进程,把数据放入对应的 socket 的接受缓存区中。
-
应用程序调用对应的socket API,从 TCP接收缓冲区中读取数据,应用程序把这个数据按照 HTTP 协议来解析,获取其中的 URL,根据 URL 指定的路径,知道了要获取数据的根路径。
-
服务器会对这个根路径进行配置,映射到一个具体的index.html这样的一个HTML文件,服务器读取这个文件,把其中的数据构造成一个 HTTP 响应数据,然后再调用 socket API 进行发送。
-
重复上面封装的过程,服务器发送的响应数据也要层层封装,最终变成一个物理层传输的光电信号。
-
光电信号到达下一个路由器,路由器重复上述的分用过程,解析到 IP 这一层,取出其中的目的IP,查路由表找到下一设备在哪里,重新封装数据。
-
重复这个过程,依次转发,最后达到用户的主机。
-
用户主机重复上面的分用过程,依次把数据取出来,最终交给应用程序。
-
浏览器得到了 HTTP 响应报文,解析这个报文,获得其中的 html 内容,根据 html 进行渲染。
从输入URL到展示出页面,这个过程发生了什么?
最新推荐文章于 2023-04-04 19:45:37 发布