admin 管理员组

文章数量: 887007

输入域名到显示网页的网络过程

        最近复习完了计算机网络,突然想到了这个话题,百度了一下也有许多人讲解过,好像始源于是一个面试问题。然后我也结合了一下其他人的博客和自己对计算机网络的理解,梳理了一下思路。整个流程会从应用层,传输层,网络层和数据链路层进行分析, 但不讲得太细,都只是稍微提一下各个部分的重点。

应用层:

   首先浏览器是在应用层上的WEB服务。WEB服务的实现主要包含了HTTP超文本传输协议URL统一资源定位符,HTML超文本标记语言,以及浏览器和服务器。在WEB服务中浏览器相当于C/S模式中的client客户端,服务器相当于server服务端,是一对多的关系。 在你敲击域名之后,浏览器首先会查看自己有没有关于这个域名的缓存。如果没有,则查看本地计算机的缓存,如果还没有,则会调用DNS服务进行域名解析。 

1. 浏览器缓存 

2. 本地缓存 

3. 调用DNS服务

   调用DNS服务后,会发送一个DNS解析请求的报文,该报文是基于传输层的UDP协议。在进行IP分组封装后分组会被直接传到默认路由器(默认网关),如果路由器缓存有该域名IP,则直接转发回浏览器。如果没有,则需要发送到DNS服务器上进行解析。如果你的DNS服务器在外网,而你在ip地址是局域网如172.31.1.1,这时就会调用NAT服务。 NAT服务会从IP池中临时分配给你一个外网的唯一IP地址,用你访问外部网络。(DNS服务器地址可以从本地连接中查看)。DNS服务器接收到解析请求后会进行查找,查找到则返回结果,否则会进行一个迭代或者递归查找,最后将域名对应的IP地址进行返回。 

1. 路由器缓存 

2. NAT服务提供外网IP 

3. DNS服务器查找返回结果:递归或者迭代查找 

       上述完成的是一个域名解析的过程,即只是完成了让浏览器获得你所输入的域名的IP地址。然后上述的过程没有对传输层进行讲述,我将在下面的过程对传输层和网络层进行一定的阐述。 

传输层:

        得到IP地址后,浏览器会向IP对应的服务器发送一个GET的HTTP请求报文。在传输层上,HTTP协议是基于TCP协议传输的。所以TCP对HTTP请求报文进行封装成TCP报文,然会对服务器请求连接,在完成3次握手后,TCP连接建立成功。即浏览器和服务器之间可以开始传输数据了。由于是GET请求,所以服务器会返回一个HTML主页给浏览器。服务器端首先将包含了HTML文本的HTTP应答填入TCP滑动窗口缓存,然后根据TCP的流量控制和拥塞控制对缓存中的内容进行传输到客户端。浏览器成功接受到html文本后根据html标准进行解析,最终展示成一个主页的形式给用户查看。如果用户此时关闭了页面,TCP则会进行四次挥手断开浏览器与服务器端的连接。 

1. HTTP请求报文 

2. TCP3次握手连接 

3. 根据TCP流量控制和拥塞控制传输主页文本 

4. 浏览器解析主页文本 

5. TCP4次握手断开连接 

        上述已经把整个过程都讲完了,然后下面我在稍微提一下网络层。网络拓扑路径:客户端-路由器-路由器-路由器-服务端。传输层针对的是端到端之间的传输服务,而网络层针对的是点到点的传输。 

网络层:

        TCP报文往下到网络层时, IP协议会对该报文进行处理。如果报文内容过大,则会对其进行分段,裁减成多分IP报文进行传输。在点与点之间传输时,主要处理的是 路由转发算法。因为端与端之间存在着多个路由,所以要研究如何传输才能使得总体较优。路由转发算法包括:标准路由转发,向量路由转发,最短距离路由转发等。 
1. 分组分段 

2. 路由转发 

在数据链路层所讨论的则是Bit级别的数据问题。不做深究。 

以上就是大致的一个过程,涵盖了应用层,传输层和网络层。里面有很多细节都是值得讨论的。像是3次握手,拥塞控制,路由转发算法等。


一个其他人的超详细分析

点击打开链接

本文标签: 输入域名到显示网页的网络过程