【计算机网络】网络的连接过程 ——读《网络是怎样连接的》

网络的连接过程 ——读《网络是怎样连接的》

0 网络连接过程

网络本质上是对0和1组成的数字信息请求响应后准确无误发送给对方的机制,分为以下几个步骤:
(1)Web浏览器:浏览器作为请求方,通过URL(统一资源定位符,可以理解为网址)将请求委托给Web服务器
(2)协议栈、网卡:协议栈(网络控制软件)将浏览器收到的消息打包,加上目的地址等控制信息的包交给网卡,网卡将包转换为电信号通过网线发送出去。
(3)集线器、交换机、路由器:网卡发送的包经过这些设备,到达接入互联网的路由器。
(4)接入商、网络运营商:网络包通过互联网骨干网的运营商的一系列高速大型服务器,到达目的服务器所在的局域网中。
(5)防火墙、缓存服务器:防火墙会对包进行检查,之后检查缓存服务器是否有可利用数据。如果能找到数据直接调研,找不到会到达web服务器。
(6)Web服务器:数据表还原为原始的请求消息,分析请求消息后发送响应消息,反过程到浏览器客户端。
在这里插入图片描述

1 浏览器生成消息

·在这一过程主要分四步:生成HTTP请求消息,输入网址(URL,准确说除http还包括ftp/file/mailto等协议类型)后浏览器进行解析请求的消息;向DNS服务器查询Web服务器的IP地址;DNS服务器接力完成IP地址的查询;委托协议栈发送消息,浏览器将消息委托给操作系统,这一部分有编程者才需要精通的复杂规则。
·生成HTTP请求消息:浏览器是一个具备多种客户端功能的综合性客户端软件,需要不同的文字开头(如http:)来判断将要进行的协议功能。例如http的格式最后是待访问服务器的文件的路径,不过目录名也经常被省略,服务器事先设置好根目录的默认文件(称为“主页”)即可。HTTP消息分为头字段和网页数据。当我们访问 Web 服务器时,遇到找不到的文件就会显示出 404 Not Found 的错误信息,而这是状态码。
·向 DNS 服务器查询 Web 服务器的 IP 地址:浏览器并不具备发送HTTP消息的能力,因此需要委托给操作系统发送,而发送需要提供IP地址(也就是我们常说的域名)。在TCP/IP协议中,IP地址是一串32位地址(IPV4),8位一组分成4组,值即为0到2的八次方减1(255)。类比家用地址的xx小区xx户,划分了网络号和主机号。为了分清两者,就有了子网掩码这一附加信息。IP地址与子网掩码按位进行“与”运算,就得到主机地址,相当于子网掩码为1的位为网络号,为0的为主机号。实现域名和IP地址转换的是DNS服务器,这一过程称为域名解析。而解析器程序存在在操作系统的Socket库中。
·DNS服务器接力:域名一般格式为www.A.B.C.com,句点划分了域名的层次结构,越靠右的域(如com)的层次越高。假设DNS服务器和域一一对应(实际上比较复杂),则上层域的DNS服务器保存着下级服务器的信息,因此可以一层一层顺藤摸瓜地查找下去。

在这里插入图片描述

·委托协议栈发送消息:向操作系统内部的协议栈发出委托时,需要按照指定的顺序来调用 Socket 库中的程序组件。进入收发数据前,需要建立起收发管道,而管道两端的数据出入口,称为套接字。已知IP地址和约定的端口号即可确定套接字,将数据送入套接字即可传输数据了。

2 用电信号传输TCP/IP数据 -探索协议栈和网卡

·数据收发操作的第一步是创建套接字。(前面介绍面向连接的TCP协议)
套接字只是一个概念,不存在实体,如果一定要赋予它一个实体,控制信息就是套接字的实体,或者说存放控制信息的内存空间就是套接字的实体。一般来说,服务器一方的应用程序在启动时就会创建好套接字并进入等待连接的状态。客户端则一般是在用户触发特定动作,需要访问服务器的时候创建套接字。

在这里插入图片描述

·创建套接字之后,客户端会向服务器发起连接操作。客户端会生成一个 SYN 为 1 的 TCP 包并发送给服务器。当这个包到达服务器之后,服务器会返回一个 SYN 为 1 的 TCP 包。当这个包到达客户端时,客户端会向服务器返回一个包含表示确认的 ACK 号的 TCP 包。这就是所谓的连接的“三次握手”。连接操作完成,双方进入数据收发阶段。
·数据收发阶段,以 Web 为例,首先客户端会向服务器发送请求消息。TCP 会将请求消息切分成一定大小的块,并在每一块前面加上 TCP 头部,然后发送给服务器。当服务器收到数据时,会向客户端返回 ACK 号。随着数据收发的进行,数据不断传递给应用程序,接收缓冲区就会通过“滑动窗口”被逐步释放。
·服务器的响应消息发送完毕之后,数据收发操作就结束了,会开始执行断开操作。也就是所谓断开的“四次握手”。以 Web 为例,服务器会先发起断开过程。服务器先发送一个 FIN 为 1 的 TCP 包,然后客户端返回一个表示确认收到的 ACK 号。接下来,双方还会交换一组方向相反的 FIN 为 1 的 TCP 包和包含 ACK 号的 TCP 包。等待一段时间后,套接字会被删除。
·TCP 模块在执行连接、收发、断开等各阶段操作时,都需要委托 IP 模块将数据封装成包发送给通信对象。发送方的网络设备负责创建包,包会被发往最近的网络转发设备。当到达最近的转发设备之后,转发设备会根据头部中的信息判断接下来应该发往哪里。通过路由表查询,根据查到的信息判断发往方向。经过多个转发设备的接力之后,包最终就会到达接收方的网络设备。
·完成 IP 模块的工作后,网卡进行以太网工作。将 IP 包转换成电或光信号发送出去,电信号就类似于我们数字电路课程学的编码过程,采用将数据信号和时钟信号叠加在一起的方法。为了判断时钟信号的变化周期,我们需要在信号前面加一段报头。读取编码时防止出错会进行校验。总之,网卡的 MAC 模块生成通用信号,然后由PHY(MAU)模块转换成可在网线中传输的格式,并通过网线发送出去。
·TCP 机制复杂,对于数据很短的情况,可以采用UDP(无连接)协议。UDP 只负责单纯地发送,不考虑出错包的监控重传。出错所有包均重传。发送音频和视频数据时会使用UDP。如果像 TCP 一样通过接收确认响应来检查错误并重发,重发的过程需要消耗一定的时间,因此重发的数据很可能已经错过了播放的时机,声音和图像会发生卡顿。

3 从网线到网络设备 -探索集线器、交换机和路由器

·交换机是基于以太网规格工作的设备,而路由器是基于 IP 工作的。
·路由器转发基于“最长匹配”原则。
·IP(路由器)本身不负责包的传输,而是委托各种通信技术(交换机)将包传输到下一个路由器。

·从计算机发送出来的网络包会通过集线器、路由器等设备被转发,最终到达目的地。集线器/交换机是基于以太网规格工作的设备,而路由器是基于 IP 工作的。当信号通过网线到达集线器后,会被广播到整个网络中。而交换机相当于对集线器的改良,不需要广播,实现节点的互连。
·交换机信号线排列成网格状,每一个交叉点都有一个交换开关,交换开关是电子控制的,通过切换开关的状态就可以改变信号的流向。根据 MAC 地址表查找 MAC 地址,然后将信号发送到相应的端口。交换机在转发包的过程中,还需要对 MAC 地址表的内容进行维护,自行更新或删除地址表中的记录。过时记录从地址表中删除的时间一般为几分钟,因此在过时记录被删除之前,依然可能有发给该设备的包到达交换机。当地址表的内容出现异常时,只要重启一下交换机就可以重置地址表,也不需要手动进行维护。

在这里插入图片描述

·网络包经过以太网的集线器和交换机之后,到达路由器。转发模块会根据接收到的包的 IP 头部中记录的接收方 IP 地址,在路由表中进行查询,以此判断转发目标。然后,转发模块将包转移到转发目标对应的端口,端口再按照硬件的规则将包发送出去。路由器会忽略主机号,只匹配网络号。路由器转发基于“最长匹配”原则。匹配时首先寻找网络号比特数最长的一条记录,找不到匹配路由时选择默认路由。路由表中子网掩码为 0.0.0.0 的记录表示“默认路由”。
·路由器判断下一个转发目标的方法如下:
如果路由表的网关列内容为 IP 地址,则该地址就是下一个转发目标。如果路由表的网关列内容为空,则 IP 头部中的接收方 IP 地址就是下一个转发目标。IP(路由器)负责将包送达通信对象这一整体过程,而其中将包传输到下一个路由器的过程则是由以太网(交换机)来负责的。
·路由器的附加功能:通过NAT协议进行地址转换有效利用 IP 地址。也就是我们常说的外网和内网。内网地址仅限:
10.0.0.0 ~ 10.255.255.255
172.16.0.0 ~ 172.31.255.255
192.168.0.0 ~ 192.168.255.255
公有地址可以和互联网直接进行通信,内网部分则分配私有地址,内网中的设备不能和互联网直接收发网络包,通过地址转换(地址+端口号)进行连接。路由器还具有包过滤功能。

4 通过接入网进入互联网内部 -探索接入网和网络运营商

·所谓接入网,就是指连接互联网与家庭、公司网络的通信线路。一般家用的接入网方式包括 ADSL、FTTH、CATV、电话线、ISDN 等。ADSL利用架设在电线杆上的金属电话线进行高速通信。互联网接入路由器会在网络包前面加上 3 种头部,然后发送给ADSL Modem(调制解调器)。ADSL Modem 将包拆分成信元,将信元“调制”成信号,通过分离器,到达用户电话局。
·另一种接入网技术,它的名字叫 FTTH,是一种基于光纤的接入网技术。在光纤中,需要先将数字信息转换成电信号,然后再将电信号转换成光信号。光信号在光纤中传导之后,就可以通过光纤到达接收端。接收端的光敏元件根据光的亮度产生不同的电压。当光信号照射时,光亮的时候就产生高电压,光暗的时候就产生低电压,这样就将光信号转换成了电信号。最后再将电信号转换成数字信息。

在这里插入图片描述

·接入网中的路由器有登录功能。使用PPPoE协议(Point-to-Point Protocol over Ethernet,以太网的点对点协议。),用户名和密码发送到认证服务器,认证服务器校验这些信息确认无误后,会返回 IP 地址等配置信息,并将这些信息下发给用户。用户的计算机根据这些信息配置参数,完成 TCP/ IP 收发网络包的准备工作。而另一种DHCP协议,配置信息非常简单,不需要像 PPP那样多个步骤,也不需要验证用户名和密码。
·网络包通过接入网之后,到达运营商 POP(“接入点”) 的路由器。这是互联网的入口,网络包会从这里进入互联网内部。NOC(Network Operation Center,网络运行中心)是运营商的核心设备,从 POP 传来的网络包都会集中到这里,并从这里被转发到离目的地更近的 POP,或者是转发到其他运营商。互联网中不能单纯采用最短路由,运营商之间需要对交换路由信息的对象进行判断和筛选。

5 服务器端的局域网

·从互联网到达服务器的过程,一般有三种情况。第一种不再是主流的原因是 IP 地址不足和安全问题。防火墙是一种抵御外部网络攻击的机制。现在已经出现了很多可以绕过防火墙的攻击方法,因此防火墙一般需要和反病毒、非法入侵检测、访问隔离等机制并用。数据中心通过高速线路直接连接到互联网的核心部分,因此将服务器部署在这里可以获得很高的访问速度。网络包会先接受防火墙的检查,放行之后再到达服务器。

在这里插入图片描述

·防火墙可分为包过滤、应用层网关、电路层网关等几种方式。包过滤方式的防火墙可根据接收方 IP 地址、发送方 IP 地址、接收方端口号、发送方端口号、控制位等信息来判断是否允许某个包通过。另外,通过端口号限定应用程序,通过控制位判断连接方向。(如TCP 在执行连接操作时需要收发 3 个包,其中第一个包的 TCP 控制位中 SYN 为 1,而 ACK 为 0。大家可以通过Wireshark软件来观察网络协议的这种值。)
·缓存服务器是一台通过代理机制对数据进行缓存的服务器。使用缓存服务器可以分担负载,这是多台功能相同的 Web 服务器分担负载之外的方法。而正向代理服务器(客户端)既有缓存功能,还可以实现防火墙。

在这里插入图片描述

·服务器端的代理称为反向代理。而通过查看请求消息的包头部,判断转发目标的方法称为透明代理。IP 头部中包含接收方 IP 地址,因此不需要像正向代理一样设置浏览器参数,也不需要在缓存服务器上设置转发目标。我们必须将透明代理放在请求消息从浏览器传输到 Web 服务器的路径中,当消息经过时进行拦截。这种缓存服务器的分布,通过CDN厂商部署。进一步通过相关协议实现内容分发服务。

6 服务器响应消息并返回

·服务器和客户端功能相同,但用法不同。在连接过程中,客户端发起连接操作,而服务器则是等待连接操作。每有一个客户端连接进来,就启动一个新的服务器程序,确保服务器程序和客户端是一对一的状态。服务器设置好端口号之后,协议栈会调用 listen 向套接字写入等待连接状态这一控制信息。套接字就会开始等待来自客户端的连接网络包。
·通过网卡的 MAC 模块接收信号并还原成数字信息,还原后的数字信息被保存在网卡内部的缓冲区中。
协议栈的 IP 模块会检查 IP 头部,(1) 判断是不是发给自己的;(2) 判断网络包是否经过分片;(3) 将包转交给TCP 模块或UDP模块。对于TCP如何处理连接包和数据包,建议大家通过wireshark去了解三次握手协议。

# 相关其他

·不能打开网页但QQ正常:用于排查是否为DNS问题。浏览器需要DNS服务,而QQ是直接IP连接。
·RouterOS:https://help.mikrotik.com/docs/display/ROS/RouterOS


版权声明:本文为qq_37387849原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
THE END
< <上一篇
下一篇>>