面试必问系列之在浏览器中输入URL后到网页显示 其间发生了什么?


文章目录

    • @[TOC](文章目录)
    • 1:解析URL网址,从而生成发送给Web服务器的Http请求信息
    • 2:真实地址查询-----(DNS域名解析)
    • 3:调用协议栈
    • 4:可靠的传输 TCP
    • 5:远程定位--IP地址
    • 6:两点传输--获取MAC地址
    • 7:网卡--出口
    • 8:送别者--交换机
    • 9:出境大门--路由器
    • 10:相互扒皮--服务端与客户端

1:解析URL网址,从而生成发送给Web服务器的Http请求信息

URL 进行解析之后,浏览器确定了 Web 服务器和文件名,接下来就是根据这些信息来生成 HTTP 请求消息了。这里的文件指的就是我们要访问服务器中某个目标文件。
在这里插入图片描述

2:真实地址查询-----(DNS域名解析)

通过浏览器解析 URL 并生成 HTTP 消息后,需要委托操作系统将消息发送给 Web 服务器。但在发送之前,还有一项工作需要完成,那就是查询服务器域名对于的 IP 地址,因为委托操作系统发送消息时,必须提供通信对象的 IP 地址。
比如我们打电话的时候,必须要知道对方的电话号码,但由于电话号码难以记忆,所以通常我们会将对方电话号 + 姓名保存在通讯录里。
所以,== 有一种服务器就专门保存了 Web 服务器域名与 IP 的对应关系,它就是 DNS 服务器==。

域名解析的过程:
其实就是先访问== 本地的DNS服务器==,看是否解析过该域名,解析过那就直接取过来;如果没有的话那就去请求== 根域名服务器==,根域名服务器给一个方向后去== 顶级域名服务器中查找IP;然后顶级域名服务器然你去权威域名服务器==找对应的IP,找到为止。
在这里插入图片描述

3:调用协议栈

  • 通过 DNS 获取到 IP 后,就可以把 HTTP 的传输工作交给操作系统中的协议栈;
  • 应用程序(浏览器)通过调用 Socket 库,来委托协议栈工作。
  • 协议栈的上半部分有两块,分别是负责收发数据的 TCP 和 UDP 协议,它们两会接受应用层的委托执行收发数据的操作。-- 协议栈的下面一半是用 IP 协议控制网络包收发操作,在互联网上传数据时,数据刽被切分成一块块的网络包,而将网络包发送给对方的操作就是由 IP 负责的。
  • 在这里插入图片描述

4:可靠的传输 TCP

  • 在 HTTP 传输数据之前,首先需要 TCP 建立连接,TCP 连接的建立,通常称为三次握手,三次握手目的是保证双方都有发送和接收的能力。这里需要注意的是我们三次握手的过程的中发送的TCP报文,也是需要经过经过网络层和链路层的封装的,要不这条TCP报文如何传输啊,都不知道路
  • 如果Http请求消息过长,这时 TCP 就需要把 HTTP 的数据拆解一块块的数据发送,而不是一次性发送所有数据。
  • TCP报文的生成: TCP 协议里面会有两个端口,一个是浏览器监听的端口(通常是随机生成的),一个是 Web 服务器监听的端口(HTTP 默认端口号是 80, HTTPS 默认端口号是 443)。
  • 在双方建立了连接后,TCP 报文中的数据部分就是存放 HTTP 头部 + 数据,组装好 TCP 报文之后,就需交给下面的网络层处理。
    在这里插入图片描述

5:远程定位–IP地址

  • TCP 模块在执行连接、收发、断开等各阶段操作时,都需要委托 IP 模块将数据封装成网络包发送给通信对象。
  • 在 IP 协议里面需要有源地址 IP 和 目标地址 IP:
    • 源地址IP,即是客户端输出的 IP 地址;
    • 目标地址,即通过 DNS 域名解析得到的 Web 服务器 IP。
  • HTTP 是经过 TCP 传输的,所以在 IP 包头的协议号,要填写为 06(十六进制),表示协议为 TCP。
  • IP报文的生成:(IP的协议里是TCP协议,TCP协议中的数据部分包含HTTP请求消息)。
    在这里插入图片描述

6:两点传输–获取MAC地址

  • 每台设备都有一个MAC地址,我们在交换机中传输信息的过程中,需要知道交换机MAC地址。
  • 如何获取发送方的MAC,和接收方的MAC呢?
    • 发送方MAC 地址是在网卡生产时写入到 ROM 里的,只要将这个值读取出来写入到 MAC 头部就可以了。
    • 接收方的MAC地址 是先查询ARP缓存,如果有记录该IP地址对应的MAC地址那就直接获取,如果没有的话,那就喊呗(广播)
      在这里插入图片描述

7:网卡–出口

  • IP 生成的网络包只是存放在内存中的一串二进制数字信息,没有办法直接发送给对方。因此,我们需要将数字信息转换为电信号,才能在网线上传输,也就是说,这才是真正的数据发送过程。
  • 负责执行这一操作的是网卡,要控制网卡还需要靠网卡驱动程序。这样将数字信号转换成电信号才能传输出去。

8:送别者–交换机

  • 交换机的设计是将网络包原样转发到目的地。交换机工作在 MAC 层,也称为二层网络设备。
  • 交换机根据自身的MAC表,将这个数据包转发到路由器。

9:出境大门–路由器

  • 经过路由器的话,那么我们就可以进入其他网络了
  • 路由器和交换机的区别
    网络包经过交换机之后,现在到达了路由器,并在此被转发到下一个路由器或目标设备。
    这一步转发的工作原理和交换机类似,也是通过查表判断包转发的目标。
    不过在具体的操作过程上,路由器和交换机是有区别的。
    因为路由器是基于 IP 设计的,俗称三层网络设备,== 路由器的各个端口都具有 MAC 地址和 IP 地址==;
    而交换机是基于以太网设计的,俗称二层网络设备,交换机的端口不具有 MAC 地址
  • 路由器的基本原理:
    路由器的端口具有 MAC 地址,因此它就能够成为以太网的发送方和接收方;同时还具有 IP 地址,从这个意义上来说,它和计算机的网卡是一样的。
    当转发包时,首先路由器端口会接收发给自己的以太网包,然后路由表查询转发目标,再由相应的端口作为发送方将以太网包发送出去。
  • 路由器的包接收操作:
    检查 MAC 头部中的接收方 MAC 地址,看看是不是发给自己的包,如果是就放到接收缓冲区中,否则就丢弃这个包。
    总的来说,路由器的端口都具有 MAC 地址,只接收与自身地址匹配的包,遇到不匹配的包则直接丢弃。
  • 查询路由表确定输出端口
    完成包接收操作之后,路由器就会去掉包开头的 MAC 头部。
    MAC 头部的作用就是将包送达路由器,其中的接收方 MAC 地址就是路由器端口的 MAC 地址。因此,当包到达路由器 之后,MAC 头部的任务就完成了,于是 MAC 头部就会被丢弃。
    接下来,路由器会根据 MAC 头部后方的 IP 头部中的内容进行包的转发操作。
  • 路由器的发送操作
    • 首先,我们需要根据路由表的网关列判断对方的地址。
      • 如果网关是一个 IP 地址,则这个IP 地址就是我们要转发到的目标地址,还未抵达终点,还需继续需要路由器转发。-
      • 如果网关为空,则 IP 头部中的接收方 IP 地址就是要转发到的目标地址,也是就终于找到 IP 包头里的目标地址了,说
        明已抵达终点。
    • 知道对方的 IP 地址之后,接下来需要通过 ARP 协议根据 IP 地址查询 MAC 地址,并将查询的结果作为接收方 MAC 地
      址。路由器也有 ARP 缓存,因此首先会在 ARP 缓存中查询,如果找不到则发送 ARP 查询请求。获取到MAC地址后
      再将MAC地址封装到数据包上。
    • 网络包完成后,接下来会将其转换成电信号并通过端口发送出去。这一步的工作过程和计算机也是相同的。
    • 发送出去的网络包会通过交换机到达下一个路由器。由于接收方 MAC 地址就是下一个路由器的地址,所以交换机会根据
      这一地址将包传输到下一个路由器。接下来,下一个路由器会将包转发给再下一个路由器,经过层层转发之后,网络包
      就到达了最终的目的地。
    • == 在网络包传输的过程中,源 IP 和目标 IP 始终是不会变的,一直变化的是 MAC 地址,因为需要 MAC 地址在以太网内进行两个设备之间的包传输。==

10:相互扒皮–服务端与客户端

  • 数据包抵达服务器后,服务器会先扒开数据包的 MAC 头部,查看是否和服务器自己的 MAC 地址符合,符合就将包收起来。
  • 接着继续扒开数据包的 IP 头,发现 IP 地址符合,根据 IP 头中协议项,知道自己上层是 TCP 协议。
  • 于是,扒开 TCP 的头,里面有序列号,需要看一看这个序列包是不是我想要的,如果是就放入缓存中然后返回一个 ACK,如果不是就丢弃。TCP头部里面还有端口号, HTTP 的服务器正在监听这个端口号。
  • 于是,服务器自然就知道是 HTTP 进程想要这个包,于是就将包发给 HTTP 进程
  • 服务器的 HTTP 进程看到,原来这个请求是要访问一个页面,于是就把这个网页封装在 HTTP 响应报文里。
  • HTTP 响应报文也需要穿上 TCP、IP、MAC 头部,不过这次是源地址是服务器 IP 地址,目的地址是客户端 IP 地址。
  • 穿好头部衣服后,从网卡出去,交由交换机转发到出城的路由器,路由器就把响应数据包发到了下一个路由器,就这样跳啊跳
  • 最后跳到了客户端的城门把手的路由器,路由器扒开 IP 头部发现是要找城内的人,于是把包发给了城内的交换机,再由交换机转发到客户端。
  • 客户端收到了服务器的响应数据包后,同样也非常的高兴,客户能拆快递了!
  • 于是,客户端开始扒皮,把收到的数据包的皮扒剩 HTTP 响应报文后,交给浏览器去渲染页面,一份特别的数据包快递,就这样显示出来了
  • 最后,客户端要离开了,向服务器发起了 TCP 四次挥手,至此双方的连接就断开了。

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

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

相关文章

C# 中的 is 真的是越来越强大,越来越语义化

一:背景 1. 讲故事最近发现 C#7 之后的 is 是越来越看不懂了,乍一看花里胡哨的,不过当我静下心来仔细研读,发现这 is 是越来越短小精悍,而且还特别语义化,那怎是一个爽字了得????,这一篇就和…

leetcode209. 长度最小的子数组(滑动窗口)

一:题目 二:上码 class Solution { public:/**思路:1.滑动窗口解法1>:确定窗口内是什么2>:确定窗口的起始位置3>:确定窗口的终止位置2.窗口:也就是我们的求的连续字符串的和3.窗口的起始位置: 窗口的起始位置最先是我们数组的起始位置,当窗口内连续数组的和大于targe…

开源特训营 - Lesson 4 - 如何运营社区

编辑:李明康责编:袁睿斌作者:课程助教 - 苏斌主讲教师:庄表伟(开源社理事长)、赵生宇(同济大学)本次课程的主题为《如何运营社区》,主讲者为开源社的理事长庄表伟老师和来…

leetcode904. 水果成篮(滑动窗口)

一:题目 二:上码 class Solution { public:/**思路:滑动窗口1.滑动窗口为我们 两个品种水果的个数2.滑动窗口的起始位置为数组的起始位置,当遇见一个新的水果种类的时候,这时候就需要移动我们的起始位置这里移动起始位置是要注意的,我们需要移动起始到我们的窗口中 完全没有 这…

拥抱.NET 5,从自研微服务框架开始

“ 2016年发布了.NET Core第一个正式版本,而.NET5也将在下个月就正式来临了,技术日新月异,也有点让人应接不暇。在框架设计上,.NET Framework的全家桶理念,培养了一大批的CRUD,而.NET Core转变成了按需使用…

leetcode周赛第一题6037. 按奇偶性交换后的最大数字(冒泡法)

一:题目 二:上码 class Solution { public:int largestInteger(int num) {string str to_string(num);for (int i 0; i < str.size()-1; i) {for (int j i1; j < str.size(); j) {int num1 str[j]-0;int num2 str[i]-0;if (num1%2 num2%2) {//这里我们控制的是奇数…

从零开始打造专属钉钉机器人

一、前言废话不多的实现简单的钉钉机器人。我们分为下面几个步骤来逐步讲解。1.钉钉机器人的类型2.如何打造一个最最简单的钉钉机器人二、钉钉机器人的类型常用的钉钉机器人有两种&#xff0c;1、通知类型的机器人&#xff1a;适合在群内进行一些通知&#xff0c;推荐消息等内容…

Azure 内容审查器之文本审查

内容审查器Azure 内容审查器也是一项认知服务。它支持对文本、图形、视频进行内容审核。可以过滤出某些不健康的内容&#xff0c;关键词。使你的网站内容符合当地的法律法规&#xff0c;提供更好的用户体验。文本内容审核其中文本内容的审核应用比较广泛。比如在审核游戏中的群…

java并发之CAS

文章目录1:何为CAS2:CAS图示3:CAS和Volatile的关系4:为何CAS效率更高一些5:CAS的特点7:受保护得共享数据类型(1):原子基本数据类型(2):原子引用数据类型7:ABA问题(1):什么是ABA(2):如何解决呢&#xff1f;1:何为CAS CAS(Compare And Swap)&#xff0c;即比较并交换。是解决多线…

快速了解 ASP.NET Core Blazor

最近在几个微信 .NET 交流群里大家讨论比较频繁的话题就是这几天自己的面试经历。面试官&#xff1a;“你刚说你喜欢研究新技术&#xff0c;那你有了解过 Blazor 吗&#xff1f;”作为一位专注于 .NET 开发的软件工程师&#xff0c;你好意思说你对 Blazor 一点也不解吗&#xf…

ASP.NET Core集成Nacos配置中心之适配多格式配置

前言 默认情况下&#xff0c;用nacos-sdk-csharp集成ASP.NET Core的配置系统&#xff0c;是基于JSON格式的数据。随着业务系统的多样化&#xff0c;可能用的配置格式也是各有千秋的。有的会用yaml/yml&#xff0c;有的会用ini&#xff0c;有的会用xml&#xff0c;等等。那么如果…

Git的使用(快速入门)

文章目录[TOC]一:将本地的项目提交到Git上二:GIt的基本操作1:建立一个本地仓库(1):类别(2):创建全新的仓库(3):克隆远程仓库2:查看文件的状态3:在桌面上的文件提交到远程仓库4:在idea中的文件提交到远程仓库5:分支(1):何为分支(2):常用命令(3)注意6:解决合并冲突(1):问题展示(2…

为什么这么忙,还依然做不好事情?

一直都很喜欢《重来》系列&#xff0c;最近出了《重来3&#xff1a;跳出疯狂的忙碌》&#xff0c;第一时间在微信读书中阅读了&#xff0c;让我们印象比较深刻的就是「冷静」和「效率」&#xff0c;本文主要说说效率的问题。书的作者是贾森弗里德&#xff08;Jason Fried&#…

开源特训营 - Lesson 6 - 如何提交一个合格的PR

编辑&#xff1a;李明康责编&#xff1a;袁睿斌作者&#xff1a;课程助教 - 苏斌主讲教师&#xff1a;张齐勋&#xff08;北京大学&#xff09;、赵生宇&#xff08;同济大学&#xff09;本次课程的主题为《如何提交一个合格的PR》&#xff0c;主讲者为来自北京大学的张齐勋老师…

改进程架构,Edge优化浏览器内存问题

微软 Edge 团队称&#xff0c;“今天的浏览器更像是操作系统&#xff0c;而不是文档查看器。用户正在浏览器中执行越来越多的任务&#xff0c;而在桌面应用程序中执行的任务越来越少。与此同时&#xff0c;每个网页、Web 应用程序和扩展程序都在使用内存&#xff0c;这也会使用…

中芯国际第二代FinFET工艺有望与2020年底试产

媒体报道&#xff0c;第一代FinFET 14纳米已于2019年四季度量产&#xff1b;第二代FinFET N1已进入客户导入阶段&#xff0c;可望于2020年底小批量试产。梁孟松披露&#xff0c;中芯国际的下一代N1工艺和14nm相比&#xff0c;性能提升了20%&#xff0c;功耗降低了57%&#xff0…

gRPC-微服务间通信实践

微服务间通信常见的两种方式由于微服务架构慢慢被更多人使用后&#xff0c;迎面而来的问题是如何做好微服务间通信的方案。我们先分析下目前最常用的两种服务间通信方案。gRPC&#xff08;rpc远程调用&#xff09;场景&#xff1a;A服务主动发起请求到B服务&#xff0c;同步方式…

移动 Azure 资源后如何快速修复 Dashboard

点击上方蓝字关注“汪宇杰博客”导语Azure 用户经常因为不够有钱&#xff0c;需要把资源移动到另一个资源组或订阅中。移动完成后&#xff0c;会导致资源对应的 Dashboard 失效。通常&#xff0c;我们都需要从 Dashboard 上将找不到的资源删除&#xff0c;并逐个重建。有没有快…

八大排序算法之插入排序

一:直接插入排序 1:思想 首先选择一个哨兵,我们默认将第一个数作为哨兵,随着循环的进行,我们一直将我们待插入数的前一个数作为哨兵然后就是插入的数与哨兵比较&#xff0c;比哨兵小的话&#xff0c;就将哨兵后移&#xff0c;然后再与哨兵前面的数进行比较&#xff0c;直到遇…

跟我一起学Redis之五种基本类型及其应用场景举例(干了6个小时)

前言来啦&#xff0c;老弟&#xff1f;来啦&#xff0c;上一篇就当唠唠嗑&#xff0c;接下来就开始进行实操撸命令&#xff0c;计划是先整体单纯说说Redis的各种用法和应用&#xff0c;最后再结合代码归纳总结。Redis默认有16个数据库(编号为0~15)&#xff0c;默认使用第0个&am…