《网络是怎样连接的》(一)
第一章web浏览器
简介
首先输入网址URL,浏览器进行解析,将我们需要哪些数据告诉服务器。浏览器向服务器发送消息,必须告诉操作系统的接收方的IP地址,所以浏览器先查出web服务器的IP地址,向DNS服务器查询域名对应的IP地址。查到地址后,就可以把消息委托给操作系统发给服务器了。而委托给操作系统有非常详细的规则。
生成 HTTP 请求消息
网址:URL,除了有http:,还有ftp:,file:,mailto:。据访问目标的不同,URL 的写法也会不同。在访问 Web 服务器和 FTP 服务器时,URL 中会包含服务器的域名和要访问的文件的路径名等,发邮件的 URL 则包含收件人的邮件地址。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zNGZNzWu-1685972112656)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20230605110632732.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pmfbMVvW-1685972112657)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20230605111019718.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FN89sYrv-1685972112658)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20230605111218582.png)]
输入URL后,浏览器开始解析,http包含这几种元素,先把每个元素拆分出来,如图包含 Web 服务器名称 www.lab.glasscom.com,以及文件的路径名 /dir1/file1.html。表示要访问 www.lab.glasscom.com 这 个 Web 服 务 器 上 路 径 名 为 /dir/file1.html 的 文件。
协议:通信操作的规则定义称为协议(protocol)
当URL省略要访问的文件名时,默认访问index.html或者default.html。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dweIkCDF-1685972112658)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20230605111700211.png)]
客户端对服务器发送请求消息包含的内容是“对什么”和“进行怎样的操作”两个部分。对什么的目标叫做URI,例如“/dir1/file1.html”,“/dir1/program1.cgi”等。也可以直接使用“http:”开头的 URL来作为 URI。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-79vmuaoF-1685972112658)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20230605112001537.png)]
服务器完成工作后会返回一个状态码。HTTP的整个工作完成。
get和post方法是向服务器读取和发送消息。
PUT和DELETE方法修改或删除服务器上的文件。
HTTP消息
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mE4xy1zn-1685972112658)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20230605112700534.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2jmFEtMT-1685972112659)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20230605112903736.png)]
请求消息的第一行称为请求行,包含方法。写好方法之后,加一个空格,然后写 URI.末尾需要写上 HTTP 的版本号.
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rFxThqkm-1685972112659)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20230605113115857.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AbIVFwDm-1685972112659)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20230605113152610.png)]
第二行开始为消息头。消息头的规格中定义了很多项目,如日期、客户端支持的
数据类型、语言、压缩格式、客户端和服务器的软件名称和版本、数据有效期和最后更新时间等.消息头中的内容
随着浏览器类型、版本号、设置等的不同而不同,大多数情况下消息头的长度为几行到十几行不等。
再添加一个空行,写上需要发送的数据,这一部分为消息体,get方法消息体不需要写任何东西。使用 POST 方法将表单中填写的信息写在消息体中。请求消息的生成操作全部完成。
每条请求消息中只能写 1 个 URI每次只能获取 1 个文件,如果需要获取多个文件须对每个文件单独发送 1 条请求。比如 1 个网页中包含 3 张图片,那么获取网页加上获取图片,一共需要向 Web 服务器发送 4 条请求。请求消息示例
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EksvVOac-1685972112659)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20230605120000753.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KCtScNKe-1685972112660)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20230605120040388.png)]
向 DNS 服务器查询 Web 服务器的 IP 地址
生成消息后,要发给服务器,此时就要去DNS服务器查询该域名对应的IP地址。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4FKg7K2Q-1685972112660)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20230605120239668.png)]
局域网都是基于 TCP/IP 的思路来设计的。TCP/IP 的结构如图 1.8 所示。小的子网通过路由器组成网络。每个子网对应一个号,这个号再这个网络中唯一,子网会给其中的每个计算机再分配一个号,再该子网中唯一。有了IP地址,我们就可以知道目标是哪个网络中的哪个子网中的哪个计算机或者服务器。
发送者发送消息时,消息首先经过该子网中的集线器转发到最近的路由器,这个路由器会把消息再转发给下一个路由器。
实际IP地址时32比特的数字,按照8比特(bit)(1字节)为一组分为4组,子网掩码为1的部分表示网络号,为0的部分表示主机号。主机号部分全部为 0 代表整个子网,主机号部分全部为 1 代表向子网上所有设备发送包,即广播。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vUEziqzs-1685972112660)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20230605121303369.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1ajeyZr8-1685972112660)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20230605121432012.png)]
TCP/IP 网络通过 IP 地址来确定通信对象,就和打电话一样。要知道某个人的电话号码,不能只知道名字。此时DNS服务器就派上用场了。既然我们的浏览器可以向DNS查询IP地址,就说明我们的计算机上一定有相应的 DNS 客户端。成为DNS解析器,实际上为一段程序,包含在操作系统中的Scoket库中。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yxbWvi0Z-1685972112661)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20230605130418740.png)]
全世界DNS服务器的大接力
DNS接受客户端的消息再返回响应。
查询消息包含3种信息。
a.域名
服务器、邮件服务器的名称
b.Class
Class用来识别网络信息的,已经淘汰
c.记录类型
表示域名对应何种类型的记录。例如,当类型为 A 时,表示域名对应的是 IP 地址;当类型为 MX 时,表示域名对应的是邮件服务器。
如果要查询 www.lab.glasscom.com 这个域名对应的 IP 地址,客户端会向 DNS 服务器发送包含以下信息的查询消息。
(a)域名 = www.lab.glasscom.com
(b)Class = IN
(c)记录类型 = A
DNS就会从服务器中查找符合条件的IP地址返回。
域名的层次结构
全球有很多域名信息,不可能保存在一台DNS服务器。
信息按照层次结构分布在不同的DNS服务器,例如www.lab.glasscom.com 这个域名如果按照公司
里的组织结构来说,大概就是“com 事业集团 glasscom 部 lab 科的 www”这样。com 域的下一层是glasscom 域,再下一层是 lab 域,再下面才是 www 这个名字。其中,一个域存放在一个DNS服务器里,当然,一个DNS服务器不可能只存放一个域的信息。
我们在域的下面创建下级域,然后再将他分配给各个事业集团。比如,假设公司的域
为 example.co.jp, 我 们 可 以 在 这 个 域 的 下 面 创 建 两 个 子 域, 即sub1.example.co.jp 和 sub2.example.co.jp,然后就可以将这两个下级域分配给不同的事业集团来使用。
互联网中的域也是一样,通过创建下级的域来分配给不同的国家、公司和组织使用。比如 www.nikkeibp.co.jp 这个域名,最上层的 jp 代表分配给日本这个国家的域;下一层的 co 是日本国内进行分类的域,代表公司;再下层的nikkeibp 就是分配给某个公司的域;最下层的 www 就是服务器的名称。
在DNS服务器找到所需信息,关键就是我们查找的web服务器归哪一个DNS服务器管。
我们把管理下级域的 DNS 服务器的 IP 地址注
册到它们上级 DNS 服务器中,然后上级 DNS 服务器的 IP 地址再注册到更上一级的 DNS 服务器中,以此类推。
负责管理 lab.glasscom.com 这个域的 DNS 服务器的 IP 地址需要注册到 glasscom.com 域的 DNS服务器中,而 glasscom.com 域的 DNS 服务器的 IP 地址又需要注册到 com域的 DNS 服务器中。这样,我们就可以通过上级 DNS 服务器查询出下级DNS 服务器的 IP 地址,也就可以向下级 DNS 服务器发送查询请求了。其实com,jp不是顶级域,他们上面还有根域用.表示,常省略不写
过程
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OC0dvRXU-1685972112661)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20230605165404509.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VKsjrhUg-1685972112661)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20230605170642894.png)]
首先访问最近的一台DNS服务器,假设要查询 www.lab.glasscom.com.图 1.16(①).最近一台没有这个服务器信息,就会转发给根域服务器,根域收到了,也没有,但是根域知道这个是属于com域服务器管的,就会让他去com域找,但是com域也没有,但是com域知道是glasscom域服务器管的,就会去glasscom域服务器查找。然后glasscom域服务器就会去www域服务器查找,找到了,返回。
好比去找一个人的信息,去人事管理局查找,他告诉你是哪个区的,再去区里找,区里再告诉你是哪个街道的,街道的再告诉你是哪个公司的,就找到了。但是实际上一个DNS服务器管理多个域名,中上级域和下级域有可能共享同一
台 DNS 服务器。
DNS 服务器有一个缓存 功能,可以记住之前查询过的域名。
并且,当要查询的域名不存在时,“不存在”这一响应结果也会被缓存。这样,当下次查询这个不存在的域名时,也可以快速响应。
委托协议栈发送消息
找到IP地址后,就可以委托协议栈向目标发送HTTP消息了,HTTP消息实际是一种数字信息,收发数字信息这一操作,不只局限于浏览器,各种网络应用程序都适合这一套操作。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TijvVdOU-1685972112662)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20230605172130757.png)]
使用 Socket 库来收发数据的操作过程如图 1.17 所示。好比接收方发送方之间有一个管道。首先要建立这一条管道,管道出入口称为套接字.
(1)创建套接字(创建套接字阶段)
(2)将管道连接到服务器端的套接字上(连接阶段)
(3)收发数据(通信阶段)
(4)断开管道并删除套接字(断开阶段)
操作都是由协议栈通过调用Socket库中的组件来执行。
创建套接字
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ImNnEAP6-1685972112662)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20230605195407380.png)]
客户端调用 Socket 库中的 socket 程序组件创建套接字,套接字创建完成后,协议栈会返回一个描述符,应用程序会将收到的描述符存放在内存中。用于识别不同的套接字。
然后委托协议栈就需要将客户端创建的套接字与服务器那边的套接字连接起来。调用Socket的connect。需要指定描述符、服务器 IP 地址和端口号这 3 个参数(网络编程已说)。
传递消息调用write需要指定描述符和发送数据(图 1.18 ③),然后协议栈就会将数据发送
到服务器。由于套接字中已经保存了已连接的通信对象的相关信息,所以只要通过描述符指定套接字,就可以识别出通信对象。
收消息的操作是通过 Socket 库中的 read 程序组件委托协议栈来完成的(图 1.18 ③’)。调用read 时需要指定用于存放接收到的响应消息的内存地址,这一内存地址称为接收缓冲区。
接下来,我们需
要调用 Socket 库的 close 程序组件进入断开阶段(图 1.18 ④)。最终,连接在套接字之间的管道会被断开,套接字本身也会被删除。
HTTP 协议规定,Web 服务器发送完响应消息之后,应该主动执行断开操作,因此 Web 服务器会首先调用close 来断开连接。然后再是客户端。
相关文章:

《网络是怎样连接的》(一)
第一章web浏览器 简介 首先输入网址URL,浏览器进行解析,将我们需要哪些数据告诉服务器。浏览器向服务器发送消息,必须告诉操作系统的接收方的IP地址,所以浏览器先查出web服务器的IP地址,向DNS服务器查询域名对应的IP…...

Flink on yarn任务日志怎么看
1、jobmanager日志 在yarn上可以直接看 2、taskmanager日志 在flink的webui中可以看,但是flink任务失败后,webui就不存在了,那怎么看? 这是jobmanager的地址 hadoop02:19888/jobhistory/logs/hadoop02:45454/container_e03_16844…...

二次元的登录界面
今天还是继续坚持写博客,然后今天给大家带来比较具有二次元风格的登录界面,也只是用html和css来写的,大家可以来看看! 个人名片: 😊作者简介:一名大一在校生,web前端开发专业 &…...

2. 量化多因子数据清洗——去极值、标准化、正交化、中性化
一、去极值 1. MAD MAD(mean absolute deviation)又称为绝对值差中位数法,是一种先需计算所有因子与平均值之间的距离总和来检测离群值的方法. def extreme_MAD(rawdata, n): median rawdata.quantile(0.5) # 找出中位数 new_median (abs(…...

皮卡丘反射型XSS
1.反射型xss(get) 进入反射型xss(get)的关卡,我们可以看到如下页面 先输入合法数据查看情况,例如输入“kobe” 再随便输入一个,比如我舍友的外号“xunlei”,“666”,嘿嘿嘿 F12查看源代码,发现你输入的数…...

巧计口诀-软件测试的生命周期,黑盒测试设计方法
目录 1。口诀 2。黑盒设计方法适用场合 3。黑盒设计方法详解 3.1。等价类法 3.2。 边界值法 3.3。判定表法 3.4。因果表 3.5。状态迁移图 3.6。场景法 3.7。正交实验法 3.8。错误推断法 1。口诀 又到了找工作的日子,背诵这些基本知识和概念又开始了。我找…...

Android系统的Ashmem匿名共享内存系统分析(1)- Ashmem驱动
声明 其实对于Android系统的Ashmem匿名共享内存系统早就有分析的想法,记得2019年6、7月份Mr.Deng离职期间约定一起对其进行研究的,但因为我个人问题没能实施这个计划,留下些许遗憾…文中参考了很多书籍及博客内容,可能涉及的比较…...

Redis 事务详细介绍
事务 注意:Redis单条命令是保证原子性的;但是事务不保证原子性! Redis事务没有隔离级别的概念,所有的命令在事务中,并没有直接被执行,只有发起执行命令时才执行 Redis事务本质:一组命令的集合&…...

2023-5-29第二十九天
consult咨询,查阅,商讨 specialize专门从事,专攻 inspect检查 pattern图案,方式 optimize使最优化 ensemble整体,全体 subscript下标 subscribe签名 sector行业,部门 precedence优先,优…...

【第三方库】PHP实现创建PDF文件和编辑PDF文件
目录 引入Setasign/fpdf、Setasign/fpdi 解决写入中文时乱码问题 1.下载并放置中文语言包(他人封装):https://github.com/DCgithub21/cd_FPDF 2.编写并运行生成字体文件的程序文件(addFont.php) 中文字体举例&…...

线程的回收及内存演示
ps -elf|grep mthread 查看进程和线程 top -p 6513 查看内存 一、线程的回收 使用pthread_join 函数: #include <pthread.h> int pthread_join(pthread_t thread, void **retval); 注意:pthread_join 是阻塞函数,如果回收的线…...

高精度倾角传感器测量原理
高精度倾角传感器测量原理技术参数 1.性能参数 测量范围:0~30 测量精度:0.06 分 辨 率:0.0001 测量方向:X,Y 时间漂移:0.08/月 更新时间:30ms 上电启动时间:0.5s 2.电…...

Android 12 init流程分析
前言 刚开始接触需要了解的概念理解过程遇到了什么问题代码的位置和流程分析如何分析和调试遇到的问题 基本的概念 .rc 文件 这个文件在Android framework 中服务相关代码可以看到。类似surfaceflinger.rc 、mediaserver.rc等等。 在这些rc里面定义了某一个service࿰…...

【Python小技巧】Python操控Chrome浏览器实现网页打开、切换、关闭(送独家Chrome操作打包类源码、Chrome浏览器Cookie在哪里?)
文章目录 前言一、什么时候需要用Python控制浏览器?二、下载Chrome浏览器驱动文件1. 安装Chrome浏览器并查看版本2. 下载浏览器驱动文件3. 解压到python编译器目录(python.exe所在目录) 三、Python控制Chrome浏览器(附源代码&…...

数据在内存中的存储
目录 一、数据类型的介绍 1.C语言基本内置类型 2.类型基本归类 1.整形 2.浮点型 3.构造类型 4.指针类型 二、整形在内存中的存储 三、浮点数在内次中的存储 1.存储形式 2.对M、E的特殊规定 (1)对M的特殊规定 (2)对E的…...

Rust in Action笔记 第三章 复合数据类型
通过#[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZI50wIh1-1685693144796)(null)]),不带感叹号的#[allow]仅为下一行代码提供属性,属性有多种分类,文中出现的allow属性称为诊断属性(Diag…...

算法基础学习笔记——⑬高斯消元\组合计数\容斥原理
✨博主:命运之光 ✨专栏:算法基础学习 目录 ✨高斯消元 ✨组合计数 🍓通过预处理逆元的方式求组合数: 🍓Lucas定理: 🍓分解质因数法求组合数: 前言:算法学习笔记记录日常分享,需…...

渗透测试辅助工具箱
0x01 说明 渗透测试辅助工具箱 运行条件:jdk8 双击即可运行 反弹shell,命令生成器,自动编码,输入对应IP端口即可,实现一劳永逸,集成一些小工具,辅助渗透,提高效率 输入框说明 L…...

chatgpt赋能python:Python后退命令:如何让你的程序退回到之前的状态
Python后退命令:如何让你的程序退回到之前的状态 Python是一种高级编程语言,因其易读易懂而闻名于世。Python中有很多命令用于编写程序,其中一项重要的命令是后退命令。本文将介绍Python后退命令的使用方法,并为您提供详细的步骤…...

OJ练习第127题——统计范围内的元音字符串数
统计范围内的元音字符串数 力扣链接:2559. 统计范围内的元音字符串数 题目描述 给你一个下标从 0 开始的字符串数组 words 以及一个二维整数数组 queries 。 每个查询 queries[i] [li, ri] 会要求我们统计在 words 中下标在 li 到 ri 范围内(包含 这…...

图片优化: CssSprites与Base64编码
文章目录 1 css sprites1.1 CSS Sprites是什么1.2 为什么需要css sprites1.3 优势1.4 使用原理1.5 DEMO 2 图片Base64编码 1 css sprites 1.1 CSS Sprites是什么 CSS Sprites是一种网页图片应用处理方式。 又被解释为: CSS精灵CSS图像拼合CSS贴图定位CSS图片精灵…...

JavaScript中的Map、WeakMap和Object的区别
Map Map是一种新的数据结构,它允许使用任何数据类型(包括对象和基本数据类型)作为键。 Map的一些特性包括: 保持键的插入顺序:当遍历Map时,键值对会按照插入顺序返回。键可以是任意类型:与Obj…...

华为OD机试之打印机队列(Java源码)
打印机队列 题目描述 有5台打印机打印文件,每台打印机有自己的待打印队列。 因为打印的文件内容有轻重缓急之分,所以队列中的文件有1~10不同的代先级,其中 数字越大优先级越高 打印机会从自己的待打印队列中选择优先级最高的文件来打印。 如…...

分享一个国内免费的ChatGPT网站,手机电脑通用,免费无限制,支持AI绘画
背景 ChatGPT作为一种基于人工智能技术的自然语言处理工具,近期的热度直接沸腾🌋。 作为一个AI爱好者,翻遍了各大基于ChatGPT的网站,终于找到一个免费!免登陆!手机电脑通用!国内可直接对话的C…...

【面向对象编程1】——类和对象——如桃花来
目录索引 面向过程和面向对象的区别:面向过程:面向对象:总结: 类和对象:定义类:语法: 创建对象:实例演示: 魔法方法:__init __方法:__ del __方法…...

chat聊天系统消息消费时遇到的问题及优化思路(二)
1、前言 考虑下面几个条件下如何提升kafka的消费速度 消息要求严格有序,如chat聊天消息业务处理速度慢,如处理一条数据需要100ms分片不合理,如有的分区很闲,有的分区消息数量积压 2、解决方案 1、顺序问题 关于消息消费时存在…...

js正则中的match()
在前端开发中,正则表达式是一大利器。所以我们这次就来讨论下match()方法。 match本身是JavaScript语言中字符串对象的一个方法,该方法的签名是 match([string] | [RegExp]) 它的参数既可以是一个字符串,也可以是一个正则表达式。该方法绝…...

Apache 配置和应用
目录 构建虚拟 Web 主机 Options指令解释 Options指令常用选项 AllowOverride指令解释: 地址限制策略: httpd服务支持的虚拟主机类型包括以下三种: 基于域名的虚拟主机 1.为虚拟主机提供域名解析 2.为虚拟主机准备网页文档 3.添加虚拟…...

实现PyTorch/ONNX自定义节点操作的TensorRT部署
参考一 下面是基本步骤: 加载训练好的bev transformer网络权重参数: import torch from model import Modelmodel Model() model.load_state_dict(torch.load("path/to/weights"))定义新的自定义操作: import torch from torc…...

Shamir 秘密共享、GMW和BGW方案
一、Shamir秘密共享 Shamir秘密共享方案是一种将秘密拆分成多份并分配给多个参与者保存,只有在满足特定条件下才能恢复原始秘密的密码学方案。它具有良好的容错性、加法同态性和无条件安全性等特点。 具体地,Shamir秘密共享方案可以概括为以下步骤&…...