当前位置: 首页 > news >正文

浏览器发出一个请求到收到响应步骤详解

前言

        在网络通信中,浏览器向Web服务器发送HTTP请求消息的过程是一个复杂而精密的环节,涉及到URL解析、DNS解析、数据拆分、路由表规则和MAC头部添加等一系列步骤。本文将深入探讨这一过程的每个环节,帮助读者更全面地了解浏览器与Web服务器之间的通信运作原理。

步骤详解

  • URL 进行解析,从而生成发送给 Web 服务器的请求信息。URL 实际上是请求服务器里的文件资源。对 URL 进行解析之后,浏览器确定了 Web 服务器和文件名,接下来就是根据这些信息来生成 HTTP 请求消息了。

要是上图中的蓝色部分 URL 元素都省略了,那应该是请求哪个文件呢?

        当没有路径名时,就代表访问根目录下事先设置的默认文件,也就是 /index.html 或者 /default.html 这些文件,这样就不会发生混乱了。

  • 通过浏览器解析 URL 并生成 HTTP 消息后,需要委托操作系统将消息发送给 Web 服务器。但在发送之前,需要查询服务器域名对应的 IP 地址,因为委托操作系统发送消息时,必须提供通信对象的 IP 地址。有一种服务器就专门保存了 Web 服务器域名与 IP 的对应关系,它就是 DNS 服务器。

域名解析的工作流程:

        浏览器会先看自身有没有对这个域名的缓存,如果有,就直接返回,如果没有,就去问操作系统,操作系统也会去看自己的缓存,如果有,就直接返回,如果没有,再去 hosts 文件看,也没有,才会去问「本地 DNS 服务器」。

        客户端向本地 DNS 服务器请求域名 www.server.com 的 IP 地址,如果缓存里的表格能找到 www.server.com,则它直接返回 IP 地址。

        如果没有,本地 DNS 依次向根域名服务器 (每个DNS服务器都有的最底层DNS服务器) 、顶级域名服务器和权威 DNS 服务器 (就是用户定义的ip的那个DNS服务器) 查询,最终获取到目标域名的 IP 地址,缓存到本地DNS服务器中

  • 应用程序(浏览器)通过调用 Socket 库,来委托协议栈工作,如果 HTTP 请求消息比较长,超过了 MSS 的长度,这时 TCP 就需要把 HTTP 的数据拆解成一块块的数据发送,而不是一次性发送所有数据。每个被拆分的数据加上 TCP 头信息 (应用层端口) ,然后交给 IP 模块来发送数据。

        协议栈的上半部分有两块,分别是负责收发数据的 TCP 和 UDP 协议,这两个传输协议会接受应用层的委托执行收发数据的操作。

        协议栈的下面一半是用 IP 协议控制网络包收发操作,在互联网上传数据时,数据会被切分成一块块的网络包,而将网络包发送给对方的操作就是由 IP 负责的。

  • 委托 IP 模块将数据封装成网络包发送给通信对象。首先根据本地路由表规则,通过子网掩码来锁定与目标地址在同一子网的那个网卡的IP作为源地址 IP, 再提取目标地址数据为目标IP等形成 IP 包头,使请求获得远程定位能力。

  • 接下来网络包还需要在 IP 头部的前面加上 MAC 头部。通过IP只能找到一个局域网,加上 MAC 头部才能告诉以太网对方的 MAC 的地址,以太网就会帮我们把包发送给局域网中的目标服务器。发送方的 MAC 地址直接在网关获取,接收方的 MAC 地址获取需要借助ARP 协议,其会在以太网中以广播的形式获取到 MAC 地址。在后续操作系统会把本次查询结果放到一块叫做 ARP 缓存的内存空间留着以后用

  • 通过网卡驱动程序,将数字信息转换为电信号,基于已有的TCP/IP/MAC头部信息,能在交换机和路由器的转发下,将数据转发抵达到目的地

  • 上述就是请求的过程,其实对于后续的响应也是围绕上述的方案来进行消息的逆传输操作,只不过就多了一步浏览器接收到 HTTP 响应后,解析 HTML、CSS、JavaScript 等资源,并渲染成页面展示给用户的过程

读者问答

读者问:“笔记本的是自带交换机的吗?交换机现在我还不知道是什么”

笔记本不是交换机,交换机通常是2个网口以上。

        现在家里的路由器其实有了交换机的功能了。交换机可以简单理解成一个设备,三台电脑网线接到这个设备,这三台电脑就可以互相通信了,交换机嘛,交换数据这么理解就可以。

读者问:“如果知道你电脑的mac地址,我可以直接给你发消息吗?”

Mac地址只能是两个设备之间传递时使用的,如果你要从大老远给我发消息,是离不开 IP 的。

读者问:“请问公网服务器的 Mac 地址是在什么时机通过什么方式获取到的?我看 arp 获取Mac地址只能获取到内网机器的 Mac 地址吧?”

        在发送数据包时,如果目标主机不是本地局域网,填入的MAC地址是路由器,也就是把数据包转发给路由器,路由器一直转发下一个路由器,直到转发到目标主机的路由器,发现 IP 地址是自己局域网内的主机,就会 arp 请求获取目标主机的 MAC 地址,从而转发到这个服务器主机。

        转发的过程中,源IP地址和目标IP地址是不会变的(前提:没有使用 NAT 网络的),源 MAC 地址和目标 MAC 地址是会变化的。

总结

        通过本文的阐述,我们详细介绍了浏览器发送HTTP请求的全过程,从URL解析到网络包的发送,最终到达Web服务器。网络通信的背后是诸多协议和规则的支撑,每一个步骤都是精心设计和优化的。了解这一过程不仅有助于我们更好地理解网络通信的运作方式,也为我们解决网络故障和优化网络性能提供了重要参考。希望本文对读者有所帮助,让大家对网络通信有更深入的了解。

http://www.lryc.cn/news/312020.html

相关文章:

  • 121. 买卖股票的最佳时机【leetcode】/动态规划
  • K8S Service相关概念
  • 小米消金剖析“冒充老板”诈骗案例,呼吁群众提高反诈意识
  • 全量知识系统问题及SmartChat给出的答复 之14 解析器+DDD+文法型 之2
  • 蓝桥杯备赛 day2 | 4. 付账问题 5. 数字三角形
  • 2024关于idea激活码报This license xxxx has been suspended
  • Android9-W517-使用NotificationListenerService监听通知
  • git的“You can‘t push commits with committe“解决方法
  • CAN总线的拓扑类型和CAN收发器(原理讲解)
  • 如何实现WordPress后台显示文章、分类目录、标签等的ID?
  • 【GB28181】SIP协议实践之Windows下VS2019编译eXosip、osip,测试(附工程源码,一键打开编译)
  • GPT提示语格式——个人自用
  • MCU最小系统电路设计(以STM32F103C8T6为例)
  • [JavaWeb学习日记]JSP+Cookie+Filter与登录+CRUD案例
  • Ruby网络爬虫教程:从入门到精通下载图片
  • 各中间件性能、优缺点对比
  • 修改表中某个字段等于另一个字段减去 2 小时的 SQL
  • Jetpack Compose: Hello Android
  • 蓝桥每日一题 (差分)3月3号
  • Mybatis和Spring Data Jpa的优缺点比较(八股文)
  • LeetCode买卖股票的最佳时机
  • Codeforces Round 932 (Div. 2)----->A. Entertainment in MAC
  • 【JavaScript】 短路运算的妙用 ||
  • 密码学之椭圆曲线
  • overleaf latex 笔记
  • 第十五届蓝桥杯青少组STEMA测评SPIKE初级真题试卷 2024年1月
  • 10个常见的Java面试问题及其答案
  • Vue跳转页面传递参数
  • 【已解决】conda环境下ROS2 colcon build编译选择特定python解释器
  • QT C++实践| 连接数据库的登录界面实现| 附源码