输入url,一次请求流程

流程如下:
域名解析
发起TCP的3次握手
建立TCP连接后发起http请求
服务器响应htp请求
浏览器解析htm代码,并请求html代码中的资源(如js、css、图片等)
浏览器对页面进行渲染呈现给用户

在这里插入图片描述

1.域名解析–DNS解析
DNS解析就是一个递归查询过程:
比如域名:www.baidu.com.,
1.浏览器搜索自己的DNS缓存(维护一张域名与IP地址的对应表)

2.若没有,则搜索操作系统中的DNS缓存(维护一张域名与IP地址的对应表)

3.若没有,则搜索操作系统的hosts文件(Windows环境下,维护一张域名与IP地址的对应表,位置一般在 C:\Windows\System32\drivers\etc\hosts)

4.若没有,则操作系统将域名发送至 本地域名服务器- -(递归查询方式),本地域名服务器 查询自己的DNS缓存,查找成功则返回结果,否则,(以下是迭代查询方式)
本地域名服务器 向根域名服务器(其虽然没有每个域名的具体信息,但存储了负责每个域,如com、net、org等的解析的顶级域名服务器的地址)发起请求,此处,根域名服务器返回com域的顶级域名服务器的地址
本地域名服务器 向com域的顶级域名服务器发起请求,返回baidu.com权限域名服务器(权限域名服务器,用来保存该区中的所有主机域名到IP地址的映射)地址

5.本地域名服务器 向baidu.com权限域名服务器发起请求,得到www.baidu.com的IP地址

6.本地域名服务器 将得到的IP地址返回给操作系统,同时自己也将IP地址缓存起来

7.操作系统将 IP 地址返回给浏览器,同时自己也将IP地址缓存起来

至此,浏览器已经得到了域名对应的IP地址

在这里插入图片描述

2.三次握手建立连接
在这里插入图片描述

扫描二维码关注公众号,回复: 13132841 查看本文章

第一次握手
客户端发送syn包的数据包到服务器,其中SYN标志位为1, ACK=0,发送顺序号seq=i(随机int)并进入SYN_SEND状态,等待服务器确认;
问题:此时如果报文丢失发送不到对端会如何?
答:C端发送报文之后会启动一个定时器,在超时之后未收到S端的确认,会再次发送SYN请求,每次尝试的时间会是第一次的二倍,如果总的总尝试时间为75秒,此次建立链接失败。
第二次握手
服务器收到syn包,发现SYN=1,表示客户端请求连接,必须确认客户的SYN(将SYN和ACK置为1应答,表示同意连接),发送确认包ACK包(ack=i+1表示i之前的已经收到,期望接收下一个字节数据),同时自己也发送一个SYN包(seq=j 随机产生),即SYN+ACK包,此时服务器进入SYN_RECV状态。
问题:如果第二次报文丢失怎么办?
在发送完ACK+SYN报文后会启动一个定时器,超时没有收到ACK确认,会再次发送,会进行多次重试。超时时间依旧每次翻倍,重试次数可设置。
第三次握手
客户端收到服务器的SYN+ACK包,首先进行检查(ack是否为i+1, ACK是否为1),如果正确向服务器发送确认包ACK(ack=j+1),此包发送完毕;服务器进行检查(ack是否为j+1, ACK是否为1),如果正确,客户端和服务器进入ESTABLISHED状态,完成三次握手
握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP连接都将被一直保持下去。

3.建立TCP连接后发起http请求
1、http协议
HTTP是一个客户端和服务器端请求和应答的标准(TCP)。客户端是终端用户,服务器端是网站。通过使用Web浏览器、网络爬虫或者其它的工具,客户端发起一个到服务器上指定端口(默认端口为80)的HTTP请求,也就是计算机通过网络进行通信的规则,是一个基于请求与响应,无状态的,应用层的协议,常基于TCP/IP协议传输数据

4.服务器收到请求并响应HTTP请求
HTTP相应报文三部分:状态码、响应报头、响应报文
状态码
在这里插入图片描述
响应报头
常见的响应报头字段有: Server, Connection…

响应报文
服务器返回给浏览器的文本信息,通常HTML, CSS, JS, 图片等文件就放在这一部分

5.浏览器对页面进行渲染呈现给用户
浏览器是一个边解析边渲染的过程。首先浏览器解析HTML文件构建DOM树,然后解析CSS文件构建渲染树,等到渲染树构建完成后,浏览器开始布局渲染树并将其绘制到屏幕上。

猜你喜欢

转载自blog.csdn.net/hxl2585530960/article/details/115434511