《网络是怎样连接的》(一)
第一章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 范围内(包含 这…...
C++初阶-list的底层
目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...
MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例
一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...
从零实现STL哈希容器:unordered_map/unordered_set封装详解
本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说,直接开始吧! 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...
佰力博科技与您探讨热释电测量的几种方法
热释电的测量主要涉及热释电系数的测定,这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中,积分电荷法最为常用,其原理是通过测量在电容器上积累的热释电电荷,从而确定热释电系数…...
接口自动化测试:HttpRunner基础
相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具,支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议,涵盖接口测试、性能测试、数字体验监测等测试类型…...
区块链技术概述
区块链技术是一种去中心化、分布式账本技术,通过密码学、共识机制和智能合约等核心组件,实现数据不可篡改、透明可追溯的系统。 一、核心技术 1. 去中心化 特点:数据存储在网络中的多个节点(计算机),而非…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现指南针功能
指南针功能是许多位置服务应用的基础功能之一。下面我将详细介绍如何在HarmonyOS 5中使用DevEco Studio实现指南针功能。 1. 开发环境准备 确保已安装DevEco Studio 3.1或更高版本确保项目使用的是HarmonyOS 5.0 SDK在项目的module.json5中配置必要的权限 2. 权限配置 在mo…...
路由基础-路由表
本篇将会向读者介绍路由的基本概念。 前言 在一个典型的数据通信网络中,往往存在多个不同的IP网段,数据在不同的IP网段之间交互是需要借助三层设备的,这些设备具备路由能力,能够实现数据的跨网段转发。 路由是数据通信网络中最基…...
从零手写Java版本的LSM Tree (一):LSM Tree 概述
🔥 推荐一个高质量的Java LSM Tree开源项目! https://github.com/brianxiadong/java-lsm-tree java-lsm-tree 是一个从零实现的Log-Structured Merge Tree,专为高并发写入场景设计。 核心亮点: ⚡ 极致性能:写入速度超…...
