当你在浏览器地址栏输入一个URL后,将会发生的事情?个人笔记

客户端

在浏览器输入 URL 回车之后发生了什么(超详细版) - 知乎 (zhihu.com)

大致流程是:

  1. URL 解析
  2. DNS 查询
  3. TCP 连接
  4. 处理请求
  5. 接受响应
  6. 渲染页面

1.URL解析

地址解析:

首先判断你输入是否是一个合法的URL还是一个待搜索的关键词,并且根据你输入的内容进行自动完成、字符编码等操作

HSTS

由于安全隐患,会使用 HSTS 强制客户端使用 HTTPS 访问页面。

其他操作

浏览器还会进行一些额外的操作,比如安全检查、访问限制(之前国产浏览器限制 996.icu)。

缓存检查:

200(成功)服务器已成功处理了请求。通常,这表示服务器提供了请求的网页。

304(未修改)自从上次请求后,请求的网页未修改过。服务器返回此响应时,不会返回网页内容。

DNS查询

进行将域名现在本地的 hosts 文件里,没有则启动DNS解析器向注册的 DNS 服务器发送查询请求,当然在路由的路上部分路由器也有缓存域名与ip的映射关系,如果在路由中存在就直接在路由器返回ip,如果没有则到子域名服务器查询需要的ip,当然不仅可以访问同域的服务器,也可以访问其他域的服务器。如果在这里也没有找到ip则去根域名服务器查询拥有对应ip地址的域名服务器,根域名服务器会整颗域树进行遍历,直到找到对应的域名服务器,然后根据其域名服务器提供给,其主机的同域的域名服务器,然后由其同域域名服务器返回ip。

当然如果你乱输url地址,当然找不到其ip,返回404给你玩。

在得到映射的ip后,在每一层都会备份缓存一份映射关系,这样不用每一次发包前都DNS查询一次。

HTTPS协议

在对其url解析后,创建HTTP/HTTPS报文,在数据前添加对应的报头。

HTTP/HTTPS的请求报文和协议报文的报头格式是不同的

https是在http上做到安全处理,加入了密钥措施,保护了数据的安全性。

弃用http改用https的缘故,与密钥的使用,证书意义-CSDN博客

TCP链接

在外面访问某个网页前,会先发起TCP三次握手的链接。

链接建立成功后才会开始tcp报文交流,详细链接文章参考博客链接中的3次握手细节UDP与TCP报头介绍,三次握手与四次挥手详谈_云的小站的博客-CSDN博客

TCP协议采用了:超时重传,滑动窗口,流量控制,快重传,延迟应答,捎带应答,拥塞控制等等操作方法,保证了传输的可靠性与效率。

滑动窗口的理念-CSDN博客

拥塞控制概念_云的小站的博客-CSDN博客

网络层ip的发送处理

拿到了传输层给的报文外面需要对齐做封装处理,添加ip的报文数据。

ip报头和ip报文切片组装问题-CSDN博客

尽量不对一个tcp报文去做切片处理,一旦切片不仅仅是增加了分片的时间,并且一旦众分片中的

其中一个丢失就需要整体重新传达,这是得不偿失的。

当然切不切片并不是网络层决定而是传输层和以太网中允许最大决定的。

如果tcp传入到网络层中的数据包加上ip报头超过一定大小就必须切片才能在网络中发送。

数据链路层 

TCP/IP 分为四层,在发送数据时,每层都要对数据进行封装:

数据链路层中存在的报文ip,arp,rarp-CSDN博客

数据在这一层完成最后的包装,然后发送到网络中。

对了这ARP中的目的ip并不是最终目的ip而是下一跳路由结点的ip地址,依靠此ip找对应路由的mac

数据包在路由传输过程

在网络通信的过程中,必须知道对方ip地址才可以进行通信(不同局域网的主机通信必须采用静态路由技术)。

在一个私网局域网中,向外通信是需要采用NAP/NATP技术相辅相成完成的

ip划分与私公网ip、ip的传递-CSDN博客

依托子网掩码在路由表选择发送网口,根据arp得到mac做下一跳路由,依托NAT替换原ip地址,并且记录NAT表中,这个表的映射记录也是动态的,在tcp报文链接时在三次握手阶段,第一次的FIN经过此路由器时候就会构建完毕,在四次挥手的过程中,TIME_WAIT状态发送ACK报文发送给路由器的时,将映射关系设置为失效。诚然如果希望路由器允许这样工作,那么路由器是拥有应用层功能的。(UDP不连接,导致何时销毁映射关系比较困难)

在传输的路上可能会出现回环情况,这个不用怕,在ip层拥有8位生存时间,这是一个计数器,每次跳转一个结点就会自减,到0意味着报文失效被接收的路由器销毁报文。

在这个过程中存在代理服务器,代理服务器可以将其看成高级路由器,替我们转发报文到公网中。

运营商其实就是依托其,为我们提高我们服务。

代理服务器

正向代理

校园网就是最好的正向代理服务器代表,链接校园网的设备,向外界访问资源的时候,所有的请求都会经过该服务器,我们可以将其看成一个巨大的路由器,但是服务器允许缓存资源预设在代理服务器中,打个比方,2个主机同时访问抖音服务器,A主机先B主机后,A、B主机访问的资源相同,服务器在访问数据后会预留一段时间,当B再来访问时候,直接从代理服务器中获取资源,不用再去抖音服务器访问,大大的提高了我们的网络读写效率,并且正向代理服务器会检查访问的合法性,访问的内存合法性。

反向代理

依旧和路由器很像

反向代理正好与正向代理相反,对于客户端而言代理服务器就像是原始服务器,并且客户端不需要进行任何特别的设置。客户端向反向代理服务器中的内容发送普通请求,接着反向代理将判断向何处转交请求,并将获得的内容返回给客户端。反向代理对外的表现都是透明的,客户不知道自己访问的是代理服务器,客户端也不需要任何配置就可以访问。当我们配置好代理服务器后,反向代理(Reverse Proxy)实际运行方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。

正向代理和反向代理区别

正向代理中 ,代理服务器和client同属一个网络,对server透明。正向代理需要配置在客户端;
反向代理中,代理服务器和server同属一个网络,对client透明。 反向代理需要配置在服务端;
实际上代理服务器在两种代理中做的事都是代为请求和响应,不过从结构上看正好左右相反,故称为正反向代理。

服务器响应

服务器必须拥有和其客户端一样的各层协议,才能相互通信。

必须拥有相同的各层协议,否则接收方无法解开接到的数据报文,无法向上交付。

在服务器得到申请后在自己的库中查找是否存在该资源,申请对象权限是否满足,资源的位置是否改变,然后构建HTTP报文向下交付然后响应给对方。

HTTP存在响应码,这是约定的一个响应码,标识着这次响应的状态信息。

【精选】HTTP 响应码大全_http响应码_JFS_Study的博客-CSDN博客

这篇博客详细介绍了响应码的介绍。

后续的返回过程,与发送过程几乎一样。

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

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

相关文章

5.5 TCP报文段的首部格式

思维导图: 5.5 TCP报文段的首部格式 基本概念 TCP报文段:包含首部和数据两部分,首部至少20字节。作用:首部字段定义了TCP的功能和行为。长度:首部长度可变,基础首部20字节,可添加选项。 首部…

《算法通关村——缓存机制了解LRU实现》

《算法通关村——缓存机制了解LRU实现》 介绍 LRU是"Least Recently Used"(最近最少使用)的缓存机制,它是一种常用的缓存算法,用于管理缓存中的数据项。LRU缓存机制的基本思想是,当缓存达到其容量限制时&a…

【Tricks】PC端微信输入时,文本出现右对齐情况怎么恢复

应该是摁到某个快捷键,于是光标就变成如下图所示的样子: 如果再输入字符,则字符就会变成下图所示的样子(对齐输入框右侧): 解决办法:ctrl J 解决办法:ctrl J 解决办法&#xff1…

5.2 用户数据报协议UDP

思维导图: 课程笔记:5.2 用户数据报协议UDP 5.2.1 UDP概述 一、UDP基本概念 无连接协议:UDP是一个简单的面向数据报的传输层协议,不需要在数据传输前建立连接,故减少开销和延迟。复用/分用:UDP允许多个应…

我的ChatGPT的几个使用场景

示例一,工作辅助、写函数代码: 这里展示了一个完整的代码,修正,然后最终输出的过程。GPT具备足够丰富的相关的小型代码生成能力,语法能力也足够好。这类应用场景,在我的GPT使用中,能占到65%以上…

Spring Boot 使用断言抛出自定义异常,优化异常处理机制

文章目录 什么是断言?什么是异常?基于断言实现的异常处理机制创建自定义异常类创建全局异常处理器创建自定义断言类创建响应码类创建工具类测试效果 什么是断言? 实际上,断言(Assertion)是在Java 1.4 版本…

docker解决oracle中ORA-12514和ORA-03113问题

ORA-12514:TNS:监听程序当前无法识别连接描述符中请求的服务; 1、进入docke容器 docker exec -it 容器id bash 2、找到并修改listener.ora文件 查看oracle的位置 命令:cat /etc/profile 这是listener.ora文件的位置 /home/oracle/app/oracl…

JVM虚拟机:你是如何理解Java中的垃圾?

什么是垃圾? 垃圾就是内存中不再被使用到的空间,当一个对象不再被引用后那么久成为垃圾可以回收了,但是线程计算没有引用也可以独立运行,因此线程和对象不同。如果一个对象没有任何一个引用指向它了,那么这个对象就是…

【机器学习】五、贝叶斯分类

我想说:“任何事件都是条件概率。”为什么呢?因为我认为,任何事件的发生都不是完全偶然的,它都会以其他事件的发生为基础。换句话说,条件概率就是在其他事件发生的基础上,某事件发生的概率。 条件概率是朴…

【c++|opencv】二、灰度变换和空间滤波---3.均值滤波

every blog every motto: You can do more than you think. https://blog.csdn.net/weixin_39190382?typeblog 0. 前言 均值滤波 1. 均值滤波 #include <iostream> #include <opencv2/opencv.hpp> #include"Salt.h"using namespace cv; using names…

【Linux】vim 使用

目录 一&#xff0c;vim 与 vi 1&#xff0c;vim 的基本概念 二&#xff0c;vim 的基本操作 三&#xff0c;vim 正常模式命令集 1&#xff0c;插入模式 2&#xff0c;从插入模式或者底行模式切换为命令模式 3&#xff0c;移动光标 4&#xff0c;删除文字 5&#xff0…

grid布局中grid-row和grid-column

目录 一、grid-row 二、grid-column 三、实例 一、grid-row grid-row属性定义了网格元素行的开始和结束位置。结合了grid-row-start和grid-row-end grid-row: 1 / 3;//表示行线从第一行线到第三行线为止 二、grid-column grid-column属性定义了网格元素列的开始和结束位置…

《YOLOv8-Pose关键点检测》专栏介绍 CSDN独家改进创新实战 专栏目录

YOLOv8-Pose关键点检测专栏介绍&#xff1a;http://t.csdnimg.cn/gRW1b ✨✨✨手把手教你从数据标记到生成适合Yolov8-pose的yolo数据集&#xff1b; &#x1f680;&#x1f680;&#x1f680;模型性能提升、pose模式部署能力&#xff1b; &#x1f349;&#x1f349;&#…

LeetCode----84. 柱状图中最大的矩形

题目 给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。 求在该柱状图中,能够勾勒出来的矩形的最大面积。 示例 1: 输入:heights = [2,1,5,6,2,3] 输出:10 解释:最大的矩形为图中红色区域,面积为 10 示例 2: 输入: heights =…

tolua中table.remove怎么删除表中符合条件的数据

tolua中table.remove怎么删除表中符合条件的数据 介绍问题&#xff08;错误方式删除数据&#xff09;正确删除方案从后向前删除递归方式删除插入新表方式 拓展一下总结 介绍 在lua中删除表中符合条件的数据其实很简单&#xff0c;但是有一个顺序问题&#xff0c;因为lua的表中…

【机器学习】四、计算学习理论

1 基础知识 计算学习理论&#xff08;computational learning theory&#xff09;&#xff1a;关于通过“计算”来进行“学习”的理论&#xff0c;即关于机器学习的理论基础&#xff0c;其目的是分析学习任务的困难本质&#xff0c;为学习算法体统理论保证&#xff0c;并根据结…

网络质量探测

目录 一.BFD监测网络状态 二. NQA检测网络状态 一.BFD监测网络状态 BFD(BidrectionaL Forwarding Detection 双向转发检测)用于快速检测系统设备之间的发送和接受两个方向的通信故障&#xff0c;并在出现故障时通知生成应用。BFD 广泛用于链路故障检测&#xff0c;并能实现与…

基于深度学习的口罩佩戴检测

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介二、功能三、基于深度学习的口罩佩戴检测四. 总结 一项目简介 基于深度学习的口罩佩戴检测是一种利用计算机视觉技术和深度学习算法进行口罩佩戴情况检测的…

计算机毕业设计选题推荐-校园失物招领微信小程序/安卓APP-项目实战

✨作者主页&#xff1a;IT毕设梦工厂✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…