网络是怎么连接笔记(一)WEB浏览器

news2024/12/27 19:52:24

文章目录

  • 介绍
  • 生成HTTP请求消息
  • 向DNS服务器查询WEB服务的IP地址
  • 全世界DNS服务器的大接力
  • 委托协议栈发送消息

介绍

  • 互联网整个消息传递流程
  1. 生成HTTP请求消息
  2. 向DNS服务器查询WEB服务的IP地址
  3. 然后DNS服务器进行查询IP地址
  4. 委托协议给对应IP发送消息

生成HTTP请求消息

  • 整个网络发送的流程,都先从我们输入网址开始,再开始介绍之前,我们先来了解网址这一串文本为什么这么写?
  • 网址,准确地讲应该叫url,专业名词为统一资源定位符,一般来说都是http:// 开头,但是不仅限于这个,比如还有ftp。
    • http://开头一般都是用来访问 WEB服务器
    • ftp://开头一般都是用来访问FTP服务器
    • 一般在访问WEB服务器的时候,URL会带上服务器的域名和要访问文件的路径名等
      在这里插入图片描述
    • url 的开头文字 比如 http , ftp , news等等,都是url 访问别的服务器的方法,这些前缀代表的是访问协议。
      • HTTP:超文本传送协议
      • 协议:通信操作的规则
  • 介绍完url,现在就要开始进入正题,浏览器在用户输入网址点击访问的工作流程
    1. 第一步 将URL 进行拆分,获取到需要的元素
      在这里插入图片描述

    2. 第二步 通过解析URL 知道需要访问的目标在哪里,接下来浏览器就会通过对应协议 去访问对应的服务器,上面例子使用的是 http:则 浏览器就会使用 http请求,去访问WEB 服务器
      在这里插入图片描述

      • 什么是HTTP协议?
      • HTTP协议:定义了客户端和服务器之间交互的消息内容和步骤。
      • HTTP请求方法:进行怎么样的操作称为方法,表示需要web服务器完成怎么样的工作
        在这里插入图片描述
      • 具体流程:
        1. 首先客户端会向服务器发送请求消息
        2. 服务器 收到消息之后,服务器会对其中的内容进行解析,解析之后再完成工作,将返回结果放入响应消息中
        3. 服务器 再返回 响应消息 给 客户端
  • 以上就是具体的流程,知道大概的流程以后,我们需要好好研究一下HTTP请求,究竟发送了什么内容,格式是怎么样的?
    • 请求消息:
      • 请求行:大致了解请求的内容

      • 消息头:请求的详细信息
        在这里插入图片描述在这里插入图片描述

      • 空行

      • 消息体:需要发送的数据
        在这里插入图片描述

    • 响应消息:
      • 状态行:响应状态码和响应短语,用来表示请求的执行结果成功还是失败
        在这里插入图片描述
      • 消息头
      • 空行
      • 消息体
        在这里插入图片描述
  • 下面是例子
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

向DNS服务器查询WEB服务的IP地址

  • 生成HTTP请求后,我们需要发送消息给WEB服务器,但浏览器并不具备发送消息到网络的功能,这需要委托操作系统完成,所以操作系统需要 对应 服务器的地址,也就是IP地址,所以再发送之前还有一步操作,就是查找对应服务器的IP地址
  • 再了解这一操作之前,我们先来了解一下什么是IP地址?
    • 互联网和公司内部的局域网都是基于TCP/IP协议来设计的,TCP/IP 协议 是由一个一个小的子网连接起来的,什么是子网,子网就是类似于你家小区的地址,每个计算机都会分配一个门牌号,如果想找到你家计算机,并向你家计算机投放数据,则需要根据这个地址去寻找。
      • 具体操作:
        • 多个计算机连接一个集线器
        • 多个集线器连接一个路由器
        • 多个路由器连接一个集线器
      • 传输的数据被称之为包
        在这里插入图片描述
    • 了解了大概IP地址的作用之后,我们就来看看IP地址长啥样,如下图所示,IP是一串32位byte的数字,8比特为一组,分别用十进制表示,然后再用圆点隔开。
      在这里插入图片描述
      • 有一个附加信息,就是子网掩码,子网掩码表示网络号与主机号之间的边界,它是一种用来指明一个IP地址的哪些位标识的是主机所在的子网,以及哪些位标识的是主机的位掩码。 子网掩码不能单独存在,它必须结合IP地址一起使用。 子网掩码只有一个作用,就是将某个IP地址划分成网络地址和主机地址两部分
        在这里插入图片描述
  • 了解了IP是什么,这个时候就需要有个问题了,为什么要使用域名呢?
    • 如果用 IP地址来代替服务器名称也是能够正常工作的,然而,就像你很难记住电话号码一样,要记住一串由数字组成的 IP 地址也非常困难。那为什么不直接用名称呢?从运行效率上来看,这并不能算是一个好主意。互联网中存在无数的路由器,它们之间相互配合,根据IP 地址来判断应该把数据传送到什么地方。那么如果我们不用 IP 地址而是改用名称会怎么样呢? IP 地址的长度为 32 比特,也就是 4 字节,相对地,域名最短也要几十个字节,最长甚至可以达到 255 字节。换句话说,使用 IP 地址只需要处理 4 字节的数字,而域名则需要处理几十个到 255 个字节的字符,这增加了路由器的负担,传送数据也会花费更长的时间
    • 所以现在采用的方案就是让人来使用名称,让路由器来使用 IP 地址。这样就可以比较满足双方的需求
  • 但如果想要IP和名称统一使用,则需要一个翻译器,将名称翻译成IP地址给路由器,这个时候就需要DNS系统了,什么是DNS系统?
    • DNS系统:Domain Name System,域名服务系统。将服务器名称和 IP 地址进行关联是 DNS 最常见的用法,但 DNS 的功能并不仅限于此,它还可以将邮件地址和邮件服务器进行关联,以及为各种信息关联相应的名称。
    • 查询IP地址其实很简单,只需要将名称给DNS系统,他就会给你对应的IP,但是有个问题需要深究一下,浏览器是如何跟DNS系统进行交互的呢?
    • 向 DNS 服务器发出查询,也就是向 DNS 服务器发送查询消息,并接收服务器返回的响应消息。看起来很简单,但还有一些具体可以了解一下
      • 首先我们的计算机上一定有相应的 DNS 客户端,而相当于 DNS 客户端的部分称为 DNS 解析器,或者简称解析器。通过 DNS 查询 IP 地址的操作称为域名解析,因此负责执行解析(resolution)这一操作的就叫解析器(resolver)了。而解析器其实就是一段程序,这段程序在操作系统的SOCKET库上。
      • 然后我们模拟一下,浏览器通过DNS系统查找IP的整个流程
        • 调用解析器,向DNS服务器发送查询请求
        • DNS服务器就会返回响应请求
        • 解析器就会获取到对应的IP地址,返回给浏览器
          在这里插入图片描述
  • 补充:我们当然也需要知道 DNS 服务器的 IP 地址。只不过这个 IP 地址是作为 TCP/IP 的一个设置项目事先设置好的,不需要再去查询了。不同的操作系统中 TCP/IP 的设置方法也有差异,Windows 中的设置如下图,解析器会根据这里设置的 DNS 服务器 IP 地址来发送消息
    在这里插入图片描述

全世界DNS服务器的大接力

  • 上面了解到浏览器 到 DNS系统的交互过程,这里我们需要了解一下DNS服务器的工作流程
    在这里插入图片描述

    • 首先他会接收到浏览器的查询消息

      • 消息包含3钟信息:
        • 域名:服务器、邮件服务器(邮件地址中 @ 后面的部分)的名称
        • Class:在最早设计 DNS 方案时,DNS 在互联网以外的其他网络中的应用也被考虑到了,而 Class 就是用来识别网络的信息。不过,如今除了互联网并没有其他的网络了,因此 Class 的值永远是代表互联网的 IN
        • 记录类型:表示域名对应何种类型的记录。
          在这里插入图片描述
    • DNS 系统 根据这些查询信息 (域名,class,记录类型)去查找 内部匹配的记录

    • DNS 系统返回响应消息

  • 上面说了,IP地址的相关信息存储在DNS服务器内部的记录中,但是这么多记录,存在一个DNS系统里不太现实,所以一定会有多个DNS系统,并且一定会有DNS系统里查找不到的情况,这又如何解决?

    • 解决方案就是将信息分布保存在多台 DNS 服务器中,这些 DNS 服务器相互接力配合,从而查找出要查询的信息。
      • 首先,DNS 服务器中的所有信息都是按照域名以分层次的结构来保存的。也就是地址中,省份,市,区这样的结构。
      • 而DNS中的域名是用句号来分割,比如www.baidu,com,这里的句号就代表了不同的层级,位置越靠近右边则层级越高,比如 com 省 baidu 市 www区 ,这种层级结构的域名信息就会注册到DNS系统中,并且每个域作为一个整体来处理,也就是说把整个域存放到一个DNS服务中,于是,DNS 服务器也具有了像域名一样的层次结构,每个域的信息都存放在相应层级的 DNS 服务器中。
  • 了解完这些信息之后,我们如何寻找相应的 DNS 服务器并获取 IP 地址?

    • 首先,将负责管理下级域的 DNS 服务器的 IP 地址注册到它们的上级 DNS 服务器中
    • 然后上级 DNS 服务器的 IP 地址再注册到更上一级的 DNS 服务器中,以此类推,比如 www.baidu.com 这个域的DNS服务器的IP地址上传到 baidu.com 域 的DNS服务器,baidu.com 这个域的DNS服务器的IP地址上传到 com 域 的DNS服务器。
    • 我们就可以通过上级 DNS 服务器查询出下级 DNS 服务器的 IP 地址,也就可以向下级 DNS 服务器发送查询请求了
    • 补充:在互联网中,com 和 jp 的上面还有一级域,称为根域。根域不像 com、jp 那样有自己的名字,因此在一般书写域名时经常被省略,如果要明确表示根域,应该像www.baidu.com. 这样在域名的最后再加上一个句点,而这个最后的句点就代表根域。还有将根域的 DNS 服务器信息保存在互联网中所有的 DNS 服务器中。这样一来,任何 DNS 服务器就都可以找到并访问根域 DNS 服务器了。
      在这里插入图片描述
      在这里插入图片描述
  • 补充:

    • 图中,每一个域旁边都写着一台 DNS 服务器,但现实中上级域和下级域有可能共享同一台 DNS 服务器。在这种情况下,访问上级 DNS 服务器时就可以向下跳过一级 DNS 服务器,直接返回再下一级 DNS 服务器的相关信息。
    • 有时候并不需要从最上级的根域开始查找,因为 DNS 服务器有一个缓存功能,可以记住之前查询过的域名。如果要查询的域名和相关信息已经在缓存中,那么就可以直接返回响应,接下来的查询可以从缓存的位置开始向下进行。相比每次都从根域找起来说,缓存可以减少查询所需的时间。这个缓存机制中有一点需要注意,那就是信息被缓存后,原本的注册信息可能会发生改变,这时缓存中的信息就有可能是不正确的。因此,DNS 服务器中保存的信息都设置有一个有效期,当缓存中的信息超过有效期后,数据就会从缓存中删除。而且,在对查询进行响应时,DNS 服务器也会告知客户端这一响应的结果是来自缓存中还是来自负责管理该域名的 DNS 服务器。

委托协议栈发送消息

  • 知道IP地址之后,就可以委托操作系统的内部协议栈像这个IP地址发送消息,要发送的是一种数字信息,这种数字信息适用于任何网络应用程序,下面我们就了解一下,这种数字信息
  • 首先像DNS服务器查询IP地址时,需要使用SOCKET库中的程序组件,而整个收发数据需要操作,只有了解这些操作,才能更好的理解为什么要这种数字信息?
    • 在收发数据之前,需要先建立一条管道连接两台服务器,而管理两台服务器的出入口称为套接字,具体的操作是
      • 服务端创建套接字,等待客户端连接
      • 客户端创建套接字,连接服务端的套接字上
    • 两个服务器连接上了之后,开始传输数据
    • 数据传输完毕之后,服务端和客户端两端,任意一端可以发送断开,断开之后套接字也就会被删除,通信结束
      在这里插入图片描述
    • 总结一下就是可以分为四部操作:
      • 创建套接字
      • 将管道连接到服务器的套接字上
      • 数据传输
      • 断开连接,并删除套接字
  • 接下来我们就来详细了解这四步操作的一些细节
  • 创建套接字阶段:创建套接字的操作就是调用Socket库中的socket程序组件,套接字创建完成之后,协议栈会返回一个描述符,应用程序会将收到的描述符存放在内存中,而描述符是用来识别不同的套接字的。
    在这里插入图片描述
  • 将管道连接到服务器的套接字上:需要委托协议栈将客户端创建的套接字与服务器那边的套接字连接起来。应用程序通过调用Socket 库中的名为 connect 的程序组件来完成这一操作,而调用Connect时,需要 指定描述符,服务器IP和端口号三个参数
    • 指定描述符:第一步创建的套接字
    • 服务器IP:想要连接的服务器地址
    • 端口号:每个IP有多个网络硬件,而端口号就是为了识别我们链接这个IP地址某个网络硬件程序,就比如我们打客服电话,总会说如果什么请按1 什么请按2,什么服务请按3 等,端口号就是像这个例子中按数字选择一样的存在
      * 端口号是有一定规范的,比如 Web 是 80号端口,电子邮件是 25 号端口
  • 数据传输:
  • 断开连接,并删除套接字:Web 使用的 HTTP 协议规定,当 Web 服务器发送完响应消息之后,应该主动执行断开操作,因此 Web 服务器会首先调用 close 来断开连接。断开操作传达到客户端之后,客户端的套接字也会进入断开阶段

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

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

相关文章

Spring面试重点(三)——AOP循环依赖

Spring面试重点 AOP 前置通知(Before):在⽬标⽅法运行之前运行;后置通知(After):在⽬标⽅法运行结束之后运行;返回通知(AfterReturning):在⽬标…

2023年前端面试知识点总结(CSS篇)

近期整理了一下高频的前端面试题,分享给大家一起来学习。如有问题,欢迎指正! 1. 对CSS盒模型的理解 CSS3的盒模型有两种盒子模型:标准盒子模型、IE盒子模型 盒模型都是由四个部分组成的,分别是content(内容…

layui框架学习(6:基础菜单)

菜单是应用系统的必备元素,虽然网页中的导航也能作为菜单使用,但菜单和导航的样式和用途有所不同(不同之处详见参考文献5)。Layui中用不同的预设类定义菜单和导航的样式,同时二者依赖的模块也不一样。本文主要学习和记…

Vue (3)

文章目录1. 数据代理1.1 回顾1.2 开始2. 事件处理2.1 v-on:click 点击事件2.2 事件修饰符2.3 键盘事件3. 计算属性3.1 插值语法实现3.2 methods实现3.3 计算属性实现4. 监视属性4.1 深度监视4.2 监视属性的简写形式4.3 watch 与 computed 对比1. 数据代理 在学习 数据代理 时 先…

SQL数据查询——单表查询和排序

文章目录一、单表查询1.查询列1)查询全部列指定列2)查询经过计算的值3)列的别名2.查询元组1)消除取值重复的行(DISTINCT)2)条件查询(WHERE)3.空值参与运算4.着重号二、排序(ORDER BY子句)一、单表查询 单表查询指仅涉及…

Webpack的知识要点

在前端开发中,一般情况下都使用 npm 和 webpack。   npm是一个非常流行的包管理工具,帮助开发者管理项目中使用的依赖库和工具。它可以方便地为项目安装第三方库,并在项目开发过程中进行版本控制。   webpack是一个模块打包工具&#xff…

C语言深度剖析之程序环境和预处理

1.程序的翻译环境和执行环境 第一种是翻译环境,在这个环境中源代码被转换为可执行的机器指令 第二种是执行环境,它用于实际执行代码 2.翻译环境 分为四个阶段 预编译阶段 ,编译,汇编,链接 程序编译过程:多个…

使用vue3,vite,less,flask,python从零开始学习硅谷外卖(16-40集)

严正声明! 重要的事情说一遍,本文章仅供分享,文章和代码都是开源的,严禁以此牟利,严禁侵犯尚硅谷原作视频的任何权益,我知道学习编程的人各种各样的心思都有,但这不是你对开源社区侵权的理由&am…

iptables防火墙之SNAT与DNAT

目录 1、SNAT策略概述 1.SNAT策略的典型应用环境 2.SNAT策略的原理 3.SNAT工作原理 4.SNAT转换前提条件 5.开启SNAT命令 6.SNAT转换 2.SNAT示例 1. 配置网关服务器 2.Xshell 连接192.168.100.100 3.DNAT策略及应用 1. DNAT策略概述 2.DNAT 策略的应用 3.DNAT转换前提条件…

看完这篇 教你玩转渗透测试靶机vulnhub——Hack Me Please: 1

Vulnhub靶机Hack Me Please: 1渗透测试详解Vulnhub靶机介绍:Vulnhub靶机下载:Vulnhub靶机安装:Vulnhub靶机漏洞详解:①:信息收集:②:漏洞利用③:获取反弹shell:④&#x…

how https works?https工作原理

简单一句话: https http TLShttps 工作原理:HTTPS (Hypertext Transfer Protocol Secure)是一种带有安全性的通信协议,用于在互联网上传输信息。它通过使用加密来保护数据的隐私和完整性。下面是 HTTPS 的工作原理:初始化安全会…

Camtasia2023最新版电脑视频录屏记录编辑软件

在Mac或Wind上有各种可用的视频记录和编辑软件,其中Camtasia被称为视频记录器和视频编辑器。录屏软件Camtasia2023到底有什么特色功能?本文将帮助您选择理想的选择来开始视频捕获,创建和编辑。Camtasia2023是Mac/win平台上一款使用非常简单的…

【JavaScript】题(牛客网)——熟练使用函数调用,超详细讲解

1 熟练使用函数调用 1.1 题目 执行以下程序,输出结果为 var uname "window"; var object {uname: "object",fun: function () {console.log(this.uname);return function () {console.log(this.uname);};}, };object.fun()();1.2 答案 ob…

ThingsBoard-设备配置

1、概述 从 ThingsBoard 3.2 开始,租户管理员可以使用设备配置文件为多个设备配置通用设置。每个设备在单个时间点都有一个且唯一的配置文件。 有经验的 ThingsBoard 用户会注意到设备类型已被弃用,取而代之的是设备配置文件。更新脚本将根据唯一的设备类型自动创建设备配置…

三、Java面向对象

1 . 方法 方法(method)是程序中最小的执行单元方法就是一些代码的打包 需要的时候可以直接调用方法之间是平级的关系 不能在方法里面定义方法方法不调用就不执行 方法的定义 // 方法的定义 /* [修饰符] 返回值类型 方法名称([参数 1],[参数 2]){语句A;return 返回值; } *///…

VT虚拟化框架编写

文章目录前言VT架构基础VT框架编写步骤一:检测VT是否开启VMM和VMVMON和VMCSVT框架编写步骤二 填充VMONVT框架编写步骤三 进入VTVT框架编写步骤四 初始化VMCSVT框架编写步骤五 初始化VMCS数据区VT框架编写步骤六 处理必要事件前言 学习VT相关的知识,需要…

C++11新特性

文章目录说在前面花括号{}初始化new的列表初始化STL相关容器的列表初始化相关语法格式容器列表初始化的底层原理forward_list和array与类型相关的新特性decltype左值引用和右值引用什么是左值,什么是右值左值和右值的本质区别右值引用如何理解右值引用std::move移动…

【软考系统架构设计师】2022下综合知识历年真题

【软考系统架构设计师】2022下综合知识历年真题 【2022下架构真题第01题:绿色】 01.云计算服务体系结构如下图所示,图中①、②、③分别与SaaS、PaaS、Iaas相对应,图中①、②、③应为( ) A.应用层、基础设施层、平台层 B.应用层、平台层、基础…

Linux驱动开发(一)

linux驱动学习记录 一、背景 在开始学习我的linux驱动之旅之前,先提一下题外话,我是一个c语言应用层开发工作人员,在工作当中往往会和硬件直接进行数据的交互,往往遇到数据不通的情况,常常难以定位,而恰巧…

静态分析工具Cppcheck在Windows上的使用

之前在https://blog.csdn.net/fengbingchun/article/details/8887843 介绍过Cppcheck,那时还是1.x版本,现在已到2.x版本,这里再总结下。 Cppcheck是一个用于C/C代码的静态分析工具,源码地址为https://github.com/danmar/cppcheck …