计算机网络——在地址栏输入网址(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 的连接。

 

 

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

钡铼技术BL205模块在智能制造产线的灵活配置与优化

钡铼技术的OPC UA耦合器BL205模块在智能制造产线中的灵活配置与优化是当今工业领域中的一个关键议题。随着工业4.0和数字化转型的不断推进,生产线的灵活性和智能化程度成为了企业追求的目标。在这一背景下,BL205模块以其分布式、可插拔、结构紧凑、可编程…

I.MX6ULL Linux 点灯实验理论及汇编点灯

系列文章目录 I.MX6ULL Linux C语言开发 I.MX6ULL Linux 点灯实验理论 系列文章目录一、I.MX6ULL GPIO二、I.MX6ULL IO 命名三、I.MX6ULL IO 复用四、I.MX6ULL IO 配置五、I.MX6ULL GPIO 配置六、I.MX6ULL GPIO 时钟使能七、硬件原理分析八、实验程序编写 一、I.MX6ULL GPIO 一…

嵌入式进阶——外部中断(EXTI)

🎬 秋野酱:《个人主页》 🔥 个人专栏:《Java专栏》《Python专栏》 ⛺️心若有所向往,何惧道阻且长 文章目录 STC8H中断外部中断外部中断编写配置外部中断调用中断触发函数 外部中断测试测试外部中断0测试外部中断2、3或者4 PCB中断设计 STC8…

Unity 生成模版代码

1、创建模版代码文本 using System.Collections; using System.Collections.Generic; using UnityEngine;public class ClassNameScritpItem : MonoBehaviour {public GameObject go;// Start is called before the first frame updatevoid Start(){go new GameObject();}// …

驱动开发学习之新旧字符设备接口,自动创建设备的点灯

1.前言 本章将介绍新旧字符设备接口,以及自动创建设备节点的点灯实验。 2.实验原理介绍 2.1.寄存器知识 学习过单片机的兄弟都知道,点灯有以下步骤: (1)开启相应的GPIO时钟 (2)如果需要配置复用&…

聊聊如何感知项目引入哪些功能特性

前言 使用过springcloud全家桶朋友,应该知道springcloud涉及的组件很多,为了让开发者快速了解项目引入了springcloud哪些组件,springcloud引入了HasFeatures,配合Actuator,可以让开发者感知到项目引入的组件功能类型、…

C++ std::reference_wrapper:让引用更强大

std::reference_wrapper 的通俗易懂解释 一、简介二、std::reference_wrapper 的初衷三、常用示例3.1、与 make_pair 和 make_tuple 一起使用3.2、引用容器3.3、通过 std::thread 按引用传递参数给启动函数3.4、引用作为类成员3.5、按引用传递函数对象3.6、与绑定表达式一起使用…

苹果手机备忘录共享到微信,为何显示不支持的类型

作为一名苹果手机用户,我深知其系统的流畅与便捷。然而,在日常使用中,我发现了一个令人不解的问题:为何苹果手机的原生备忘录无法直接分享到微信?每次当我尝试将备忘录里的内容共享给微信好友时,总会遇到“…

代码随想录算法训练营第四十二天|62.不同路径、63. 不同路径 II

62.不同路径 文档讲解:代码随想录 题目链接:. - 力扣(LeetCode) 记录每个格子的状态 二维矩阵-->二维dp数组 dp数组 题目是要求到达最后一个格子有多少种路径 所以dp[i,j]: 到达第(i,j)个格子有多少种路径 递推公式 到达一…

WPS文件没有保存怎么恢复?5个解决方案轻松恢复!

“我在WPS上编辑了一个文件,但是还没来得及将它保存,我不小心就退出软件了,现在不知道有什么方法可以恢复WPS文件呢?大家可以帮帮我吗” WPS作为一款功能强大且用户友好的软件,给我们的工作带来了很多的便利。但我们在…

记录一次内存取证

1.情景复现 我姐姐的电脑坏了。我们非常幸运地恢复了这个内存转储。你的工作是从系统中获取她所有的重要文件。根据我们的记忆,我们突然看到一个黑色的窗口弹出,上面有一些正在执行的东西。崩溃发生时,她正试图画一些东西。这就是我们从崩溃…

# WIN10/WIN11 找不到【应用商店 Microsoft.WindowsStore】怎么办?

WIN10/WIN11 找不到【应用商店 Microsoft.WindowsStore】怎么办? 解决方法: 1、右键【开始】菜单,点击【Windows PowerShell (管理员)】,输入: Get-AppxPackage -allusers | Select Name, PackageFullName 2、查询…

期望薪资30k字节java2面,A给B转账的同时B给A转账怎么并发量最高

一面 1、自我介绍 2、详细介绍一下自己的做的项目?根据项目提了一些问题 3、hashmap原理 4、B树原理? 5、final禁止重排序原理? 6、设计一个榨汁机类,面向对象怎么设计? 7、get、post区别,使用场景&…

AI大模型探索之路-实战篇9:探究Agent智能数据分析平台的架构与功能

系列篇章💥 AI大模型探索之路-实战篇4:深入DB-GPT数据应用开发框架调研 AI大模型探索之路-实战篇5:探索Open Interpreter开放代码解释器调研 AI大模型探索之路-实战篇6:掌握Function Calling的详细流程 AI大模型探索之路-实战篇7…

kettle学习之子映射组件

映射组件就跟java中的函数方法一样,类似一个子流程。 练习开始 根据数据库表中的id查询出想要的字段,并把字段存到excel表中 一、表输入 二、子映射 映射输入规范,类似java方法中的形参 name vsxcd是方法返回的参数 三、excel输出 运行结果…

前端基于word模板导出word文档

项目环境 vue2 js vue-cli等 依赖包都可以在npm官网找到对应文档 npm官网(英文) 1、依赖 安装依赖 docxtemplater npm i docxtemplaterfile-saver npm i file-saverjszip-utils npm i jszip-utilsjszip npm i jszip在对应页面或模块中引入依赖 import Docxtemplater …

关于(苍穹外卖)Cache问题的一点困惑与思路

因为本人,em---昨天看的,今天早上就有点迷惑了,在这里记录一下,并捋一下思路, 首先要明确的一点就是,我们是在uesr端进行缓存的,并且,菜品缓存是中的key是 String key "dish…

ora-00392 ora-00312错误处理

检查当前日志组状态 对日志组进行clear操作 重新开库无报错

CSS 一些常见的大坝设备仪器标识绘制

文章目录 需求分析1. 坝基测压管2. 坝体测压管3. 竖向位移兼水平位移测点4. 竖向位移测点5. 三角量水堰6. 水平位移观测工作基点7. 竖向位移观测水准基点8. 其他 需求 绘制一些常见的设备仪器标识符 分析 1. 坝基测压管 <!DOCTYPE html> <html lang"en"…

中国1KM分辨率年平均气温数据集

该数据为中国逐年平均温度数据&#xff0c;空间分辨率为0.0083333&#xff08;约1km&#xff09;&#xff0c;时间为1901年-2022年。该数据集是根据全国2472个气象观测点数据进行插值获取&#xff0c;验证结果可信。本数据集包含的地理空间范围是全国主要陆地&#xff08;包含港…