08.计算机网络---在浏览器中输入一个网址背后发生了什么


我们经常通过浏览器访问各大网站,比如www.baidu.com,但是当我们在浏览器中输入www.baidu.com之后,敲下回车 后,浏览器背后到底发生了什么呢?我们又是如何看到百度首页的呢?
本文以www.baidu.com这个网站为例作说明
浏览器背后大致可以分为以下几个步骤:

  1. 浏览器分析超链接中的url
  2. 浏览器向dns服务器请求解析网址www.baidu.com对应的IP地址
  3. dns将解析出的IP地址返回浏览器
  4. 浏览器与服务器通过三次握手建立tcp连接
  5. 浏览器向服务器发送HTTP请求报文
  6. 服务器处理请求并返回HTTP响应报文,将百度的HTML文件返回给浏览器
  7. 浏览器执行百度的HTML文件,解析渲染页面,将百度的首页展现出来
  8. 通过四次挥手,浏览器和服务器断开TCP连接

第一步:浏览器解析url

浏览器会对我们输入的url进行解析,主要将其分为下部分:协议、网络地址、资源路径。
其中协议是从该计算机获取资源的方式,常见的是HTTP,HTTPS,FTP等。网络地址指示该连接网络上哪一台计算机,可以是域名或者IP地址,可以包括端口号;
例如URL:https://tieba.baidu.com/f?kw=分析&fr=fenter&prequery=浏览器分析超链接中的url

  • 协议:https
  • 网络地址:tieba.baidu.com
  • 资源路径:f?kw=分析&fr=fenter&prequery=浏览器分析超链接中的url

第二步:DNS域名解析

DNS(Domain Name Service)即域名服务。域名是由"主机名+域名"。一个域名可以对应多个主机,并且域名是全球唯一的。

为什么要进行域名解析呢?
域名虽然更易被用户所接受和使用,但计算机只能识别纯数字构成的IP地址,不能直接读取域名。因此要想达到访问效果,就需要将域名翻译成IP地址。而DNS域名解析承担的就是这种翻译效果。

域名分为根域、顶级域、一级域、二级域等组成,其构造为一个树状图。
在这里插入图片描述
DNS域名解析过程

  1. 客户端首先查看浏览器缓存,看有没有该域名对应的IP地址
  2. 如果没有的话,查看本地host文件,看有没有该域名对应的IP地址
  3. 如果没有的话,客户端向本地域名服务器进行递归查询,查询该域名对应的IP地址
  4. 如果还是没有的话,本地域名服务器向根域名服务器进行迭代查询,根域名服务器通常是把自己知道的顶级域名服务器的IP地址告诉本地域名服务器
  5. 本地域名服务器再向顶级域名服务器查询,顶级域名服务器要么给出所要查询的IP地址,要么告诉本地服务器下一步应该向哪一个权限域名服务器进行查询
  6. 本地域名服务器向权限域名服务器进行查询,然后得到了所要解析的IP地址
  7. 本地域名服务器将该域名和对应的IP地址写入自身缓存,然后将解析的IP地址返回给客户端
    大致流程可以表示为下图:
    在这里插入图片描述
    递归查询和迭代查询的区别
  • DNS客户端和本地名称服务器是递归,而本地名称服务器和其他名称服务器之间是迭代。
  • DNS递归名称解析: 在DNS递归名称解析中,当所配置的本地名称服务器解析不了时,后面的查询工作是由本地名称服务器替代DNS客户端进行的(以“本地名称服务器”为中心),只需要本地名称服务器向DNS客户端返回最终的查询结果即可。
  • DNS迭代名称解析:(或者叫“迭代查询”)的所有查询工作全部是DNS客户端自己进行(以“DNS客户端”自己为中心)。在条件之一满足时就会采用迭代名称解析方式:
    • 在查询本地名称服务器时,如果客户端的请求报文中没有申请使用递归查询,即在DNS请求报头部的RD字段没有置1。相当于说“你都没有主动要求我为你进行递归查询,我当然不会为你工作了”。
    • 客户端在DNS请求报文中申请使用的是递归查询(也就是RD字段置1了),但在所配置的本地名称服务器上是禁用递归查询(DNS服务器一般默认支持递归查询的),即在应答DNS报文头部的RA字段置0。

第三步:DNS将解析了的域名返回给浏览器

第四步:浏览器与服务器建立三次握手

详细步骤可查看TCP三次握手的具体内容 TCP三次握手四次挥手

第五步:浏览器向服务器发送HTTP请求报文

浏览器与服务器建立连接之后,便可以传送数据了。浏览器先向服务器发送一个请求报文,报文的格式如下:

  1. 请求行:方法、URL、版本
    • 常见的方法有:GET、POST、PUT、DELETE等
    • 常见的版本有:HTTP1.0、HTTP1.1、HTTP2.0等
  1. 首部行:用来说明浏览器、服务器或报文主体的一些信息的首部字段
    常见的首部字段有:
    • Connection:连接,可分为长连接和连接断开
    • Host:服务器IP或者域名
    • User-Agent:浏览器的相关信息(包括浏览器内核、版本等)
    • Accept-Language:浏览器能够识别的语言
    • cookie:是一个可选字段–》携带的信息
  1. 实体主体:Entity body
    在这里插入图片描述

第六步:服务器给浏览器发送HTTP响应报文以及百度首页的HTML文件

服务器给浏览器发送的响应报文格式如下:

  1. 状态行:其中最重要的是状态码,状态码可以告知浏览器的请求是否成功,以及一些常见的报错信息。HTTP状态码一共有5种类型,1开头的表示请求正在处理,2开头的表示请求正常处理完毕,3开头的表示重定向,需要进行后续操作才能完成请求,4开头的表示客户端请求报文错误,5开头的表示服务器端错误
    常见的状态码有:
    1. 200表示请求成功
    2. 301表示永久重定向
    3. 302表示临时重定向
    4. 403表示服务器禁止访问
    5. 404表示资源未找到
    6. 502 bad gateway 表示网关错误,一般是指代理服务器后端的真实服务器节点配置出错或者宕机了
    7. 504 gateway time-out 表示网关超时,一般是指真实服务器处于过载状态,目前处理的请求报文过多
  2. 首部行:用来说明浏览器、服务器或报文主体的一些信息的首部字段
    常见的首部字段有:
    • Date:响应时间
    • Server:服务器名称
    • Content-type:内容的类型
  1. 实体主体
    在这里插入图片描述

第七步:浏览器渲染HTML页面

你可能会发现,同一个网站,使用的浏览器不同,打开之后的呈现效果也可能会有细微的差别。这并不是网页源代码的问题,服务器给所有浏览器返回的都是同一个HTML页面,但是不同浏览器背后的渲染机制不同,所以最终呈现的效果也会有所不同

第八步:浏览器和服务器四次挥手,断开连接

此处的详细步骤可参考TCP四次挥手的内容:TCP三次握手四次挥手

本文某些图片内容来自网上查找,如有侵权,请联系我删除!

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值