当在浏览器输入url回车之后的奥秘
针对这个问题,可能很少有人会去思考,在如今网络发达的社会,按照自己的多年在网上冲浪的经验,感觉输入一些访问路径之后,在有网的情况下就应当出来对应的页面,成为了一个理所应当的东西,这真的是那么容易的事情吗?
这个过程大致可以分几个阶段:
-
dns解析
-
建立连接(TCP协议三次握手)
-
发送http请求
-
根据对应请求访问主机对应的服务器软件进行处理
-
将结果返回给你
-
浏览器根据响应渲染页面
-
断开连接(四次挥手断开连接)
下面来谈谈具体他们是如何进行的:
- 根据输入的url,浏览器对其解析出对应的域名,浏览器会先检查该域名是否存在于缓存中,如果没有,DNS协议利用UDP传输层协议,向本地DNS服务器发送请求,获取该域名对应的IP地址,如果本地DNS服务器没有,则会选择网络上的DNS服务器,直到找到,如果找到根服务器还是无法找到,则报错。
- 根据获取到的ip地址为对应ip与其http默认的端口号80,本机发起TCP建立连接请求与目标主机建立连接
- 连接建立完成后,发起get请求,该请求根据输入的url携带的参数信息对其进行解析,封装成为http请求报文,主机接受到对应的报文信息,进行对应主机解析方法和请求路径与对应的web服务器软件上配置的路径进行匹配对应的servlet或者静态页面。
- 将返回数据通过建立的TCP连接进行返回,如果返回数据超过一次tcp携带的数据时,将分多次tcp传输,数据传输完成后,应用层封装成响应报文进行传输过来
- 浏览器进行解析响应报文,进行渲染页面,在进行渲染页面时,浏览器发现还有其他静态资源,如css、js、图片时会再次发起另外的http请求
- 如果本次连接还进行了其他的Http请求进行发起请求,但传输层不再进行建立连接,也就是所谓的长连接机制
- 当本次连接不在有请求和响应时,TCP通过四次挥手将连接断开,如果还有将继续进行交互。