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

前言

        在网络通信中,浏览器向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.mzph.cn/news/724288.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

双体系Java学习之关键字,标识符以及命名规范

重新开始从Java基础开始学,保持每周两更的状态,刚开学事情有点多。 关键字 标识符 命名规范

docker 安装 portainer

小编给友友们总结了一下 Portainer 的好处以下 Portainer是Docker的图形化管理工具,提供状态显示面板、应用模板快速部署、容器镜像网络数据卷的基本操作(包括上传下载镜像,创建容器等操作)、事件日志显示、容器控制台操作、Swar…

STM32CubeIDE基础学习-安装芯片固件支持包

STM32CubeIDE基础学习-添加芯片固件支持包 前言 前面的文章在安装STM32CubeIDE软件时没有安装这个芯片PACK包,如果工程没有这个固件支持包的话是无法正常使用的,随便安装一个和芯片对应系列的支持包就可以了。 这篇文章来记录一下新增PACK包的常用操作…

13【CPP】Hash(闭散列||开散列)

闭散列 闭散列:也叫开放定址法,当发生哈希冲突时,如果哈希表未被装满,说明在哈希表中必然还有 空位置,那么可以把key存放到冲突位置中的“下一个” 空位置中去。 线性探测 需要定义三个状态,空、删除、存…

备战蓝桥杯————二分搜索(一)

引言 一、二分查找 基本概念 代码框架 二、二分查找 题目描述 解题思路及代码 结果展示 三、寻找左侧边界的二分搜索 使用背景 基本代码 引言 在计算机科学的世界里,二分查找算法无疑是一种经典且强大的工具。它以其高效的性能,在有序数据集中…

Windows10安装Docker

使用 PowerShell 启用 Hyper-V 以管理员身份打开 PowerShell 控制台。 运行以下命令: PowerShell复制 Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All如果无法找到此命令,请确保你以管理员身份运行 PowerShell。 安装…

Android大厂高级面试题灵魂100问,带你彻底弄明白

“2020年技术没有成长,我今年一定要好好努力学习!” “在现在这个公司都工作了3年了,一毛钱工资都没有涨…” “年前真倒霉,老板嫌我工资高,被优化了,年后又遇到了疫情,现在都还没有找到合适的工…

从Win转Mac,我的感受如何

文章目录 前言MacBook优点美观动画流畅安装软件方便轻便、续航强大多数命令和Linux通用系统稳定、安全做工精美、视听体验好CPU性能较好触控板体验好 MacBook缺点缺乏部分软件部分操作逻辑不是很科学?玩不了多少游戏 总结与展望 前言 整个大学期间,我的主…

【论文翻译】结构化状态空间模型

文章目录 3.2 对角结构化状态空间模型3.2.1 S4D:对角SSM算法3.2.2 完整应用实例 3.3 对角化加低秩(DPLR)参数化3.3.1 DPLR 状态空间核算法3.3.2 S4-DPLR 算法和计算复杂度3.3.3赫尔维兹(稳定)DPLR形式 这篇文章是Mamba作者博士论文…

LLM量化、高保真图生视频、多模态肢体运动生成、高分辨率图像合成、低光图像/视频增强、相机相对姿态估计

本文首发于公众号:机器感知 LLM量化、高保真图生视频、多模态肢体运动生成、高分辨率图像合成、低光图像/视频增强、相机相对姿态估计 EasyQuant: An Efficient Data-free Quantization Algorithm for LLMs Large language models (LLMs) have proven to be very s…

android实战视频教程,flutter开发实战详解pdf

前言 这是一篇软文、但是绝对不是鸡汤;为啥不是呢?因为我文笔太差…偶尔矫情发发牢骚(勿喷) 说说程序猿行业 现在社会上给IT行业贴上了几个标签:高薪、高危、高大上、秃顶(哈哈)。这些标签我…

C++的类与对象(三)

目录 类的6个默认成员函数 构造函数 语法 特性 析构函数 特性 类的6个默认成员函数 问题:一个什么成员都没的类叫做空类,空类中真的什么都没有吗? 基本概念:任何类在什么都不写时,编译器会自动生成以下六个默认…

Linux 性能优化的全景指南,都在这一篇里了,建议收藏!

Linux 性能优化 性能指标 高并发和响应快对应着性能优化的两个核心指标:吞吐和延时 应用负载角度:直接影响了产品终端的用户体验 系统资源角度:资源使用率、饱和度等 性能问题的本质就是系统资源已经到达瓶颈,但请求的处理还…

MySQL下实现纯SQL语句的递归查询

需求 有一个部门表,部门表中有一个字段用于定义它的父部门; 在实际业务中有一个『部门中心』的业务; 比如采购单,我们需要显示本部门及子部门的采购单显示出来。 结构 数据如下: 实现方式如下: WITH RECUR…

内衣洗衣机名牌排行榜前十名:十款强大性能内衣洗衣机精心力荐

小型内衣洗衣机一般是为婴儿宝宝,或者一些有特殊需要的用户而设计使用的,宝宝衣物换洗频繁,而且对卫生方面的除菌要求高,而为避免交叉感染,所以一般不适合和大人的衣物放在一起洗,因此对于有宝宝的家庭来说…

Android多线程实现方式及并发与同步,Android面试题汇总

一. 开发背景 想要成为一名优秀的Android开发,你需要一份完备的知识体系,在这里,让我们一起成长为自己所想的那样。 我们的项目需要开发一款智能硬件。它由 Web 后台发送指令到一款桌面端应用程序,再由桌面程序来控制不同的硬件设…

Plasmo框架开发浏览器插件配置newtab页面,并可以跳转

有关plasmo框架添加页面可以看官方文档:Browser Extension Pages – Plasmo 想要给插件添加一个页面,可以通过添加newtab.tsx添加: 或者通过添加tabs文件夹添加多个页面: 想要访问的话,只需要通过:chrome-…

Python爬虫实战第三例【三】【上】

零.实现目标 爬取视频网站视频 视频网站你们随意,在这里我选择飞某速(狗头保命)。 例如,作者上半年看过的“铃芽之旅”,突然想看了,但是在正版网站看要VIP,在盗版网站看又太卡了,…

2024年腾讯云轻量16核32G28M服务器优惠价格3468元15个月

2024年腾讯云轻量16核32G28M服务器优惠价格3468元15个月,380GB SSD云硬盘,6000GB月流量。 一张表看懂腾讯云服务器租用优惠价格表,一目了然,腾讯云服务器分为轻量应用服务器和云服务器CVM,CPU内存配置从2核2G、2核4G、…

Linux下du命令和df命令的使用

du命令作用是估计文件系统的磁盘已使用量,常用于查看文件或目录所占磁盘容量。df命令是统计磁盘使用情况,可以用来查看磁盘已被使用多少空间和还剩余多少空间。du命令语法du [选项] [文件或目录名称]参数:-a:--all, 列…