- 作者:老汪软件技巧
- 发表时间:2024-09-12 11:01
- 浏览量:
我们平时去访问某个网站时,通常会有几种方式去访问,直接通过链接跳转到想要访问的网页,还有一种方式就是输入网址进行访问。那么今天我要介绍的就是当你在浏览器输入网址并且敲下回车后,我们是如何能在浏览器上看到网页的。
正文
浏览器首先会判断该URL是否合法,如果不合法会用浏览器搜索引擎进行搜索,合法的话进入下一步。如果URL是合法的,会先在本地强缓存中查找对应资源,如果找到了对应的缓存资源,并且这个缓存的max-age没有过期,就命中该资源,返回200状态码和资源。否则就进入下一步。
接下来的过程大致分为两个部分:网络通信和页面渲染。
网络通信1. DNS解析
首先就是DNS解析,它会根据你输入的域名去查询对应的ip地址,
浏览器会先到本地域名服务器,递归查找域名对应的ip找不到,就会进行一个迭代查询,根域名服务器查找域名对应的ip再找不到,就到顶级域名服务器查找域名对应的ip还找不到,就到目标域名服务器查找域名对应的ip找到后,浏览器将ip写入DNS缓存,方便下次直接在本地查找的到这个域名对应的ip2. 发送请求
当客户端(如浏览器)需要访问一个特定的网络资源时,在DNS解析得到目标服务器的IP地址后,接下来的步骤就是向该服务器发送HTTP请求。HTTP请求消息通常包含三个主要部分:请求行、请求头以及请求体(或称请求主体)。下面是对这些部分的一个概述:
请求行:
请求头:
请求主体:
3. TCP 三次握手
TCP三次握手大致如下
客户端向服务端发送建立连接请求, 客户端进入SYN-SENT状态服务端向客户端发送同意连接的应答,服务端进入SYN-RECEIVED状态客户端收到服务端的同意连接的应答后,再向服务端发送一个确认接收到的应答。客户端进入 ESTABLISHED状态,服务端也进入ESTABLISHED状态
从这三个步骤可以看出,它就是建立连接的一个过程
相信有的小伙伴有这样的疑问,建立连接为什么一定要三次,客户端先发连接请求,服务端答应请求,服务端发送同意请求,客户端同意就可以连接了,两次不就可以建立连接了吗,
关于这个问题,我们使用假设反证
我们先假设只有两次:当客户端向服务端发送一个建立连接请求A 通讯兵,如何网络环境差,导致这个通讯兵A丢失了,根据TCP的超时重传机制,当一定时间后:客户端没有收到服务端请求,客户端会自动再次发送一个建立连接请求B 通讯兵,这个B成功传给了服务端,服务端会给客户端发送同意连接的应答,此时成功建立连接当数据通信完成后,客户端和服务端都关闭后,如果这个A请求卷土重来传给服务器了,服务端就会建立连接进入ESTABLISHED状态,但是客户端此时关闭了,服务器就会陷入一个等待请求状态,消费服务器性能
如果是三次的话,服务端超过时效没有接收到客户端确认接收到的应答,服务器就会关闭
4. IP协议查询MAC地址并将数据发送的数据链路层
在互联网通信的过程中,当需要将数据从一台设备发送到另一台设备时,首先需要确定目标设备的物理地址(即MAC地址),以便在数据链路层上进行通信。IP协议负责的是网络层的工作,它处理的是基于IP地址的逻辑寻址。然而,当数据需要通过物理网络(如以太网)传输时,就需要使用诸如ARP(Address Resolution Protocol,地址解析协议)这样的机制来查询目标设备的MAC地址。通过ARP协议,发送方可以将一个IP地址映射为物理层上的MAC地址,这一过程发生在数据链路层。一旦获得了目标设备的MAC地址,数据就被封装成帧,并通过数据链路层发送到目标设备,从而实现了在同一网络段内的设备间的数据传输。
5. 数据传输
接下来就可以开始正式的 HTTP数据传输了。其实要说的话,建立连接的时候也就可以传输数据了,只是很小而已。