浏览器中输入URL后发生了什么?

发布时间:2023-03-02 19:30

浏览器中输入URL后发生了什么?

      • DNS域名解析
      • 使用IP协议、ARP协议、OSPF等协议将消息上传到服务器上
      • 客户端和服务端建立连接
      • 客户端发送HTTP请求
      • 服务端响应HTPP请求
      • 浏览器解析html代码,并请求HTML代码中的资源
      • 断开TCP连接
      • 浏览器对页面进行渲染呈现给用户

在浏览器中输入URL后,执行的全部过程、也就是一次http请求的过程

DNS域名解析

1.DNS域名解析协议
DNS协议的产生主要是IP地址不便记忆,在TCP/IP协议中、起初有一个叫做主机识别码的机制,这种的识别的方式指的是为每一台计算机都赋予唯一的主机名,再进行网络通信的时候可以直接使用主机名来代替IP地址,主机往往维护一个叫做hosts的数据库文件,这个数据库文件存放的就是主机名和IP地址的映射,也就是说,如果IP地址增加或者更新的话,中心的hosts数据库文件就得更新,也就是其它的计算机都要定期的更新这个hosts数据库文件、才能正确的使用网络.网络规模的扩大使这种方式的可行性降低.
所以就有了DNS系统、可以有效地管理主机名和IP之间的对应的关系,
因特网的域名系统被设计成一个联机分布式的数据库系统,并采用客户/服务器模式。域名到IP地址的解析是在域名服务器上进行的,一个服务器所负责(或者说是有权限的)的管辖范围称为区(不是以“域”为单位),各单位根据具体情况来划分自己管辖范围的区,但在一个区中的所有节点必须是能够连通的,每一个区设置相应的权限域名服务器,用来保护该区中的所有主机的域名IP地址的映射。每一个域名服务器不但能够进行一些域名到IP地址的解析,而且还必须具有连向其他域名服务器的信息,当自己不能进行域名到IP地址的转换时,能够知道什么地方去找别的域名服务器。
1、浏览器搜索自己的DNS缓存(维护一张域名与IP地址的对应表);
2、若没有,则搜索操作系统中的DNS缓存(维护一张域名与IP地址的对应表);
3、若没有,则搜索操作系统的hosts文件(Windows环境下,维护一张域名与IP地址的对应表);
4、若没有,则操作系统将域名发送至本地域名服务器—(递归查询方式),本地域名服务器查询自己的DNS缓存,查找成功则返回结果,否则,(以下是迭代查询方式)
4.1. 本地域名服务器向根域名服务器(其虽然没有每个域名的具体信息,但存储了负责每个域,如com、net、org等解析的顶级域名服务器的地址)发起请求,此处,根域名服务器返回com域的顶级域名服务器的地址;
4.2. 本地域名服务器向com域的顶级域名服务器发起请求,返回baidu.com权限域名服务器(权限域名服务器,用来保存该区中的所有主机域名到IP地址的映射)地址;
4.3. 本地域名服务器向baidu.com权限域名服务器发起请求,得到www.baidu.com的IP地址;
5、本地域名服务器将得到的IP地址返回给操作系统,同时自己也将IP地址缓存起来;
6、操作系统将IP地址返回给浏览器,同时自己也将IP地址缓存起来;
7、至此,浏览器已经得到了域名对应的IP地址;

使用IP协议、ARP协议、OSPF等协议将消息上传到服务器上

2.使用IP协议、ARP协议、OSPF等协议将消息上传到服务器上
在实际的通信中,如果只是使用IP协议肯定是不行的,比如在数据链路层的传输,在以太网的情况下使用的是MAC地址来传输数据包的,所以在传输数据的时候,需要其它的协议的辅助.比如ARP和OSPFX协议
ARP解决的是同一个局域网内,主机或路由器的IP地址和MAC地址的映射问题。如果源主机和目的主机在同一个局域网内(目标IP和本机IP分别与子网掩码相与的结果相同,那么它们在一个子网),就可以用ARP找到目的主机的MAC地址;如果不在一个局域网内,用ARP协议找到本网络内的一个路由器的MAC地址,剩下的工作由这个路由器来完成。
OSPF:Open Shortest Path First
它属于链路状态路由协议,具有路由变化收敛速度快、无路由环路、支持变长子网掩码(VLSM)和汇总、层次区域划分等优点。在网络中使用OSPF协议后,大部分路由将由OSPF协议自行计算和生成,无须网络管理员人工配置,当网络拓扑发生变化时,协议可以自动计算、更正路由,极大地方便了网络管理.

客户端和服务端建立连接

3.使用TCP建立连接
也常说的三次握手
\"浏览器中输入URL后发生了什么?_第1张图片\"
TCP服务器进程先创建传输控制块TCB,时刻准备接受客户进程的连接请求,此时服务器就进入了LISTEN(监听)状态;
TCP客户进程也是先创建传输控制块TCB,然后向服务器发出连接请求报文,由Client发出请求连接即 SYN=1 ACK=0 ,同时选择一个初始序列号 seq=x ,此时,TCP客户端进程进入了 SYN-SENT(同步已发送状态)状态。TCP规定,SYN报文段(SYN=1的报文段)不能携带数据,但需要消耗掉一个序号。
TCP服务器收到请求报文后,如果同意连接,则发出确认报文。确认报文中应该 ACK=1,SYN=1,确认号是ack=x+1,同时也要为自己初始化一个序列号 seq=y,此时,TCP服务器进程进入了SYN-RCVD(同步收到)状态。这个报文也不能携带数据,但是同样要消耗一个序号。
TCP客户进程收到确认后,还要向服务器给出确认。确认报文的ACK=1,ack=y+1,自己的序列号seq=x+1,此时,TCP连接建立,客户端进入ESTABLISHED(已建立连接)状态。TCP规定,ACK报文段可以携带数据,但是如果不携带数据则不消耗序号。
当服务器收到客户端的确认后也进入ESTABLISHED状态,此后双方就可以开始通信了。

客户端发送HTTP请求

4.建立TCP连接后发起HTTP请求
HTTP请求也就是以特定的格式发送的数据、格式参考我的这篇博客HTTP、HTTPS

服务端响应HTPP请求

5.服务器响应HTTP请求
HTTP响应也就是以特定的格式发送的数据、格式参考我的这篇博客HTTP、HTTPS
1.负载均衡
网站可能会有负载均衡设备来平均分配所有用户的请求。即对工作任务进行平衡,分摊到多个操作单元上执行,如图片服务器,应用服务器等。
2请求处理阅读请求及它的参数和 cookies

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

6.浏览器解析html代码,并请求HTML代码中的资源(如js、css、图片等)具体的过程参考这篇博客点击查看

断开TCP连接

7.断开TCP连接
也就是常说的四次挥手
但要HTTP请求中是否是长连接。来决定是不是断开TCP连接
\"在这里插入图片描述\"
在HTTP/1.0中默认使用短连接。也就是说,客户端和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。当客户端浏览器访问的某个HTML或其他类型的Web页中包含有其他的Web资源(如JavaScript文件、图像文件、CSS文件等),每遇到这样一个Web资源,浏览器就会重新建立一个HTTP会话。
而从HTTP/1.1起,默认使用长连接,用以保持连接特性。使用长连接的HTTP协议,会在响应头加入这行代码:
在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经建立的连接。Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。实现长连接需要客户端和服务端都支持长连接。
HTTP协议的长连接和短连接,实质上是TCP协议的长连接和短连接。
长连接可以省去较多的TCP建立和关闭的操作,减少浪费,节约时间。对于频繁请求资源的客户端适合使用长连接。在长连接的应用场景下,client端一般不会主动关闭连接,当client与server之间的连接一直不关闭,随着客户端连接越来越多,server会保持过多连接。这时候server端需要采取一些策略,如关闭一些长时间没有请求发生的连接,这样可以避免一些恶意连接导致server端服务受损;如果条件允许则可以限制每个客户端的最大长连接数,这样可以完全避免恶意的客户端拖垮整体后端服务。
短连接对于服务器来说管理较为简单,存在的连接都是有用的连接,不需要额外的控制手段。但如果客户请求频繁,将在TCP的建立和关闭操作上浪费较多时间和带宽。
\"浏览器中输入URL后发生了什么?_第2张图片\"
客户端进程发出连接释放报文,并且停止发送数据。释放数据报文首部,FIN=1,其序列号为seq=u(等于前面已经传送过来的数据的最后一个字节的序号加1),此时,客户端进入FIN-WAIT-1(终止等待1)状态。 TCP规定,FIN报文段即使不携带数据,也要消耗一个序号。
服务器收到连接释放报文,发出确认报文,ACK=1,ack=u+1,并且带上自己的序列号seq=v,此时,服务端就进入了CLOSE-WAIT(关闭等待)状态。TCP服务器通知高层的应用进程,客户端向服务器的方向就释放了,这时候处于半关闭状态,即客户端已经没有数据要发送了,但是服务器若发送数据,客户端依然要接受。这个状态还要持续一段时间,也就是整个CLOSE-WAIT状态持续的时间。
客户端收到服务器的确认请求后,此时,客户端就进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文(在这之前还需要接受服务器发送的最后的数据)。
服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,FIN=1,ack=u+1,由于在半关闭状态,服务器很可能又发送了一些数据,假定此时的序列号为seq=w,此时,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。
客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态。注意此时TCP连接还没有释放,必须经过2MSL(最长报文段寿命)的时间后,当客户端撤销相应的TCB后,才进入CLOSED状态。
服务器只要收到了客户端发出的确认,立即进入CLOSED状态。同样,撤销TCB后,就结束了这次的TCP连接。可以看到,服务器结束TCP连接的时间要比客户端早一些。

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

8.浏览器对页面进行渲染呈现给用户
浏览器渲染引擎最重要的工作就是将HTML文档和CSS文档解析组合并绘制到浏览器窗口上。
具体的过程参考这篇博客点击查看

\0\0\0\0\0\0\0\0

ItVuer - 免责声明 - 关于我们 - 联系我们

本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

桂ICP备16001015号