输入url后浏览器干了些什么(详解)
DNS(Domain Name System, 域名系统) 解析
DNS解析的过程就是寻找哪台机器上有你真正需要的资源过程.但你在浏览器张红输入一个地址时,例如:baidu.com,其实不是百度网站真正意义上的地址.互联网上每一台计算机的唯一标识是他的IP地址,但是IP地址并不方便记忆.用户更细化用方便记忆的网址去寻找互联网上的其他计算机.也就是上面提到的百度的网址.所以互联网设计者需要在用户的方便性与可用性做一个权衡,这个权衡就是一个网址到IP地址的转换,这个过程就是DNS解析.他实际上充当了一个翻译的角色,实现了网址到IP地址的转换.当然如果你直接输入的是另一台电脑的IP地址来访问他,那么不存在这一步.
TCP连接(三次握手)
知道了服务器的IP地址,就开始和服务器简历连接了.连接的建立需要经历三次握手
- 第一次握手: 建立连接时,客户端发送syn包(syn=j)到服务器,并进入
SYN_SENT
,等待服务器确认. - 第二次握手: 服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己发送一个SYN包(syn=k),即
SYN+ACK
包,此时服务器进入SYN_RECV
状态 - 第三次握手: 客户端收到服务器的
SYN+ACK
包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED
(TCP链接成功状态),完成三次握手
发送HTTP请求
当服务器与主机建立了链接以后,注意开始和服务器进行通信.网页请求是一个单向请求的过程.即一个主机向服务器请求数据,服务器返回相应的数据的过程.浏览器根据URL内容生成HTTP请求,HTTP请求报文是由三部分组成:请求行,请求报头,请求正文.
服务器处理请求并返回HTTP报文
服务器接到请求后,会根据HTTP请求中的内容来决定如何获取相应的HTML文件,服务器得到的HTML文件发送给浏览器.HTTP响应报文也是由三部分组成:状态码,响应头,响应报文.
- 状态码
- 1xx: 指示信息,标示请求已接收,急需处理.
- 2xx: 成功信息,标示请求已被成功接收,理解,接收
- 3xx: 重定向,要完成请求必须进行更进一步的操作
- 4xx: 客户端错误,请求有语法错误或请求无法实现
- 5xx: 服务器端错误,服务器未能实现合法的错误
- 响应头
- 常见的响应头字段有:Server,Connection..
- 响应报文
- 服务器返回给浏览器的文本信息,同昌HTML,CSS,JS,图片等文件就放在这一部分
浏览器解析渲染页面
在浏览器还没有在完全接受HTML文件时便开始渲染,显示网页
在执行HTML中的代码时,根据需要,浏览器会继续请求图片,CSS,JavaScript等文件.过程同请求HTML
连接结束
四次回收连接
- 客户端进程发出连接释放报文,并且停止发送数据.释放数据报文首部.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连接的时间比客户端要更早一些