网络是怎样连接的?(一)

85 阅读8分钟

前言

本系列主题是网络说网络之前先说为什么要聊这个话题

普通人听到网络互联网这两个熟词 都可以肯定他两个肯定有亲密的关系,但是其中感觉玄之又玄,又不太理解。

互联网 那么有好奇的(宝ᴗ宝)就问了

互联网、联网~ 我就好奇到底咋连接的这个网?哎~ 那这就引出了网络,这个系列就符合你的胃口。

抖音为啥一刷新就有视频跑到你手机上?咋搞的?

淘宝已下单为啥商家就知道了?咋搞的?

保底收获希望这个系列完成后,我自己能够减小网络这方面的盲点

受众人群

计算机、网络爱好者及相关从业人员阅读

计算机行业内的可以查漏补缺一下,我相信一定有让你 噢原来是这样的感觉 网络爱好者可以了解一下,我相信一定有让你 噢原来是这样的感觉

总结来讲就是一个看完了就会有 噢~原来是这样的感觉

本系列想聊的方向

  1. Web浏览器
  2. 协议栈、网卡
  3. 集线器、交换机、路由器
  4. 接入网、网络运营商
  5. 防火墙、缓存服务器
  6. Web服务器
  7. 等等~~~~

故事从哪里开始聊?

从打开浏览器 输入www.baidu.com/后 敲击回车开始

浏览器

介绍浏览器的工作方式之前,让我们先来介绍一下网址。网址,准确来说应该叫URL

URL :Uniform Resource Locator,统一资源定位符

浏览器是一个具备多种客户端功能综合性客户端软件,因此它需要一些东西来判断应该使用其中哪种功能来访问相应的数据,而各种不同的URL就是用来干这个的,比如访问Web服务器时用http:,而访问FTP服务器时用ftp:,还有一些不常见的

尽管URL有各种不同的写法,但它们有一个共同点,那就是URL开头的文字,即http:、ftp:、file:、mailto:这部分文字都表示浏览器应当使用的访问方法。

比如当访问Web服务器时应该使用HTTP协议,而访问FTP服务器时则应该使用FTP协议。因此,我们可以把这部分理解为访问时使用的协议类型。 尽管后面部分的写法各不相同,但开头部分的内容决定了后面部分的写法,因此并不会造成混乱。关于URL就先交代到这里。

浏览器解析

浏览器要做的第一步工作就是对URL进行解析,从而生成发送给Web服务器的请求消息。

省略文件名

http://www.baidu.com/dir/

大多数情况下是index.html或者default.htm之类的文件名。服务器就会访问/dir/index.html或者/dir/default.htm。

诡异路径

http://www.baidu.com/dir

由于末尾没有/,所以dir应该理解为文件名才对。但实际上,很多人并没有正确理解省略文件名的规则,经常会把目录末尾的“/”也给省略了。因此,或许我们不应该总是将dir作为文件名来处理。一般来说,这种情况会按照下面的惯例进行处理:如果Web服务器上存在名为dir的文件,则将dir作为文件名来处理;如果存在名为dir的目录,则将dir作为目录名来处理

浏览器真的可以发请求吗?

不可以

生成HTTP消息之后,接下来我们需要委托操作系统将消息发送给Web服务器。尽管浏览器能够解析网址并生成HTTP消息,但它本身并不具备将消息发送到网络中的功能,因此这一功能需要委托操作系统来实现。在进行这一操作时,我们还有一个工作需要完成,那就是查询网址中服务器域名对应的IP地址。

域名和IP地址并用的理由

TCP/IP网络是通过IP地址来确定通信对象的,因此不知道IP地址就无法将消息发送给对方,这和我们打电话的时候必须要知道对方的电话号码是一个道理。因此,在委托操作系统发送消息时,必须要先查询好对方的IP地址。

大聪明小李可能会问既然如此,那么在网址中不写服务器的名字,直接写IP地址不就好了吗?实际上,如果用IP地址来代替服务器名称也是能够正常工作的。然而,就像你很难记住电话号码一样,要记住一串由数字组成的IP地址也非常困难。 比如

www.baidu.com 跟 110.242.68.3  哪个好记?

大聪明小李又问了 既然如此,那干脆不要用IP地址,而是用名称来确定通信对象不就好了吗?

可以实现,不过从运行效率上来看,这并不能算是一个好主意。互联网中存在无数的路由器,它们之间相互配合,根据IP地址来判断应该把数据传送到什么地方。那么如果我们不用IP地址而是改用名称会怎么样呢?IP地址的长度为32比特,也就是4字节,相对地,域名最短也要几十个字节,最长甚至可以达到255字节。换句话说,使用IP地址只需要处理4字节的数字,而域名则需要处理几十个到255个字节的字符,这增加了路由器的负担,传送数据也会花费更长的时间于是,现在我们使用的方案是让人来使用名称,让路由器来使用IP地址。为了填补两者之间的障碍,需要有一个机制能够通过名称来查询IP地址,或者通过IP地址来查询名称,这样就能够在人和机器双方都不做出牺牲的前提下完美地解决问题。这个机制就是DNS

如何通过域名查询IP的能?

查询IP地址的方法非常简单,只要询问最近的DNS服务器www.baidu.com的IP地址是什么?DNS服务器就会告诉你。

操作系统中有一个的Socket库,通过调用gethostbyname方法来拿到实际IP 的值

小节

总体来说(不考虑缓存的话)

输入www.baidu.com回车后

浏览器->URL解析->调用操作系统中Socket库的gethostbyname方法来拿到实际IP

聊到这里还有一个问题,Socket库怎么知道DNS服务器的IP?

是通过这里设置的,那么DNS是如何知道域名需要的IP的?

DNS

全世界只有13个顶级域类似于公司一样划分不同部门的方式划分域

你->电脑->域名->依据上图的配置找到最近的DNS服务器->找到根域==找到工商局了

就好像你要找张三(域名)这个人的身份证号(IP)

先找到最近的工商局(根域)->公司名(下级域名)->找到部门(下级域名)->找到小组(下级域名)->找到张三->拿到身份证

这样,我们就可以看清楚浏览器调用gethostbyname查询Web服务器地址的全貌,这也就是向DNS服务器查询IP地址的实际过程。

But

真实的互联网中不会是这种方式,通过缓存加快DNS服务器的响应

  1. 一台DNS服务器可以管理多个域的信息
  2. 有时候并不需要从最上级的根域开始查找,因为DNS服务器有一个缓存功能,可以记住之前查询过的域名。如果要查询的域名和相关信息已经在缓存中,那么就可以直接返回响应,接下来的查询可以从缓存的位置开始向下进行。相比每次都从根域找起来说,缓存可以减少查询所需的时间。
  3. 当要查询的域名不存在时,不存在这一响应结果也会被缓存。这样,当下次查询这个不存在的域名时,也可以快速响应

这个缓存机制中有一点需要注意,那就是信息被缓存后,原本的注册信息可能会发生改变,这时缓存中的信息就有可能是不正确的。因此,DNS服务器中保存的信息都设置有一个有效期,当缓存中的信息超过有效期后,数据就会从缓存中删除。而且,在对查询进行响应时,DNS服务器也会告知客户端这一响应的结果是来自缓存中还是来自负责管理该域名的DNS服务器。

完结撒花✿✿ヽ(°▽°)ノ✿