note-网络是怎样连接的1 浏览器内部

助记提要
  1. 常见浏览器使用的协议 4种
  2. HTTP方法 8种
  3. 响应状态码类型 5种
  4. 5种IP地址的含义
  5. 域名查找的基本原理
  6. 协议栈发送消息的4个阶段

第1章 浏览器生成消息 探索浏览器内部

1 浏览器输入的URL

  • 常见协议
    http(访问Web服务器),ftp(从ftp服务器下载和上传),file(读取客户端本地文件),mailto(发送电子邮件),news(阅读新闻组的内容)。

  • URL的格式会随着协议的不同而不同。
    访问Web服务器的URL格式:协议://服务器名/数据路径。

数据路径省略文件名时,会读取文件夹下事先设置好的默认文件名。不确定是文件还是文件夹的情况下,有文件则读取文件,无文件会按目录处理。

2 HTTP协议

2.1 URI

表示访问的目标,一般是路径名,指向一个存放网页数据的文件或是一个CGI程序文件。
直接从URL中提取即可。
一条请求中只能写一个URI。获取多个文件,必须对每个文件发送一次请求。

2.2 HTTP的方法

GET,获取URI指定的信息。
POST,向服务器发送数据。
HEAD,与GET相同,但是只返回HTTP消息头,不返回数据内容。用来获取文件最后更新时间等信息。
OPTIONS,通知或查询通信选项。
PUT,替换URI指定的服务器上的文件。文件不存在则新建。
DELETE,删除URI指定的服务器上的文件。
TRACE,把服务器收到的请求行和头部直接返回给客户端。用于在代理时检查改写请求的情况。
CONNECT,使用代理传输加密消息时使用的方法。

2.3 请求和响应消息的结构

请求消息

方法 URI HTTP版本   # 请求行,版本号表示该消息是基于哪个HTTP规格写的
字段:值            # 消息头,请求的附加信息,多行键值对,
...
...
(空行)
消息体             # 消息体,向服务器发送的数据

响应消息

HTTP版本 状态码 响应短语 # 状态行
字段:值            # 消息头
...
...
(空行)
消息体             # 消息体为服务器向客户端发送的数据
2.4 HTTP的主要消息头字段
  • 通用
    Date,请求或响应生成的日期;
    Pragma,表示数据是否允许缓存的通信选项;
    Cache-Control,控制缓存的信息;
    Connection,发送响应后TCP连接是否继续保持;
    Transfer-Encoding,消息主体的编码格式;
    Via,记录途中经过的代理和网关;

  • 请求头
    Authorization,身份认证数据;
    From,请求发送者的邮件地址;
    If-Modified-Since,判断客户端缓存是否过期,过期后才获取新的数据;
    Refer,通过点击超链接进入页面时,Refer记录上一个页面的URL;
    User-Agent,客户端软件的名称和版本号;
    Accept,客户端支持的数据类型,MIME类型表示;
    Accept-Charset,客户端支持的字符集;
    Accept-Encoding,客户端可支持的编码格式,一般是数据的压缩格式;
    Accept-Language,客户端支持的语言;
    Host,接受请求的服务器的IP地址和端口号;
    If-Unmodified-Since,指定日期后数据未更新时执行请求;
    Range,指定数据范围,以仅获取部分数据;

  • 响应头
    Location,表示信息的准确位置。URI为相对路径时,这个字段返回绝对路径;
    Server,服务器程序的名称和版本号;
    WWW-Authenticate,请求的信息存爱访问控制时,返回身份认证用的数据
    Accept-Ranges,使用Range请求部分数据时,服务器告知客户端是否支持此功能;

  • 实体头
    Allow,表示指定的URI支持的方法;
    Content-Encoding,消息体经过压缩等编码时,表示其编码格式;
    Content-Length,表示消息体长度;
    Content-Type,表示消息体的数据类型,以MIME规定的数据类型表示;
    Expires,消息的有效期;
    Last-Modified,数据的最后更新日期;
    Content-Language,消息体的语言;
    Content-Location,消息体在服务器上的位置;
    Content-Range,当仅请求部分数据时,表示数据范围;
    Etag,更新操作中可能需要基于上次的响应数据来发送下次请求。Etag可以用来提供上次响应与下次请求的关联信息。响应时,服务器发给客户端一个唯一标识,下次请求时客户端通过If-Match、If-None-Match、If-Range字段把标识告诉服务器。Etag是将Cookie标准化后的规格。

2.5 响应状态码类型

1xx,告知请求的处理进度和情况;
2xx,请求成功;
3xx,表示进一步操做;
4xx,客户端错误;
5xx,服务器错误;

3 IP地址

3.1 TCP/IP的思路

集线器连接几个计算机组成子网,子网通过路由器组成网络。
网络中每个设备都会分配一个IP地址,通过IP地址可以判断访问的服务器的位置,然后才能发送消息。
发出的消息先经过集线器,转发到最近的路由器上,路由器会根据消息判断下一个路由器的位置,然后再发送到下一个路由器,不断转发直到传给目的地。

3.2 IP地址结构
# IP地址主体
10.11.12.13
# IP地址加子网掩码
10.11.12.13/255.255.255.0
# 使用网络号的比特数表示子网掩码
10.11.12.13/24
# 主机号全部为0,代表整个子网
10.11.12.0/24
# 主机号全部为1,表示对整个子网进行广播
10.11.12.255/24

子网掩码左边一半全是1,右边一半全是0。子网掩码为1的部分是网络号,为0的部分是主机号。

3.3 域名和IP并用的理由

域名比IP地址更容易记,因此由人使用。
IP地址简短且格式统一,能被设备高效处理。
通过DNS进行IP和域名的互查。

3.4 socket库查询IP地址

socket库中的程序组件可以让其他应用程序调用系统的网络功能。域名解析器是socket库中的一种程序组件。

网络应用程序调用解析器后,程序的控制流程回转移到解析器内部。
解析器先生成发送给DNS服务器的查询消息,然后委托给操作系统内部的协议栈执行发送操作。
协议栈执行发送消息的操作,通过网卡把消息发给DNS服务器。
DNS服务器根据消息中的内容进行查询,找到IP地址,返回给客户端。
消息经过网络到达客户端,然后经过协议栈传给解析器。解析器读出其中的IP地址,并将IP地址写到应用程序指定的内存地址中。
控制流程重新回到应用程序。

4 DNS

DNS查询消息的结构

域名,服务器或邮件服务器的名称。
Class,用于识别网络的信息。只会是表示互联网的IN。
记录类型,表示域名对应哪种类型的记录。

4.1 几种记录类型

A:域名对应IP地址
MX:域名对应邮件服务器
PTR:IP对应域名
CNAME:域名对应域名的别名
NS:查询DNS服务器的IP地址
SOA:查询域名属性信息

4.2 域名的层次结构

域名是用句点分隔不同层级的,每个层级都表示一个域,越靠右的域层级越高。
一个域的信息作为一个整体存放在DNS服务器中。

4.3 DNS服务器查找的基本原理

下级域的DNS服务器的IP地址都会注册到他们的上级DNS服务器中,上级DNS服务器的IP地址再注册到更上一级的DNS服务器。客户端通过上级DNS服务器查询到下级DNS服务器的IP地址,就能像下级DNS发送查询请求。
顶级域上面还有根域。根域DNS服务器在全世界仅有13个,它们的地址基本不发生变化。根域DNS的地址在所有的DNS服务器都有保存。

客户端先访问最近的一台DNS服务器,如果其中没有所查询域名对应的信息,DNS服务器会把查询请求转发给根域DNS。
根域中也找不到该域名,但是能判断出域名属于根域下的哪一个域,根域DNS把这个下一级DNS的IP地址返回给离客户端最近的DNS服务器。
最近的DNS又向根域的下一级DNS服务器发出查询请求,下一级DNS找不到域名,会再返回下下级的DNS服务器的IP,以此类推,直到找到目标DNS服务器,得到所查询域名的IP地址,返回给客户端。

DNS能缓存之前查询过的域名。如果查询的域名不在缓存中,接下来可以从缓存的位置开始向下进行,避免每次查询都从根域开始。缓存中的信息有一个有效期,响应时也会告诉客户端是来自缓存还是来自管理该域名的服务器。

5 委托协议栈发送消息

分为4步。

1. 创建套接字

服务器先创建套接字,然后等待客户端向该套接字连接管道。
客户端调用socket组件创建套接字。
之后协议栈会返回一个描述符,应用程序会把描述符存到内存中。描述符用来识别后续使用哪一个套接字。

2. 连接阶段

客户端调用socket库的connect程序组件,委托协议栈将客户端创建的套接字和服务器那边的套接字连接起来。
connect需要三个参数:描述符、IP地址、端口号,然后执行连接操作。
连接成功后,会把服务器的IP地址和端口号保存在涛姐字中。

描述符是应用程序识别使用哪一个套接字的;IP地址和端口号是客户端和服务器之间识别对方套接字的。

3. 通信阶段

应用程序在内存中准备好要发送的数据;
调用socket库的write组件,使用指定的描述符发送数据;
服务器收到数据内容后,解析并做相应的操作,向客户端返回响应信息;
客户端使用socket的read组件把服务器的响应信息存在接收缓冲区中。
接收缓冲区是应用程序内部划分出来的内存空间。

4. 断开阶段

客户端可以调用socket库的close组件。

HTTP协议规定,Web服务器发送完响应消息后,应主动执行断开操作。因此Web服务器会先调用close断开连接。
断开操作传达到客户端后,客户端的套接字也进入断开阶段。
read组件接受完数据后,浏览器得到数据收发结束的消息,就调用close组件。

每获取一个数据都要执行连接、发请求、收响应、断开的操作,效率低。HTTP1.1允许在一次请求中进行多次收发操作。

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

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

相关文章

【XuperChain】一、搭建第一条区块链节点

一、准备环境: 下载git和golang即可 apt install git apt install golang二、拉取代码,编译XuperChain 通过此命令拉取XuperChain源码到本地 git clone https://github.com/xuperchain/xuperchain.git 拉取成功后,会代码保存到了xuperChain…

使用Python生成一束玫瑰花

520到了,没时间买花?我们来生成一个电子的。 Python不仅是一种强大的编程语言,用于开发应用程序和分析数据,它也可以用来创造美丽的艺术作品。在这篇博客中,我们将探索如何使用Python生成一束玫瑰花的图像。 准备工作…

【逻辑漏洞】重置/忘记密码安全问题

【逻辑漏洞】重置/忘记密码安全问题 密码重置令牌泄漏密码重置中毒电子邮件轰炸密码重置令牌生成方式太过简陋使用过期令牌用好的响应替换坏的响应尝试使用自己的重置令牌注销/密码重置中的会话失效 密码重置令牌泄漏 如果密码重置令牌包含在 URL 中,并且用户在请求…

野心是需要付出去达到的,而欲望就只是欲望

当你能分清楚自己的想法是野心还是欲望时,就没有那么焦虑了。 这是野心还是欲望? 理解这两者之间的区别,对于我们的情绪状态和生活决策有着重要的影响。本文将探讨如何区分野心与欲望,并分享如何通过这种理解来减少焦虑。 野心&a…

如何解决爬虫的IP地址受限问题?

使用代理IP池、采用动态IP更换策略、设置合理的爬取时间间隔和模拟正常用户行为,是解决爬虫IP地址受限问题的主要策略。代理IP池是通过集合多个代理IP来分配爬虫任务,从而避免相同的IP地址对目标网站进行高频次访问,减少被目标网站封禁的风险…

TransFormer学习之VIT算法解析

1.算法简介 本文主要对VIT算法原理进行简单梳理,下图是一个大佬整理的网络整体的流程图,清晰明了,其实再了解自注意力机制和多头自注意力机制后,再看VIT就很简单了 受到NLP领域中Transformer成功应用的启发,ViT算法尝…

详解ArcGIS 水文分析模型构建

目录 前言 项目环境、条件 Dem 数据预览 ArcGIS模型构建器 模型搭建 填洼 流向 流量 河流长度 栅格计算器 河流链接 河网分级 栅格河网矢量化 绘制倾泻点 栅格流域提取 集水区 盆域分析 栅格转面 模型应用 导出 py 文件 完善脚本 最终效果 结束语 前言 …

【时间复杂度和空间复杂度之间的故事】

【时间复杂度和空间复杂度之间的故事】 一.前言 二.时间复杂度定义时间复杂度的计算规则习题 三.空间复杂度定义计算方法习题空间复杂度 O(1)空间复杂度 O(n) 本文主要讲解关于时间复杂度与空间复杂度 😀😃😁😁😇&…

linux驱动中amba框架的作用

一,linux amba使用原因 一些芯片的设备树上的很多片内外设的compatible属性为compatible = "arm,primecell",且在内核源码中找不到compatible匹配的驱动,这是因为这些驱动使用了arm提供的amba协议。AMBA是由ARM Holdings开发的一种广泛使用的片上互连规范,它为系…

Go 秒读32GB大文件

在Go中,处理大文件时,一般采用分块读取的方式,以避免一次性加载整个文件到内存中。 1、打开文件 使用os.Open打开文件 package mainimport ("log""os" )func main() {file, err : os.Open("xxx.txt")if er…

部署Web应用,使用多种Azure服务【简略步骤】

步骤1:设计和开发Web应用 首先,选择一个开发框架和编程语言。例如,使用ASP.NET Core和C#进行开发。 创建项目: 使用Visual Studio或VS Code创建一个ASP.NET Core Web应用。 开发应用: 根据需求开发应用的各个部分&…

FastAPI单元测试:使用TestClient轻松测试你的API

当使用FastAPI进行单元测试时,一个重要的工具是TestClient类。TestClient类允许我们模拟对FastAPI应用程序的HTTP请求,并测试应用程序的响应。这使我们能够在不启动服务器的情况下对API进行全面的测试。 下面我将详细讲解TestClient的使用方法和常见操作…

10大桌面软件前端框架,那个是您的最爱呢?

桌面端前端框架是用于构建桌面应用程序的前端框架,以下是一些常用的桌面端前端框架: 1. Electron: Electron是一个开源的桌面应用程序开发框架,可以使用HTML、CSS和JavaScript构建跨平台的桌面应用程序,例如VS Code、…

2024 年第四届长三角高校数学建模竞赛赛题B题超详细解题思路+代码分享

B题 人工智能范式的物理化学家 问题一问题二问题三问题四问题五完整代码与文档获取 B题思路详细解析分享给大家,还会继续更新完成具体的求解过程,以及全部的代码与技术文档,都会直接给大家分享的哦~需要完整代码直接看到最后哦 问题一 针对问…

谈谈【软件测试的基础知识,基础模型】

关于软件测试的基本概念和基本模型 前言一个优秀的测试人员具备的素质关于需求测试用例软件错误(BUG)概念开发模型瀑布模型(Waterfall Model)螺旋模型(Spiral Model) 前言 首先,什么是软件测试? 通俗来讲:软件测试就是找BUG&…

vue3 图片加载报错时,设置默认图片

项目场景: 在项目开发中,图片因为各种原因加载失败,这时候需要设置默认的图片(暂无图片.png) 问题描述 在使用vue3开发问题的同时,有些图片因为服务器更换,历史数据问题,加载失败&am…

【配置】雷池WAF社区版安装

官方文档点击跳转 什么是雷池 雷池(SafeLine)是长亭科技耗时近 10 年倾情打造的 WAF,核心检测能力由智能语义分析算法驱动。 什么是 WAF WAF 是 Web Application Firewall 的缩写,也被称为 Web 应用防火墙。 区别于传统防火墙…

记某src通过越权拿下高危漏洞

在挖掘某SRC时,遇到了一个社区网站,社区站点是我在挖掘SRC时比较愿意遇到的,因为它们可探索的内容是较多的,幸运地,通过两个接口构造参数可进行越权,从而获得整个网站用户的信息。 图片以进行脱敏处理。在…

单词可交互的弧形文本

在一个项目中,要求把少儿读本做成电子教材呈现出来,电子书的排版要求跟纸质书一致。其中,英语书有个需求:书中有些不规则排版的文本(如下图所示),当随书音频播放时,被读到的文本要求…

gin框架学习笔记(四) ——参数绑定与参数验证

参数绑定 前言 在Gin框架中我们可以利用bind来将前段传递过来的参数与结构体进行参数绑定与参数校验,而这bind的方式主要有以下两种: Mustbind:一般使用较少,因为参数校验失败会改变状态码Shouldbind:主要使用上的校验方法,校验…