WEB页面请求历程
WEB页面请求历程
下载一个Web页面#
1、准备DHCP、UDP、IP和以太网#
当一台PC与网络连接时,没有IP地址就不能做任何事情(例如下载一个 Web 网页)。所以,主机所采取的一个网络相关的动作是运行 DHCP 协议,以从本地 DHCP 服务器获得一个 IP 地址以及其他信息。
主机运行DHCP协议发送DHCP请求报文:
DHCP请求报文(主机/应用层)-->UDP报文段(主机/运输层)-->IP数据报(主机/网络层)-->以太网帧(交换机/链路层);
以太网帧(交换机/链路层)-->广播到与交换机相连的所有设备-->以太网帧(路由器/链路层);
以太网帧(路由器/链路层)-->IP数据报(DHCP服务器/网络层)-->UDP报文段(DHCP服务器/运输层)-->DHCP请求报文(DHCP服务器/应用层);
DHCP服务器接收到DHCP请求报文后以CIDR块分配地址,并以一个DHCP ACK报文响应,该报文以上面相同的路径返回给请求主机,现在主机拥有了一个IP地址;
2、DNS和ARP,域内路由选择到DNS服务器#
在主机被分配到IP后,就可以访问网页了,在浏览器输入网站域名后,浏览器通过生成一个TCP套接字用于向指定域名发送HTTP请求,为了生成该套接字,主机需要直到对应域名的服务器IP地址,因此现在需要使用DNS协议来获取服务器IP地址;
在发送DNS查询报文之前,主机协议通过ARP协议获取网关路由器的MAC地址;
主机运行DNS协议发送DNS查询报文:
DNS查询报文(主机/应用层)-->UDP报文段(主机/运输层)-->IP数据报(主机/网络层)-->以太网帧(网关路由器/链路层);
以太网帧(路由器/链路层)-->BGP路由转发-->以太网帧(路由器/链路层)
以太网帧(路由器/链路层)-->IP数据报(DNS服务器/网络层)-->DNS查询报文(DNS服务器/应用层);
DNS服务器找到域名对应的IP地址后,通过DNS回答报文以相同的发送路径返回给请求主机,现在主机知道了域名对应的IP地址;
3、web客户-服务器交互:TCP和HTTP#
现在,主机有了要访问域名对应的IP地址,因此可以生成TCP套接字来向服务器发送HTTP GET报文,在发送正式请求之前,主机与服务器需要先执行TCP三次握手来建立连接;
主机发送HTTP GET报文:
HTTP GET报文(主机/应用层)-->TCP报文段(主机/运输层)-->...--->TCP报文段(服务器主机/运输层)-->HTTP GET报文(服务器主机/应用层);
服务器收到HTTP GET报文后,生成一个响应报文,将请求的Web页内容放入HTTP响应体中,并将报文通过TCP发送给请求主机;
基于七层OSI参考模型的Mermaid图示#
使用七层OSI参考模型来详细描述下载一个Web页面的请求历程,可以展示每一层的具体作用和信息流动。以下是一个详细的流程图,基于Mermaid语法:
在这个流程图中,每一层的具体作用和信息流动如下:
- 应用层(Application Layer):客户端发送HTTP请求报文(例如:
GET /index.html HTTP/1.1\r\nHost: www.example.com\r\n\r\n
)。 - 传输层(Transport Layer):TCP协议处理,将应用层数据封装成TCP段(包含源端口、目标端口、序列号、确认号等)。
- 网络层(Network Layer):IP协议处理,将传输层数据封装成IP数据包(包含源IP地址和目标IP地址等)。
- 数据链路层(Data Link Layer):以太网帧封装,包含MAC地址等信息。
- 物理层(Physical Layer):将数据转换成光信号或电信号,通过物理介质传输。
服务器接收到请求后,进行相应处理并返回HTTP响应,响应的流程也经过相同的七层模型:
- 物理层(Physical Layer):光信号或电信号返回。
- 数据链路层(Data Link Layer):数据解封装,从以太网帧中提取出IP数据包。
- 网络层(Network Layer):从IP数据包中提取出TCP段。
- 传输层(Transport Layer):从TCP段中提取出应用层数据。
- 应用层(Application Layer):服务器返回HTTP响应(例如:
HTTP/1.1 200 OK\r\nContent-Type: text/html\r\nContent-Length: 1234\r\n\r\n<html>...</html>
)。
这种方式展示了整个网络请求过程中的每一层如何相互协作,共同完成一次Web页面的下载请求。
作者:issenxiao
出处:https://www.cnblogs.com/issenxiao/p/18255926
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下