计算机网络——在地址栏输入网址(URL)之后都发生了什么

网址,也叫域名,域名就像一个 IP 地址的可读版本,比如,百度的域名 www.baidu.com,他的 ip 是 110.242.68.3,输入 IP 一样可以跳转到百度搜索的页面,我想没有一个人没去记百度的 IP 吧。其实我们真正访问的就是这个IP。

所以输入网址之后,实际就是将网址解析,查询 IP 地址,然后通过 IP 和端口访问到百度的网站。

 

解析网址

当输入到地址栏之后,首先浏览器需要对网址进行解析。

首先看一下 URL 的组成,https://www.baidu.com

9a533f2b7d3e402b835f3cb70497c2d2.png

首先是协议,http 或者 https,

然后 www.baidu.com 就是域名,域名可以理解为 IP 的可读版本。

再然后冒号后面的就是端口。

再后面的是资源路径,表示在服务器上的文件路径。

问号后面的是参数,参数是在发送某些请求时添加在 URL 里的。参数的格式:key=value。

最后井号后面的时锚点。

对 URL 进行解析之后,浏览器就知道了 web服务器,资源地址和资源名,根据这些内容生成 HTTP 的请求信息。

 

DNS获取真实地址

HTTP 请求信息为被操作系统发送到 web 服务器,但在发送之前,需要通过域名获取到真实的 IP 地址。

打个比方,我们保存联系人都是用名字来保存,很少会有人记住几十个电话号码的。但是我们需要打电话时又不能直接通过名字打电话,手机理解不了这个名字,只能理解电话号码,其实就是手机得知你要打电话,比如你要打给张三,手机查到张三的电话是 10086,然后给 10086打电话。

这里的名字和电话就是域名和 IP 的关系。要想通过域名得到对应的 IP,此时就需要 DNS 服务器了。

DNS 服务器-应用层

从大到小有 根服务器、顶级域服务器、权威服务器、本地服务器

DNS 的工作流程

1. 首先客户端发出来一个 DNS 请求,想要直到 www.server.com 的 IP 地址,发送给本地 DNS 服务器。

2. 本地服务器接受到请求之后,会去缓存中查找是否存在,如果有直接返回即可,如果没有,就会去问根服务器。

3. 根服务器接到请求之后,发现后缀域名是 .com,说你去问问 .com 的顶级域服务器,看看他有没有这个 IP

4. 本地服务器拿着请求找到顶级域服务器,询问是否有该域名的 IP 地址,顶级域服务器也不知道,说你去问问 server.com 的权威服务器。

5. 本地服务器有拿着这个域名找到权威服务器,权威服务器查询之后就把对应的 IP 告诉了本地服务器。

6. 本地服务器将 IP 返回给客户端。

f979b884ca5f4c68b9312ca149fe9a12.png

除了上面的迭代式的查询,还有一种递归式的查询,顺序不同,但是这样根服务器的压力会比较大。

同时,浏览器会先看是否存在缓存,如果有缓存就不用发送给本地服务器,直接返回即可。

 

TCP 传输数据--传输层

获取到 IP 地址后,由于 DNS 只指路不带路,所以需要一个协议栈,将 HTTP 传输工作交给协议栈,协议栈使用 TCP 和 UDP 协议来收发数据。

TCP 报文头部格式,首先有源端口号和目标端口号,相当于导航的出发地和目的地,打车的时候司机才知道到哪接你,送你去哪,你就是数据包。

然后是序列号,主要是为了解决包的乱序问题。

还有确认号,目的是确认是否收到,确保不出现丢包的情况。

状态位,例如 SYN、ACK、RST、FIN分别是连接,应答,重新连接,断开连接。

窗口大小,主要用于流量控制,根据接收端的处理能力限制窗口流量。

 

值得一提的是,TCP 传输数据前需要进行三次握手建立连接,计算机网络——TCP 协议的三次握手 / 四次挥手-CSDN博客

TCP 是传输层的协议,会给应用层传下来的 HTTP 报文加上 TCP 的头部,头部包含了上面的各类信息,然后将数据包给网络层处理。

 

IP协议--网络层

IP 协议的主要功能就是寻址和路由,相当于导航,导航最重要的就是起点地址和目的地地址。在 IP 协议中就表现为源 IP 地址和目的地 IP 地址。

还需要记录协议号,表示使用的是 TCP 协议。当目标设备有多个网卡,就会有多个 IP 那么该怎么判断传给哪个网卡,主要是通过 路由表规则来判断,如果都不符合,就会发送给 0.0.0.0。

IP 协议给传输层传下来的 TCP 报文加上 IP 头,之后传递给网络接口层处理。

网络接口层会给 IP 数据报加上MAC头部,用来找到路由器。

最后数据通过网关,交换机,路由器,最终成功发到了服务器。

 

解析请求

服务器接收到了HTTP请求之后,会对请求进行解析,根据请求的内容执行相应的操作,比如数据库查询,读取文件等。

处理完一系列的请求操作后,服务端会发送 HTTP 的响应报文,客户端接收到了响应之后,同样进行解析,获取到 HTML 文件,图片等数据,然后对其进行渲染,生成网页,同时根据网页中其他的 URL 再次请求服务器,直到网页完全渲染。

最后不再传输数据后,关闭 TCP 连接,通过四次挥手的方式。

 

总结

1. 地址栏输入 URL

2. 应用层 DNS 协议解析域名的IP地址

3. 网络层 TCP 协议发起连接,传输对应的 HTTP 请求报文,通过每层模型的不同的协议,生成最终的请求数据包并发送给服务器

4. 服务器接收到了请求数据包后,解析请求,并进行处理,比如读取文件,查询数据库,然后生成响应的 HTTP 报文

5. 浏览器接收到了响应报文之后,同样进行解析,获取其中的 HTML 文件,图片视频的 URL等,然后将这些渲染到页面上,同时根据获取到的图片视频等的 URL 再次请求服务器,直到所有 URL 都解析完成,然后将页面所有内容都渲染完毕。

6. 结束数据传输可以断开 TCP 的连接。

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/17302.shtml

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

相关文章

部署Prometheus + Grafana实现监控数据指标

1.1 Prometheus安装部署 Prometheus监控服务 主机名IP地址系统配置作用Prometheus192.168.110.27/24CentOS 7.94颗CPU 8G内存 100G硬盘Prometheus服务器grafana192.168.110.28/24CentOS 7.94颗CPU 8G内存 100G硬盘grafana服务器 监控机器 主机名IP地址系统配置k8s-master-0…

符合车规级漏电流检测的磁通门传感器KTD1100

电动车充电桩 在政策出台后,充电桩类产品按要求需装配B端漏电流检测装置。它可以有效防止充电桩等设备中的漏电流对用户造成危害,保障用户的用电安全。其次,它可以促进充电桩等产品的质量提升,提高市场的公平竞争,让消…

无线领夹麦克风哪个品牌好?本期文章揭秘无线麦克风哪个品牌好用

​在当下这个全民皆为媒体的时代大潮中,视频分享已然成为了引领风尚的指向标。在自媒体领域竞争愈发激烈的态势下,若要在这片广阔海洋中扬帆远航,优秀的作品毫无疑问是吸引观众的关键所在。而想要塑造出这样的卓越之作,除了需要创…

npm 版本号指定标识符

关于依赖的版本 我们可以先来了解依赖的版本 {"dependencies": {"nestjs/common": "^10.0.0","nestjs/core": "^10.0.0",} } 比如我们常见的依赖版本一般长这样,它一般由三部分组成:major.minor.p…

代谢组数据分析六:基于报告分数的功能分析

代谢组数据分析六:基于报告分数的功能分析 受经典“RSA”方法的启发,我们开发了改进的“基于广义报告者得分的分析(GRSA)”方法,并将其实现在R包“ReporterScore”中,同时配套了全面的可视化方法和通路数据库。“GRSA”是一种无需阈值的方法,适用于所有类型的生物医学特…

unity生命值有时候不会减少,即使明显被击中

碰撞检测不一致: 确保所有敌人对象都有正确设置的标签(Tag),并且这个标签是在 OnCollisionEnter 中检查的 "Enemy"。此外,检查敌人和直升机的碰撞器(Collider)设置是否正确&#xff0…

K8s 小白入门|从电影配乐谈起,聊聊容器编排和 K8s

来听听音乐 电影,是我们生活中的重要调味剂。 配乐,是电影中不可或缺的一部分。 有的时候,配乐可以跟剧情共振,让你按捺不住自己的情绪,或眼含热泪、或慷慨激昂、或人仰马翻、或怅然若失; 有的时候&…

偏微分方程算法之抛物型方程差分格式编程示例一

目录 一、研究问题 二、C++代码 三、结果分析 一、研究问题 从本节开始将对具体的抛物型偏微分问题算例进行C++编程,以加深对抛物型偏微分方程差分格式构造的理解和应用。 采用向前欧拉格式计算抛物型方程初边值问题:

WebGL技术在教育培训中的应用

WebGL技术在教育培训中的应用非常广泛,通过其强大的三维图形处理能力,能够为教育培训提供更加生动、互动和沉浸式的学习体验。以下是WebGL在教育培训中的几个主要应用及其具体实现。北京木奇移动技术有限公司,专业的软件外包开发公司&#xf…

想用Python做OCR?看看这篇文章

OCR是Optical Character Recognition的缩写,中文名为光学字符识别。它是一种通过计算机技术对图像或扫描文档中的文字进行识别和理解的过程。OCR技术可以将图像中的文字转换为可编辑、可搜索的文本,使得计算机能够理解和处理这些文字信息。 OCR技术通常…

解锁数据的力量:Navicat 17 新特性和亮点

解锁数据的力量:Navicat 17 新特性和亮点 大家好,我是猫头虎。今天我要为大家介绍 Navicat 17 的新特性和亮点。Navicat 是一款专业的数据库管理工具,支持多种数据库类型,包括 MySQL、Oracle、SQL Server、PostgreSQL、MariaDB、…

C++流行编译器的基础认识

有哪些主流的C编译器? C有许多流行的编译器,每个编译器都有其独特的特点和用途。以下是一些流行的C编译器: GNU Compiler Collection (GCC): GCC是一个开源的编译器套件,支持多种编程语言,包括C和C。它是一个功能强大…

【量算分析工具-概述】GeoServer改造Springboot番外系列三

【量算分析工具-概述】GeoServer改造Springboot番外系列三-CSDN博客 【量算分析工具-水平距离】GeoServer改造Springboot番外系列四-CSDN博客 【量算分析工具-水平面积】GeoServer改造Springboot番外系列五-CSDN博客 【量算分析工具-方位角】GeoServer改造Springboot番外系列…

php正则中的i,m,s,x,e分别表示什么

正则表达式模式修饰符(也称为标志或模式修饰符)用于改变正则表达式的行为。这些修饰符可以附加在正则表达式的定界符之后,通常为正斜杠(/)或井号(#),以改变搜索或替换的方式。 1、i…

Python函数式编程入门窥探

文章目录 函数式编程把函数当作对象高阶函数map的替代品reduce的替代品filter的替代品 匿名函数可以向函数一样可调用的对象自定义的调用类型函数内省传递给函数的参数:从定位参数到仅限关键字参数获取关于函数参数的信息--inspect模块获取函数签名的signature方法i…

【智能家居入门1】环境信息监测(STM32、ONENET云平台、微信小程序、HTTP协议)

作为入门本篇只实现微信小程序接收下位机上传的数据,之后会持续发布如下项目:①可以实现微信小程序控制下位机动作,真正意义上的智能家居;②将网络通讯协议换成MQTT协议再实现上述功能,此时的服务器也不再是ONENET&…

解决Springboot服务启动报错:“Reason: Failed to determine suitable jdbc url”

1、错误详情 *************************** APPLICATION FAILED TO START *************************** Description: Failed to configure a DataSource: url attribute is not specified and no embedded datasource could be configured. Reason: Failed to determine sui…

C语言之指针详解(4)

文章目录 一、回调函数二、qsort使用举例2.1使用qsort函数排序整型数据2.2使用qsort函数排序结构体数据 三、qsort函数的模拟实现 一、回调函数 首先我们先来了解一下什么是回调函数 回调函数通俗来讲就是一个通过函数指针调用的函数。 如果你把函数的指针(地址&am…

【微服务】本地事务和远程调用的执行先后关系以及带来的风险和解决方案

前言 在做订单模块的时候,本地事务中包含了远程调用,引发一些问题,这里做一次简单的复盘。 1、问题复现 首先下完订单,调用支付服务成功,然后支付服务收到微信的回调,然后通知我支付结果 但是我的支付回…

canvas层级太高?解决方法

这个方法主要是依赖于邀请好有页面展示的canvas二维码二维码以及其他容器的图片 有一个保存图片功能,这个保存图片是需要将二维码以及涉及到的其他容器比如下图: 所以这时候需要canvas来绘制一个保存图片的效果,然后对这个canvas绘制的图片保…