《网络是怎样连接的》(一)
第一章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 范围内(包含 这…...
日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...
synchronized 学习
学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…...
【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...
Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务
通过akshare库,获取股票数据,并生成TabPFN这个模型 可以识别、处理的格式,写一个完整的预处理示例,并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务,进行预测并输…...
2.Vue编写一个app
1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...
【AI学习】三、AI算法中的向量
在人工智能(AI)算法中,向量(Vector)是一种将现实世界中的数据(如图像、文本、音频等)转化为计算机可处理的数值型特征表示的工具。它是连接人类认知(如语义、视觉特征)与…...
解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错
出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...
项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)
Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...
Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)
引言 在人工智能飞速发展的今天,大语言模型(Large Language Models, LLMs)已成为技术领域的焦点。从智能写作到代码生成,LLM 的应用场景不断扩展,深刻改变了我们的工作和生活方式。然而,理解这些模型的内部…...
