这个问题说大不大,说小不小,我其实对这其中的牵扯的协议并没有很深刻的理解,所以也不敢轻易下笔来写这篇文章。
简单过程
简单来说在浏览器中输入网址之后,实际上是由客户端发起了一个http请求,经过以下过程:
DNS域名解析---->发起TCP的三次握手---->建立TCP连接后发起http请求----->服务器响应http请求----->服务器返回相应文件,浏览器得到html代码------>浏览器解析html代码,并请求html中的资源,例如css,图片,js----->浏览器对页面进行渲染呈现给用户。
具体过程
在以上的过程中依次经过了以下几个过程:
DNS解析
例如在浏览器中输入baidu.com,那么dns解析要将百度的这个域名解析为百度的ip地址(互联网中每台计算机都有唯一的标识它的ip地址,但是由于ip地址并不方便记忆),将一个域名解析为相对应的ip地址的过程称为DNS解析。dns解析是一个递归查询过程,会依次在以下地方查找:
- 浏览器缓存
- 系统缓存
- 路由器缓存
- isp dns缓存
- 如果都没有找到,则向根域名服务器查找域名对应ip,根域名服务器把请求转发到下一级,直到找到ip
tcp连接
tcp连接过程中的tcp三次握手:
第一次握手:客户端发送syn包到服务器,并进入syn_send状态,等待服务器确认
第二次握手:服务器收到syn包,必须确认客户的syn,同时自己也发送一个syn包,即syn+ack包,此时服务器进入syn_recv状态
第三次握手:客户端收到服务器的syn+ack包,向服务器发送ack包,此包发送完毕,客户端和服务器进入estabalished状态,完成三次握手。
握手过程中传送的包里并不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,tcp连接一旦建立,在通信双方中的任何一方主动关闭连接之前,tcp连接都将一直被保持下去。
发送http请求
发送http请求的过程就是构建http请求报文并通过tcp协议中发送到服务器指定端口。报文由3部分组成:请求行,请求报头和请求正文
服务器处理请求并返回http报文
http相应报文由三部分组成:状态码、响应报头,响应报文
通常响应报文中包含了服务器返回给浏览器的文本信息,通常html,css,js,图片等文件放在这一部分
浏览器解析渲染页面
浏览器解析html代码,并对页面进行渲染
总结
由于对计算机网络之间的协议关系并不是有太深刻的理解,在这里只是写了一些皮毛的东西,其实在浏览器中输入一个url这个过程牵扯的协议每一个都可以拿出来深挖好长,由于笔者对于这部分没有深刻的理解,所以文中都是浅尝辄止,也给自己做了一个粗糙的总结,有兴趣的可以自己去查下。
网友评论