万物之中, 希望至美.

Packet Tracer 模拟一次完整的HTTP请求

2018.02.01

Q:当我们在浏览器中访问一个网址的时候 ,浏览器背后到底发生了什么呢? A:DNS域名解析 –> 发起TCP的3次握手 –> 建立TCP连接后发起http请求 –> 服务器响应http请求,浏览器得到html代码 –> 浏览器解析html代码,并请求html代码中的资源(如js、css、图片等) –> 浏览器对页面进行渲染呈现给用户 –> 进行TCP的4次挥手

这里我在Packet Tracer中模拟一次简单的HTTP请求

环境准备

网络拓扑图如下: 网络拓扑图

域名解析

首先浏览器会向DNS服务器发送DNS数据包,请求访问域名所对应的IP地址,这里以在PC1中的浏览器访问www.test.com为例。模拟模式中可以看到PC1产生的DNS数据包以及DNS服务器响应的数据包:

发起TCP的三次握手

得到域名对应的IP地址之后,浏览器会向web服务器发起TCP连接请求,web服务器收到请求后发出响应,过程如下: TCP数据包内容如下:

建立TCP连接后发起http请求

经过TCP的3次握手之后,浏览器发起了http的请求,使用的http的方法 GET 方法,请求的URL是 / ,协议是HTTP/1.1

服务器端响应http请求,浏览器得到html代码

服务器端WEB程序接收到http请求以后,就开始处理该请求,处理之后就返回给浏览器html文件。

浏览器解析html代码,并请求html代码中的资源

浏览器拿到服务器返回的html文件后,就开始解析其中的html代码,遇到js/css/image等静态资源时,就向服务器端去请求下载。

浏览器对页面进行渲染呈现给用户

这里的html很简单就只有一行文本

进行TCP的4次挥手

当数据传送完毕,浏览器会发起断开连接请求,这就有了TCP的4次挥手的过程。

这里不知道是Packet Tracer版本还是其他什么问题,服务器在收到客户端断开连接请求的时候,只发了FIN+ACK的TCP数据包,没有先发送含有ACK的TCP数据包。

至此就完成了一次简单的HTTP请求,这里只是简单的描述一下,实际中要比模拟出来的复杂很多。

comments powered by Disqus