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语法:

GET /index.html HTTP/1.1\r\nHost: Unsupported markdown: link

源端口: 12345, 目标端口: 80\r\n序列号: x\r\n确认号: y\r\n...

源IP: 192.168.1.2, 目标IP: 93.184.216.34\r\n...

目标MAC: 00:1A:2B:3C:4D:5E, 源MAC: 00:1E:2F:3G:4H:5I\r\n...

物理层: 光信号/电信号

数据链路层: 以太网帧

网络层: IP

传输层: TCP

源端口: 80, 目标端口: 12345\r\n序列号: y, 确认号: x+数据长度\r\n...

HTTP/1.1 200 OK\r\nContent-Type: text/html\r\nContent-Length: 1234\r\n\r\n...

应用层: 客户端发送HTTP请求

传输层: TCP

网络层: IP

数据链路层: 以太网帧

物理层: 光信号/电信号

互联网传输

物理层: 光信号/电信号

数据链路层: 以太网帧

网络层: IP

传输层: TCP

应用层: 服务器返回HTTP响应

在这个流程图中,每一层的具体作用和信息流动如下:

  1. 应用层(Application Layer):客户端发送HTTP请求报文(例如:GET /index.html HTTP/1.1\r\nHost: www.example.com\r\n\r\n)。
  2. 传输层(Transport Layer):TCP协议处理,将应用层数据封装成TCP段(包含源端口、目标端口、序列号、确认号等)。
  3. 网络层(Network Layer):IP协议处理,将传输层数据封装成IP数据包(包含源IP地址和目标IP地址等)。
  4. 数据链路层(Data Link Layer):以太网帧封装,包含MAC地址等信息。
  5. 物理层(Physical Layer):将数据转换成光信号或电信号,通过物理介质传输。

服务器接收到请求后,进行相应处理并返回HTTP响应,响应的流程也经过相同的七层模型:

  1. 物理层(Physical Layer):光信号或电信号返回。
  2. 数据链路层(Data Link Layer):数据解封装,从以太网帧中提取出IP数据包。
  3. 网络层(Network Layer):从IP数据包中提取出TCP段。
  4. 传输层(Transport Layer):从TCP段中提取出应用层数据。
  5. 应用层(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 国际」许可协议进行许可。

posted @   issenxiao  阅读(11)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示