一.合成url
浏览器判断用户输入的内容是搜索还是网址,如果是搜索内容则利用浏览器默认的搜索引擎合成搜索URL,如果是网址符合URL规则,则根据URL协议,合成合法的网址URL
二.DNS域名解析
浏览器,客户端输入域名查找的过程
通过递归的方式,一层一层的往下查找,何一步找到了都会结束查找流程。如下图
前面几步是因为浏览器有解析过该域名并保存到缓存中了,最后一步才是在本地DNS服务器查找
DNS服务器
DNS服务器的查找过程
三.建立TCP连接
为什么要进行三次握手呢?
其主要的目的是为了同过三次握手要确认双方(客户端和服务端)的发送能力和接收能力是否正常,并指定自己的ISN初始化序列号(Initial Sequence Number)为后面的可靠性做准备。
通过三次握手,建立连接(最好就是能画三次握手)如下图
刚开始客户端处于 Closed 的状态,服务端处于 Listen 状态。
第一次握手
具体点就是:客户端向服务端发送一个SYN
报文,并指明客户端的初始序列号为ISN©,
此时客户端就把状态改为SYN_SENT
报文的具体内容:SYN=1
,初始序号seq=x
(上面的图也有记录)
需要注意的是:SYN=1
的报文段不能携带数据,但要消耗掉一个序号。(现在还不能理解,以后接触到了可能就理解了)
第二次握手
具体点就是: 服务端接收客户端发送过来的SYN
报文后返回一个SYN
报文给客户端,并且把自己(服务端)的初始化序列号设置为ISN(s)
。同时也返回一个ACK
报文(ISN + 1 作为ACK 的值)给客户端表示自己以接收到客户端发送过来的SYN
报文,此时服务端的状态为SYN_REVD
- 报文的具体内容:
SYN=1
,ACK=1
,确认号ack=x+1
,初始序号seq=y
。
第三次握手
具体点就是: 客户端接收到服务端返回的SYN
,ACK
报文后,也向服务端发送一个ACK
报文表示已经收到了服务端的 SYN
,ACK
报文。此时的客户端的状态改为ESTABLISHED(established)
,当服务端接收到ACK报文后,也把自己的状态改为ESTABLISHED
,这样双方就建立了连接,总算是能安安心心的传输发送数据了
具体的报文内容: SCK = 1,序列号seq = x+1,确认号ack = y+1
三次握手是一次都不能少的
- 第一次为了让服务端确认客户端的发送能力
- 第二次是为了让客户端确认服务端发送能力和接收能力
- 第三次则是为了让服务端确定客户端的接收能力
三次握手是否可以携带数据
答案是:只有第三次握手可以携带数据,因为只有在第二次完成后客户端才知道服务端是否能接收和发送数据,使用第三次握手才可以携带带数据。假如不顾服务端是否能接收到数据,不停的通过SYN报文向服务端发送数据,这会让服务器花费很多时间、内存空间来接收这些报文。
四.发送HTTP请求,服务器处理请求,返回响应结果
建立TCP连接后,浏览器利用HTTP/HTTPS协议来向服务器发送请求,服务器接受到请求,就解析请求头,如果头部有缓存相关信息如if-none-match
与if-modified-since
,则验证缓存是否有效,若有效则返回状态码为304,若无效则重新返回资源,状态码为200.
五.关闭TCP连接
刚开始双方都属于ESTABLISHED状态,假如是客户端发起挥手
第一次挥手
客户端向服务端发送FIN连接释放请求报文(FIN=1)并指定序列号seq = u,此时客户端处于FIN_WAIT1状态
第二次挥手
服务端接收到FIN连接释放报文后,向客户端发送一个ACK确认报文(具体内容:ACK = 1,序列号seq = v,确认号ack = u+1),表示服务端已经接收到请求,此时服务端状态改为COLSE_WAIT,当客户端接收到ACK确认报文后,客户端状态改为FIN_WAIT2状态,表示等待服务端发送释放请求。
第三次挥手
服务端发送FIN连接释放请求报文给客户端(具体内容:FIN = 1,ACK = 1,序列号seq= w 确认号ack= u+1 ),并指定一个序列号为seq = w,此时服务端的状态改为LAST_ACK
第四次挥手
客户端收到FIN连接释放请求报文后也发送一个ACK确认报文(具体内容:ACK =1 ,序列号seq = u+1,确认号ack=w+1 )给服务端并进入等待状态当等到完成此时客户端的状态改为COLSE,当服务端接收到客户端发送过来的ACK报文后,也把状态改为COLSE,这样双方的连接都处理关闭状态了
六.浏览器渲染
最后
参考文章
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 模板不会安装或需要功能定制以及二次开发?
发表评论
还没有评论,快来抢沙发吧!