从浏览器输入地址到呈现页面中间发生了什么事情(通信过程)
1,浏览器(客户端)进行地址解析。
浏览器获取到一个字符串,并把它进行补全,成为一个URL。
2,将解析出的域名进行dns解析。
DNS解析,将域名转换为IP地址。有如下几个步骤:
1,先查看浏览器dns缓存中是否有域名对应的ip。
2,如果没有,则产看操作系统dns缓存中是否有对应的ip(例如windows的hosts文件)。
3,依旧没有就对本地区的dns服务器发起请求,
4,如果还是没有,就直接到Root Server域名服务器请求解析。
3,通过ip寻址和arp,找到目标(服务器)地址。
通过IP寻址服务器,通过ARP协议找到服务器的MAC地址。
4,进行tcp三次握手,建立tcp连接。
5,浏览器发送数据,等待服务器响应。
6,服务器处理请求,并对请求做出响应。
7,浏览器收到服务器响应,得到html代码。
8,渲染页面。
HTTP1.0
会话方式:反复创建和断开TCP连接(短连接)
1,TCP三次握手建立连接
2,客户端向服务端发送请求信息
3,服务端回应响应信息
4,关掉连接
每次请求响应要消耗2个RTT时间,建立连接RTT+请求和响应RTT=2RTT
HTTP1.1
默认进行长连接
在服务器发送相应后仍然在一段时间内保持这条连接。
问题:长连接的下一个连接中的请求是串行的,如果某个请求出现网络阻塞问题,会导致同一条连接上的后续请求被阻塞。
非流水线工作方式:
客户端发送给服务端一个请求->服务端回发一个响应报文。
在客户端接收到响应报文之后,才允许发下一个请求,用时一个RTT(报文往返时间)
缺点:服务器发送一个对象后,处于空闲状态,浪费资源。
流水线工作方式:(pipelining)
客户在收到http响应报文之前就能够接着发送新的请求报文,因此服务器可以连续返回响应报文。
能够使TCP连接的空闲时间减少,提高下载效率。
一个PING的例子:
https://blog.csdn.net/ztsinghua/article/details/83413264