网络知识一:Web浏览器
在浏览器中输入网址,到屏幕上显示出网页的内容,在这个只有短短几秒的过程中,很多硬件和软件都在各自的岗位上相互配合完成了一系列的工作。
设计到的部分有:
- Web浏览器
- 协议栈、网卡
- 集线器、交换机、路由器
- 接入网,网络运营商(略)
- 防火墙、缓存服务器
- Web服务器
大部分的内容是来源于《网络是如何连接的》,其中会加入自己的一些理解,以及工作中的遇到的一些问题。
第一部分: Web浏览器
- web浏览器的作用主要是生成HTTP请求消息
- 向DNS服务器查询Web服务器的IP地址
- 全世界的DNS服务器大接力
- 委托操作系统的协议栈发送消息
1、生成HTTP消息
Q1: 当我们访问https://www.baidu.com/的时候,我们是访问什么?
image.png访问项目根目录下的index.html 或default.html
Q2: HTTP消息的组成部分
浏览器的作用主要是生成HTTP消息。
- 对什么(URI)
- 进行怎样的操作(方法:GET、POST等)
Q3: 获取多个图片多个请求?
腾讯门户网站.png因为每条请求消息只能写一个URI,所以每次最多只能获取一个文件,如果要获取多个文件,就需要针对每个文件单独发送一条请求。
Q4: 浏览器可以发送网络请求吗?
生成HTTP消息后,需要委托操作系统将消息发送给Web服务器。尽管浏览器有解析网址,并生成HTTP消息的功能,但它本身并不具备将消息发送到网络中的功能。
Q5: 什么是子网?什么是网络?
image.png互联网和公司内部的局域网都是基于TCP/IP的思路来设计的。TCP和IP的结构如下图所示,就是有一些小的子网,通过
路由器
连接起来组成一个大的网络。这里的子网可以理解为用集线器
连接起来的几台计算机,我们将他们看成一个单位,称为子网,将子网通过路由器连接起来,就形成了网络。
Q6: IP地址?
在网络中所有设备都会被分配一个地址,这个地址就相当于现实中的“xx号xx室”, 其中“号”对应的就是分配给整个子网的,而室是分配给子网中的计算机的,这就是网络中的地址。
- “号” 对应的是
网络号
- “室” 对应的是
主机号
这个地址的整体称为IP地址。通过IP地址,我们可以判断出访问对象服务器的位置,进而将消息发送给服务器。
Q7:消息的发送过程?
- 发送者发出的消息首先经过
子网中的集线器
- 转发到距离发送者
最近的路由器
上, - 路由器会根据
目的地
判断下一个路由器的位置 - 消息转发的下一个路由器(即消息再次经过子网中的集线器被转发到下一个路由器)
- 前面的过程不断重复,消息就被传送到了目的地。
Q8:实际的IP地址?子网掩码怎么来的?
我们知道IP地址是有网络号和主机号构成,但是我们常见的IP地址一般类似于为192.168.1.103这样的,仅凭借这个一串儿数字,我们无法区分那一部分是网络号,那一部分是主机号。
在IP地址的规则里,网络号和主机号总共是32比特,但两部分的具体结构是不固定的。在组件网络时,用户可以自行决定它们的分配关系,因此我们还需要另外的附加信息来表示IP地址的内部结构。这一个附加信息称为子网掩码
说明:子网掩码位1的部分说明是网络号,子网掩码为0的部分说明是主机号,即IP地址为上图中IP地址为10.1.2.3的网络号为 10.1.2 主机号为3
Note: 主机号部分全部为0或者全部为1代表的两种特殊的含义
- 全部为0: 代表整个子网,而不是子网中的某台设备
- 全部为1: 代表向子网上所有设备发送包,即广播📢
Q9: 域名和IP地址并用的理由?
域名是给人使用的,而IP地址是给路由器使用的。如果根据域名来判断数据要发送的位置:IP地址的长度仅为32比特,即四个字节;相比较来说域名最短也要几十个字节,最长甚至可以达到255个字节。使用IP地址只需要处理4字节的数字,而使用域名则需要处理几十个甚至255个字节的字符,这增加了路由器的负担,传送数据也会发费更长的时间。为了填补两者之间的障碍,需要一个机制
可以通过域名来查询IP地址,或者通过IP地址来查询域名,这样机器和人都无需做出牺牲的前提下完美解决问题,这个机制就是DNS。
Q10: 查询IP地址
image.png
DNS解析器实际上是一段程序,它包含在操作系统中的Socket库中,Socket库其中包含的组件可以让其他的应用程序调用操作系统的网络功能,而解析器就是和库中的其中一种程序组件。
Q11:全世界的DNS服务器大接力
所有的web服务器的IP地址信息,放在一台DNS服务器是不可能的。将信息分布保存在多台DNS服务器中,这些DNS服务器相互接力配合,从而查找出要查询的信息。
DNS服务器中的信息是按照域名分层次的结构来保存的,可以类比公司的集团、部门、科室。比如:www.lab.glasscom.com。大概就是:‘com事业集团glasscom部lab科的www’。域名使用英文句点分隔,域名越靠右,代表其层级越高。
其中相当于一个层级的部分称为域
.即com域的下一层是glasscom域, 再下一层是lab域,再下面才是www这个名字。
通过创建下级域的方式分配给不同的集团或公司使用。
比如:qq.com
weixin.qq.com(微信)
y.qq.com(qq音乐)
www.lab.glasscom.com.
根域
: 域名最后的.
代表根域,不过一般域名不写最后的那个句点,因此根域往往被忽略。根域的DNS服务器中保存着com、cn等DNS服务器的信息。由于上级DNS服务器保存着所有下级DNS服务器的信息,我们可以根据根域一层一层向下查找任意域的DNS服务器。
既然找到根域的DNS服务器就可以向下查找了? 那怎么找到根域的DNS服务器呢? 这是需要做的另一项重要工作,就是将根域DNS服务器信息保存到存在互联网中所有的DNS服务器中
,这样任何DNS服务器就可以找到并访问根域DNS服务器了。
- 客户端找到任意一台DNS服务器M
- DNS服务器M找到根服务器X
- 根服务器在根据域名,一层一层查找到位于下层的某台目标DNS服务器
Note: 分配给根域DNS服务器的IP地址在全世界仅有13个。(其实服务器的数量是很多的...)
image.pngQ12: 通过缓存可以加快DNS服务器的响应。
DNS服务器有缓存功能,会将之前查询过的域名记录下来,下次再去查询IP的时候,可以从缓存中直接获取IP地址。需要注意的是信息被缓存后,原本的注册信息可能会发生变化,这时候缓存中的信息就不正确了,因此DNS服务器中保存的信息都设置有一个有效期,当缓存中的信息超过有效期后,数据就会从缓存中删除。