❶ 当在浏览器输入一个 URL 后敲下回车, 浏览器首先会根据这里的域名查询对应的 IP 地址;
❷ 浏览器构造一个 HTTP 请求, 并且这个请求中就包含着域名信息;
❸ 浏览器调用操作系统的 Socket api, 把 HTTP 数据交给 TCP 来处理, 这时候 TCP 协议就需要构造一个 TCP 数据报;
❹ 网络层把 TCP 数据报封装成一个或者多个 IP 数据报, 进一步进行封装, 然后把数据交给数据链路层;
❺ 数据链路层会把这个数据再封装成以太网数据帧; 在构造帧头的时候就需要根据 IP 映射到 MAC 地址, 这个构造过程就依赖了 ARP 协议; 然后将数据再交给物理层;
❻ 物理层将数据转换成电信号, 继续传输;
❼ 电信号通过网线或者光纤到达下一个路由器, 路由器就会针对收到的数据进行分用;
❽ 数据到达接收方也就是服务器端, 在服务器端进行分用并层层解析;
❾ 应用程序调用对应的 Socket api, 从 TCP 接收缓冲区中读取数据;
❿ 服务器会对这个路径进行配置, 映射到一个具体的 html 中, 服务器就会读取这个文件, 把这个文件的内容构造成一个 HTTP 响应数据, 然后再调用 Socket api 进行发送;
⓫ 重复上述 4-6 步骤封装的过程, 服务器发送的响应数据也要进行层层封装, 最后变成一个物理层上传输的光电信号; 然后将这个光电信号发送到下一个路由器;
⓬ 路由器接收到光电信号后, 路由器还是重复上面步骤 7-8 分用的过程, 解析到 IP 这一层, 取出其中的 IP, 再次查询路由表, 找到下一个设备在哪, 然后再进行封装数据;
⓭ 重复上述过程, 依次进行转发, 最终到达用户的主机;
⓮ 用户主机重复上面分用的过程, 依次把数据取出来, 交给应用程序;
⓯ 浏览器得到 HTTP 响应报文并进行解析, 获取到 html 内容并进行渲染; 当然 html 中可能包含很多的标签, 这时候这些标签就会触发第二次请求, 浏览器再根据这些标签信息构造出 HTTP 请求, 重复上面的过程.