带你系统了解从浏览器中输入网址到显示出网页内容其间计算机网络经历了哪些过程

前言

最近看完了《网络是怎样连接的》这本书,我认为读书最有效率的方法就是读完之后,自己能将书中的内容串讲一遍,所以在此根据书中作者的划分的文章结构,自己将从浏览器中输入网址到显示出网页内容其间经历了哪些过程详细梳理了一遍。

当然网络是一个巨大而复杂的系统,你不可能仅靠一篇文章就可以领悟网络的工作机制,如果要想真正系统地了解它,那么还是需要去啃大部头——《计算机网络》。。。
在这里插入图片描述

网络模型

在网络包旅程开始之前,我们先来简单了解一下网络模型。计算机网络是指由通信线路互相连接的许多自主工作的计算机构成的集合体,各个部件之间以何种规则进行通信,就是网络模型需要解决的问题。网络模型我们一般是指OSI七层参考模型和TCP/IP四层参考模型。其中OSI七层参考模型也称为学术派标准,而TCP/IP四层参考模型称为工业标准。TCP/IP参考模型在介绍时我们通常分为5层来叙述。
在这里插入图片描述
OSI参考模型
OSI模型(Open System Interconnection Reference Model,缩写为OSI),全名“开放式系统互联通信参考模型”,是一个试图使各种计算机在全世界范围内互联为网络的标准框架。1983年,国际标准组织(ISO)发布了著名的ISO/IEC 7498标准,把网络通信的工作分为7层,分别是物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。

TCP/IP参考模型
TCP/IP参考模型是计算机网络的祖父ARPANET和其后继的因特网使用的参考模型。TCP/IP协议是一组用于实现网络互连的通信协议。Internet网络体系结构以TCP/IP为核心。基于TCP/IP的参考模型将协议分成四个层次,它们分别是:网络访问层、网际互联层(主机到主机)、传输层、和应用层。

共同点
1、OSI参考模型和TCP/IP参考模型都采用了层次结构的概念。
2、都能够提供面向连接和无连接两种通信服务机制。

不同点
1、OSI模型是在协议开发前设计的,具有通用性。TCP/IP是先有协议集然后建立模型,不适用于非TCP/IP网络。所以OSI参考模型的抽象能力高,适合与描述各种网络。
2、TCP/IP参考模型的网络接口层实际上并没有真正的定义,只是一些概念性的描述。而OSI参考模型不仅分了两层,而且每一层的功能都很详尽,甚至在数据链路层又分出一个介质访问子层,专门解决局域网的共享介质问题。

网络包的旅程

在这里插入图片描述

一、解析网址发送请求消息

了解了网络模型我们开始旅程吧,首先,我们在浏览器中输入一个网址例如百度,网址准确来说应该叫URL(统一资源定位符),根据访问目标的不同,URL的写法也会不同。
在这里插入图片描述
浏览器的第一步工作就是要解析这个网址,然后生成发送给Web服务器的HTTP请求消息访问Web服务器时要求使用HTTP协议

HTTP协议定义了客户端和服务器之间交互的信息内容和步骤,其基本思路非常简单。首先,客户端会向服务器发送请求消息。请求消息中包含的内容是“对什么”和“进行怎样的操作”两个部分。收到请求消息之后,Web服务器会对其中的内容进行解析,判断“对什么”,“进行怎样的操作”并根据这些要求来完成自己的工作,然后将结果存放在响应消息中。

二、查询Web服务器的IP地址,委托操作系统收发数据

尽管浏览器能够解析网址并生成HTTP消息,但它本身并不具备将消息发送到网络中的功能,发送消息的功能对所有的应用程序来说都是通用的,因此让操作系统来实现这一功能,其他应用程序委托操作系统来进行操作,这是一个比较合理的做法。

在委托操作系统发送消息时,必须要提供的不是通信对象的域名,而是它的IP地址。因此在生成HTTP消息之后,先要根据域名查询IP地址。计算机的IP地址类似于我们人的身份证号一样,通过身份证号我们可以轻易查找到某个人,IP地址同理。

那么去哪查呢?我们可以通过DNS(域名服务系统)机制,你只要访问离你计算机最近的DNS服务器查询该域名的IP地址是什么,DNS服务器就会告诉你该域名的IP地址。查询操作需要使用解析器,它实际上是一段程序,包含在操作系统的Socket库中(库可以理解为一堆通用程序组件的集合Socket库是用于调用网络功能的程序组件集合,其中包含的组件可以让其他的应用程序调用操作系统的网络功能),提供的查询IP地址的功能。

**知道了IP地址之后,就可以委托操作系统内部的协议栈向这个目标IP地址发送请求消息了。**和向DNS服务器查询IP地址的操作一样,这里也需要使用Socket库中的程序组件。但向操作系统内部的协议栈发出委托时,需要按照指定的顺序来调用Socket库中的程序组件比较复杂。

收发数据操作概览
在这我们先从整体了解收发数据的过程,其中有个重要的概念就是套接字。两台计算机之间进行数据收发就相当于连接了一条数据通道,而建立数据通道的关键就在于建立数据出入口,这些出入口就可以称为套接字(套接字的实体其实就是通信控制信息,它记录了通信对象的IP地址,端口号,通信状态等)。先创建套接字,再将套接字连接起来形成通道。所以收发数据的操作大致分为四个阶段:
1、创建套接字
2、将通道连接到服务器的套接字上(连接阶段)
3、收发数据(通信阶段)
4、断开通道并删除套接字(断开阶段)

三、通过协议栈将请求消息打包封装,发送给网卡

到这我们放张图在梳理下流程,向服务器发送请求消息这一过程其实就是计算机是从上层向下层逐层委派工作。
在这里插入图片描述

协议栈就是根据套接字中记录的控制信息来进行工作的
Socket库会将收到的HTTP消息作为数据转交给协议栈。
根据上图可知在操作系统内部的协议栈中,上半部分分为两块,分别是负责用TCP协议收发数据的部分和负责用UDP协议收发数据的部分,它们会接受应用程序的委托执行收发数据的操作。(浏览器、邮件等一般应用程序收发数据时用TCP,DNS查询等收发较短的控制数据时使用UDP)
下半部分是用IP协议控制网络包收发操作的部分,IP中包含的ICMP协议用于告知网络包传送过程中产生的错误以及各种控制信息,而ARP协议则用于根据IP地址查询响应的以太网(局域网)MAC地址。

控制信息
通信操作中使用的控制信息分为两类,一类是头部中记录的信息,另一类是套接字(协议栈中的内存空间)中记录的信息。
包的基本结构如图:
在这里插入图片描述

TCP模块
信息会先传递给协议栈中的TCP模块,TCP按照网络包的长度对数据进行拆分,在每个包前面加上TCP头部并转交给IP模块。
在网络包加上的TCP头部其实包含了很多信息,其中比较重要的一个是序号(发送数据的顺序编号)它的含义是发送方告诉接收方网络包发送的数据相当于所有发送数据的第几个字节。还有一个是ACK号(acknowledge的缩写,接收数据的顺序编号)它的含义是接收方告知发送方接收方已经收到了所有数据的第几个字节。童鞋们先对TCP头部有个简单了解,后续再自己去翻阅相关资料。

IP模块
之后IP模块会在TCP包前面加上IP头部,然后查询MAC地址并加上MAC头部,然后将包转交给网卡驱动,网卡驱动收到IP发来的包,将其转交给网卡并发出发送指令。
IP头部中最重要的就是IP地址了,它表示这个包应该发到那里去。IP不会自行判断包的目的地,而是将包发往应用程序指定的接收方,即便应用程序指定了错误的IP地址,IP模块也会照做。

生成IP头部以后,IP模块还需要在IP头部前面加上以太网用的MAC头部。

四、网卡将包信号转换成电信号发到交换机

以太网
想要用网卡将包发送到交换机那我们就先要科普一下以太网的有关知识。以太网是一种为多台计算机能够彼此自由和廉价地相互通信而设计的通信技术,最初的以太网其实就是一根主干网线,将不同网线之间的信号连接起来。像这样,
在这里插入图片描述
可这样的以太网一个计算机发送消息其他所有都能接收到,无法判断信号到底是发送给谁的,所以目前的以太网大多使用交换式集线器的结构互相连接,还有一个好处是防止多台设备同时发送信息会造成的碰撞,我在这篇文章中详细解释过过——以太网使用交换式集线器结构的原因

为了区分以太网的各个端点的数据信息到底是发送给谁的,我们需要在信号的开头加上接收者的地址也就是MAC地址。通过MAC头部中的接收方MAC地址,就能够知道包是发给谁的,而通过发送方MAC地址,就能够知道包是谁发出的。此外,通过以太类型就可以判断包里面装了什么类型的内容,这就是以太网的全部性质。
在这里插入图片描述
网卡检查以太网的可发送状态,将包转换成电或光信号通过双绞线发送出去
那么接着开始网络包的旅程,此时为了防止发生以太网中发生信号碰撞,网卡会检查以太网中是否存在其他设备的信号,然后将IP包转换为电或光信号发送出去。网卡还会给我们的网络包再加三件装备,会在MAC头部前加上报头和起始帧分界符,在末尾加上用于检测错误的FCS(帧校验序列)。

信号通过双绞线到达集线器,集线器将信号广播到所有端口,这样信号便到达交换机使用双绞线是抑制噪声,防止信号受到影响。目前交换机已经取代了集线器,所以信号是直接到达交换机的。

前面这些通俗的讲就是当你上网查询信息时也就是依赖浏览器向服务器发送请求信息时,会先在应用层打包一个 HTTP包,然后在传输层在打包成 TCP包,然后再根据 DNS 查到的 IP 在网络层打包成 IP数据包,然后在通过链路层打包成以太网数据帧,发送给你的交换机。
如图所示:
在这里插入图片描述
不了解交换机、集线器的同学可以看看这篇文章——路由器、交换机、集线器三剑客有什么区别?分别是用来干什么的?

五、交换机将包转发到路由器,路由器发送包

在这里插入图片描述
交换机根据收到的包的接收方MAC地址查询自身的路由表找到输出端口,并将包转发到输出端口发给路由器,

互联网接入路由器根据收到的包的接收方IP地址查询自身的路由表找到输出端口,并将包转发到输出端口。
路由器的端口都具有MAC地址,只接收与自身地址匹配的包,遇到不匹配的包则直接丢弃。

六、通过接入网进入互联网内部抵达Web服务器

旅程走到这已经一大半了,那么对于支持我们查询信息的互联网不了解怎么能行呢?互联网是一个遍布世界的巨大而复杂的系统,其实工作原理非常简单,互联网类似于以太网,是通过路由器来转发包的,它的路由器的数量达到了上万台。互联网转发设备间的距离相比于局域网来说要远非常多,其次,路由表中记录的数据也非常多,毕竟全世界的路由信息都记录在这上万台路由器中,所以互联网的路由器维护方式是自动维护的。
在这里插入图片描述
互联网路由器的转发规则与以太网路由器的转发规则并没有什么不同,也是根据包IP头部中的接收方IP地址在路由表的目标地址中进行匹配,找到相应的路由记录后将包转发到这条路由的目标网关。不过互联网接入路由器是按照接入网规则来发送包的。

接入网
接入网就是指连接互联网与家庭、公司网络的通信线路。也就是我们常说的宽带。例如ADSL(不对称数字用户线)、FTTH(国家实行了好多年的光纤到户)等。

所以在收到包后,ADSL(当作普通宽带)或光纤的MODEM将收到的包发送给BAS(宽带接入服务器),BAS通过隧道将网络包发送给运营商,隧道就是在BAS和运营商路由器之间ADSL/FTTH(光纤)接入服务商的网络中建立一条隧道,将用户到BAS的接入网连接起来,就形成了一条从用户一直到运营商路由器的通道,网络包通过这条通道,就可以进入互联网内部了。

随后可怜的网络包就跟个孤儿一样在互联网的大海中飘荡,历经多个路由器,抵达隧道出口的隧道路由器,通过互联网流向Web服务器。

七、Web服务器防火墙检查进入的包

最初的服务器在部署的时候是没有防火墙的,网络包通过最近的POP中的路由器、接入网以及服务器端路由器之后,就直接到达了服务器。
这样的方式缺点很明显,一是会导致IP地址不足,因为如果这样,那么需要为公司网络中的所有设备,包括服务器和客户端计算机,都分配各自的公有地址,然而现在IPv4公有地址已经耗尽

另一个则是安全问题,这种方式中,从互联网传来的包会无节制地进入服务器,这意味着服务器在攻击者看来处于“裸奔”状态。所以防火墙诞生了。
防火墙是一种抵御外部网络攻击的机制,也是最早出现的一种防御机制。它作用有点像海关,只允许发往指定服务器的指定应用程序的网络包通过,从而屏蔽其他不允许通过的包。这样即使应用程序存在安全漏洞,也可以降低相应的风险。

包过滤的方式
其中包过滤的规则是通过控制信息来设立的,防火墙可根据接收方IP地址、发送方IP地址、接收方端口号、发送方端口号、控制位等信息来判断是否允许某个包通过。
消息最终通过防火墙之后,就会到达Web服务器了。
在这里插入图片描述

八、网络包抵达服务器,取出数据组装还原

服务器跟客户端的区别
既然已经到达了服务器,那总算能松口气了,让我们来看看服务器跟客户端有什么区别。
根据用途,服务器可以分为很多种类,其硬件和操作系统与客户端是有所不同的。但是网络相关的部分,如网卡、协议栈、Socket库等功能和客户端并无二致。无论硬件和OS如何变化,TCP和IP的功能都是一样的,或者说这些功能规则都是统一的。不过它们的用法有区别,在连接过程中,客户端发起连接操作,而服务器则是等待连接操作,因此应用程序调用的Socket库的程序组件不同。此外,服务器的程序还可以同时和多台客户端计算机进行通信。

到达服务器的网络包其本质是电信号或者光信号,接收信号的过程和客户端是一样的。先是服务器的网卡接收到信号,然后将其还原成数字信息。局域网中传输的网络包信号是由1和0组成的数字信息与用来同步的时钟信号叠加而成的,因此只要从中分离出时钟信号,然后根据时钟信号进行同步,就可以读取并还原出1和0的数字信息。

接下来需要根据包末尾的帧校验序列(FCS)来校验错误,判断数据包是否遭到破坏。当FCS一致,确认数据没有错误时,接下来需要检查MAC头部中的接收方MAC地址,看这个包是不是发给自己的。还原后的数字信息被保存在网卡内部的缓冲区中,以上操作都是由服务器的网卡MAC模块来完成的。
网卡驱动会根据MAC头部判断协议类型,并将包交给相应的协议栈。协议栈的IP模块会检查IP头部判断是不是发给自己的,判断网络包是否经过分片,判断完之后将包转交给TCP模块或UDP模块。

还记得我们前面提过用来确认接收方是否收到了网络包的ACK号么,在收到数据包时,TCP模块首先会根据收到的包的发送放IP地址、发送方端口号、接收方IP地址、接收方端口号找到相对应的套接字,并将数据块拼合起来并保存在接收缓冲区中,紧接着就会向客户端返回ACK确认收到了包。

九、服务器根据请求内容,将读取的数据返回给客户端

Web服务器分析HTTP消息的内容,根据请求信息的内容判断数据源,并从中获取数据返回给客户端。
不过在执行这些操作之前,Web服务器还会检查事先设置的一些规则,并根据规则允许或禁止访问。这种根据规则判断是否允许访问的功能称为访问控制,童鞋们可能被现在各大软件网站充斥的会员制度所埋没,它正是通过访问控制来实现的。
Web服务器的访问控制规则主要有以下三种
1、客户端IP地址
2、客户端域名
3、用户名和密码

当服务器完成对请求消息的各种处理后,就可以返回响应信息了,这跟客户端向服务器发送请求消息时的过程相同,于是悲催的网络包就又开始了它的旅程啦。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_45797022/article/details/105724527
今日推荐