从浏览器地址栏输入url到显示页面的步骤
SYN = 1 ,表示这是一个 请求连接报文 或者 连接接受报文
ACK1 确定收到了请求
FIN 终止 断开连接
seq 发送自己的数据
ack 发送接收到对方的数据
DNS寻址 ==>建立连接 ==>发送请求 ==>处理并回传 ==>接收并渲染 ==> 释放连接
-
DNS寻址
通常我们在浏览器当中输入的URL(统一资源定位符)是域名,而不是直接输入ip(基本上指向计算机)地址。从宏观角度来讲,当我们输入URL并且提交的时候,第一步就是根与域名寻找目的服务器的ip地址,这个过程就是DNS域名解析。
首先,本地电脑会将一些经常使用的域名与相应的ip建立一个映射关系,并保存在系统hosts文件当中,进行DNS解析优先在hosts当中当中查找,找到就直接用,毕竟是最快的。
其次,没有其对应映射的,那就求助于本地DNS服务器(ipv4 / ipv6下的dns),找到就返回,找不到就向上一级DNS服务器发送请求,直至根服务器。域名解析必须有一个结果,有或者没有。
本地DNS简称 LDNS ISP是因特网服务提供商
(补充CDN知识:)
CDN即内容分发网络,比如你的 -
建立连接
通过第一步拿到的ip地址,就能在茫茫人海当中找到目标服务器,但是 在此之前需要建立传输通道,这个就是建立连接。这个过程就是著名的TCP三次握手。
那么为什么是三次,两次不行吗?结果肯定毋庸置疑是 达咩。
解释如下:
我向你发送信息,我怎么知道你有没有收到我的信息呢?你回复一下不就代表收到了,是不是这个道理
你回复之后,你不知道我是否收到了你的信息,所以我要告诉你我收到了你的信息
我再发送一条告诉你,我收到你的信息了
这就是三次,但凡有一次没收到,那我就也要一直发,直到你回复
-
发送请求
建立连接后,双方可以开始传输数据了,首先在请求报文中必须明确请求的端口是哪个,还要确认端口,http默认80,然后浏览器向服务器发送请求,这个过程就是 应用层 ==> 运输层 ==>网际层IP ==>网络接口层。从应用层开始,消息以HTTP请求报文的形式,在传输层,网络层,数据链路层逐层打上头部,进行传输。服务器接收到数据在逐层解套,最终收到HTTP协议的请求报文。
总之四层模型的机制保证了请求报文正确完整地发送到服务器端。
-
处理并回传
服务端受到请求报文,就会根据请求报文提供的要求,比如端口,参数等等,去执行相应的操作,并将执行结果以响应报文的形式回传给服务器。如果请求的是静态资源直接回传,如果需要动态生成那么web服务器就会调用不同的程序来调用数据库生成最终的HTML文件,在回传给浏览器。
-
接收并渲染
同样经过层层添加头部和去除投出,浏览器最终得到服务器返回的HTML数据,这个时候浏览器就加载在数据,根据内容开始渲染页面,数据加载完成就会触发onload事件。
浏览器会根据相应的内容来处理响应。如果响应可缓存,浏览器将把响应缓存。
需要注意的时候,第一次浏览器获得的是HTML文件,但是HTML文件如果继续有新资源的请求,那么就会建立新的连接,跟刚刚的过程一样。比如外部的css,js,图片等文件。
-
释放连接
TCP链接是无状态的,也就是一次性的,不会永久保存这个状态,所以双方完成一次数据的传输之后,如果没有持续的请求,那就要释放连接。
四次挥手断开连接。