万字长文,掌握必备网络知识(上篇)

目录

  一、TCP/IP
    协议族
    分层管理
  二、UDP与TCP
    UDP
    TCP
    三次握手
    四次挥手
  三、域名与ip
    ip地址
    域名
    域名解析
    域名记录
  四、CDN
    前置技术
    工作原理
  五、通信数据转发
    代理
    网关
    隧道
  六、“墙”

本文为原创文章,万字长文,建议先码后读。

引言

1969 年,第一个真正意义上的互联网在美国出现,它就是著名的 ARPANET(阿帕网,国防部高级计划局网络)。
起初 ARPANET 仅用于军事领域;随着各大高校的接入,开始用于科研领域;1983 年,美国高级研究计划署和美国国防部通信局研制成功了用于异构网络的 TCP/IP 协议,美国加利福尼亚伯克莱分校把该协议作为其 BSD UNIX(是加州大学伯克利分校软件组作的操作系统)的一部分,使得该协议得以在社会上流行起来,从而诞生了真正的 Internet(互联网)。美国国家科学基金会 NSF(National Science Foundation)建立的 NSFnet 使用的就是 TCP/IP。
到 1990 年,ARPANET 已退出了历史舞台;NSFnet 成为 Internet 的重要骨干网之一。

一、TCP/IP

协议族

计算机与网络设备要相互通信,双方就必须基于相同的方法。比如,如何探测到通信目标、由哪一边先发起通信、使用哪种语言进行通信、怎样结束通信等规则都需要事先确定。不同的硬件、操作系统之间的通信,所有的这一切都需要一种规则。而我们就把这种规则称为 协议(protocol)

TCP/IP 是互联网相关的各类协议族的总称,称为 TCP/IP 协议族,也有说法认为,TCP/IP 是指 TCP 和 IP 这两种协议。我们通常使用的网络(包括互联网)是在 TCP/IP 协议族的基础上运作的。

其中两个比较重要的 协议 就是 TCP 协议 与 IP 协议:

  • 「TCP 协议」:位于运输层,提供可靠的字节流服务。
  • 「IP 协议」
    • IP(Internet Protocol,网际协议)位于网络层
    • 作用是把各种数据包传送给对方;而要保证确实传送到对方那里,则需要满足各类条件。其中两个重要的条件是 ip 地址MAC 地址(Media Access Control Address)
    • ip 地址指明了节点被分配到的地址,MAC 地址是指网卡所属的固定地址。ip 地址可以和 MAC 地址进行配对。ip 地址可变换,但 MAC 地址基本上不会更改。通过 ARP 协议 可以根据 ip 地址反查出对方的 MAC 地址(RARP 协议则是通过 MAC 地址反查出 ip 地址)

分层管理

接下来说说大家都比较熟悉的网络的分层结构

  1. ISO 制定的 OSI/RM 协议 (七层协议
  2. TCP/IP 的 四层协议
万字长文,掌握必备网络知识(上篇)
分层协议

这里我们主要讲一下 TCP/IP 的四层协议

  • 「应用层」:决定了向用户提供应用服务时通信的活动;提供各类通用的服务,我们熟悉的 HTTP 协议FTPDNS都是在这一层。
  • 「运输层」:为 应用层 提供网络中两台计算机间的数据传输;这一层中存在两个重要的协议:TCPUDP
  • 「网络层」:用来处理网络上流动的数据包,同时规定应该通过什么样的 传输路线 抵达目标计算机,并把数据包传送给对方,主要协议是 IP 协议
  • 「网络接口层」:也叫 链路层,主要处理网络的硬件部分,控制操作系统、设备驱动、NIC、光纤等都属于这一层的范围。

(数据包:网络传输中最小的数据单位)

这里我们以常用的 http 请求为例来看一下分层协议是如何工作的

  • 客户端发出
    1. 首先,客户端在 应用层 发出一个 http 请求
    2. 接着,运输层(TCP)把收到的 http 请求报文分割成多份,并给每份加上 TCP 首部(标记 及 端口号等),转发给 网络层
    3. 网络层(IP 协议)加上 IP 首部(目的地 MAC 地址),转发给网络接口层
    4. 网络接口层加上以太网首部,通过硬件设备发出
  • 服务端接收 在网络接口层接收到数据,按序往上层发送,一直到应用层,每经过一层时会把对应的首部剥去。

二、UDP 与 TCP

UDP 与 TCP 协议都在运输层,负责数据的传输。

UDP

UDP(User Data Protocol,用户数据报协议)基于 数据报 传输数据。

来看一下 UDP 报文的结构

万字长文,掌握必备网络知识(上篇)
udp

UDP 报文头(首部)中主要有四个字段

  1. 「源端口」:16 位,发送方所使用的 UDP 端口,非必填,默认是 0
  2. 「目的端口」:16 位,接收方所使用的端口。
  3. 「长度」:16 位,表示 UDP 数据报长度,包含 UDP 报文头和 UDP 数据长度;由于 UDP 报文头长度是 8 个字节,所以这个字段值最小为 8。
  4. 「校验值」:16 位,用来校验数据在传输过程中是否被损坏

UDP 仅对报文添加首部后直接转发给 网络层(IP 协议),因此处理速度快,但是不关心数据能否成功被接收,所以也容易造成丢包。常见的应用场景有:ping 命令、直播、聊天室、物联网等。

TCP

TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。

TCP 协议可以一个字节一个字节地接收数据,接收到的数据组成长度不等的段,并给每一段添加上 TCP 首部,再转发至网络层。

老规矩,先来看一下 TCP 报文头(首部)结构,比较复杂,借了张图

万字长文,掌握必备网络知识(上篇)
TCP header
  • 「源端口」:16 位,发送方应用程序的端口号
  • 「目的端口」:16 位,接收方应用程序的端口号
  • 序列号字段(Sequence Number):32 位,它表示本报文段所发送数据的第一个字节的编号。在 TCP 连接中,所传送的字节流的每一个字节都会按顺序编号。当 SYN 标记不为 1 时,这是当前数据分段第一个字母的序列号;如果 SYN 的值是 1 时,这个字段的值就是初始序列值(ISN),用于对序列号进行同步
  • 确认号字段(Acknowledgment Number,ACK Number):32 位,它表示接收方期望收到发送方下一个报文段的第一个字节数据的编号。其值是接收计算机即将接收到的下一个序列号,也就是下一个接收到的字节的序列号加 1。
  • 「首部长度」:4 位,也称为“数据偏移字段”,用来确定 TCP 数据段首部的长度,告诉接收端的应用程序,数据从何处开始
  • 「保留字段(Reserved)」:4 位,以备未来扩展 TCP 之用,目前需全部为 0
  • 「标志位字段」(每个字段各占 1 位):
    1. 「CWR(Congestion Window Reduce)」:拥塞窗口减少标志,用来表明它接收到了设置 ECE 标志的 TCP 包。并且,发送方收到消息之后,通过减小发送窗口的大小来降低发送速率。
    2. 「ECE(ECN Echo)」:用来在 TCP 三次握手时表明一个 TCP 端是具备 ECN 功能的。在数据传输过程中,它也用来表明接收到的 TCP 包的 IP 头部的 ECN 被设置为 11,即网络线路拥堵。
    3. 「URG(Urgent)」:表示本报文段中发送的数据是否包含紧急数据。URG=1 时表示有紧急数据。当 URG=1 时,后面的紧急指针字段才有效。
    4. ACK:表示前面的确认号字段是否有效。ACK=1 时表示有效。只有当 ACK=1 时,前面的确认号字段才有效。TCP 规定,连接建立后,ACK 必须为 1。
    5. 「PSH(Push)」:告诉对方收到该报文段后是否立即把数据推送给上层。如果值为 1,表示应当立即把数据提交给上层,而不是缓存起来。
    6. 「RST」:表示是否重置连接。如果 RST=1,说明 TCP 连接出现了严重错误(如主机崩溃),必须释放连接,然后再重新建立连接。
    7. SYN:在建立连接时使用,用来同步序号。当 SYN=1,ACK=0 时,表示这是一个请求建立连接的报文段;当 SYN=1,ACK=1 时,表示对方同意建立连接。SYN=1 时,说明这是一个请求建立连接或同意建立连接的报文。只有在前两次握手中 SYN 才为 1。
    8. FIN:标记数据是否发送完毕。如果 FIN=1,表示数据已经发送完成,可以释放连接。
  • 「窗口大小(Window Size)」:16 位。它表示从 Ack Number 开始还可以接收多少字节的数据量,也表示当前接收端的接收窗口还有多少剩余空间。该字段可以用于 TCP 的流量控制。
  • 「校验位(TCP Checksum)」:16 位。它用于确认传输的数据是否有损坏。发送端基于数据内容校验生成一个数值,接收端根据接收的数据校验生成一个值。两个值必须相同,才能证明数据是有效的。如果两个值不同,则丢掉这个数据包。Checksum 是根据伪头 + TCP 头 + TCP 数据三部分进行计算的。
  • 「紧急指针(Urgent Pointer)」:16 位,仅当前面的 URG 控制位为 1 时才有意义。它指出本数据段中为紧急数据的字节数。当所有紧急数据处理完后,TCP 就会告诉应用程序恢复到正常操作。即使当前窗口大小为 0,也是可以发送紧急数据的,因为紧急数据无须缓存。
  • 「可选项(Option)」:长度不定,但长度必须是 32bits 的整数倍。

三次握手

谈到 TCP,条件反射地都会想到 三次握手

TCP 是面向连接的协议,每次发出的请求都需要对方进行确认。TCP 客户端与 TCP 服务器在通信之前需要完成 三次握手 才能建立连接。

上图
万字长文,掌握必备网络知识(上篇)

  • 「第一次握手」
    • 客户端发起
    • syn = 1 告知服务端同步序号,SEQ 等于初始序列值
    • 进入 SYN_SENT 状态,等待服务器确认
  • 「第二次握手」
    • 服务端发起
    • 服务端接收到客户端消息后,首先向客户端回复一个确认信息(ACK=x+1)
    • 之后再向客户端发送一个 SYN 包(SEQ=y)建立连接
    • 进入 SYN_RECV 状态
  • 「第三次握手」
    • 客户端发起
    • 客户端向服务端发出确认包(ACK=y+1,SEQ=x+1)
    • 确认包发送完毕后客户端和服务端进入 ESTABLISHED 状态,开始传输数据

客户端与服务端之间的通信是一个数据传输过程;通信的消息将以数据包形式进行传输;为了保证顺序性,每个包都有一个 ID。当数据包丢失时,TCP 协议会利用数据重发功能重新发送数据包。

四次挥手

当客户端与服务端数据传输结束,不再进行通信时,会以 四次挥手 的方式结束连接。

万字长文,掌握必备网络知识(上篇)
TCP 四次挥手
  • 「第一次挥手」
    • 客户端发起
    • 客户端随机生成一个序列号 SEQ=x,设置 FIN=1 告知服务端要断开连接了
  • 「第二次挥手」
    • 服务端发起
    • 服务端发送 ACK 报文,表示已经收到断开请求
    • 随机生成一个序列号 SEQ=y。由于回复的是客户端发来的请求,所以在客户端请求序列号 x 的基础上加 1,得到 ACK=x+1
  • 「第三次挥手」
    • 服务端发起
    • 用于确认所有传输到客户端的数据已经传输完毕
    • 再次随机生成一个序列号 SEQ=z。由于还是对客户端发来的 TCP 断开请求序列号 SEQ=x 进行回复,因此 ACK 依然为 x+1
  • 「第四次挥手」
    • 客户端发起
    • 表示收到断开 TCP 连接数据包
    • 向服务器发送 ACK 报文,生成一个序列号 SEQ=x+1。由于回复的是服务器,所以 ACK 字段的值在服务器发来断开 TCP 连接请求序列号 SEQ=z 的基础上加 1,得到 ACK=z+1

小结

  • TCP 是面向连接的,UDP 是面向无连接的
  • UDP 结构较简单
  • TCP 是面向字节流的,UDP 是基于数据报的
  • TCP 保证数据正确性,UDP 可能丢包
  • TCP 保证数据顺序,UDP 不保证

三、域名与 ip

ip 地址

在单个局域网网段中,计算机与计算机直接通信,可以使用 网络接口层 提供的 MAC 地址进行通信。
但是,如果在路由式网络中,计算机与计算机之间存在路由,还使用 MAC 地址传输数据处理起来就比较麻烦,因为 MAC 地址无法表示国家、省、市、区、街道、路、号这类层次,也无法在地址空间上引入逻辑结构。
因此,要进行数据传输,必须使用一种逻辑化、层次化的寻址方案对网络进行组织,这就是 ip 地址

ip 地址(Internet Protocol Address) 是互联网协议特有的一种地址,它是 IP 协议 提供的一种统一的地址格式。ip 地址为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。

ip 地址由 网络 ID、主机 ID 两部分构成

  • 网络 ID:标识主机所在的网络位置
  • 主机 ID:标识网络中主机的位置

一般以 ip 地址 32 位二进制的形式划分为 5 类:

  • 「A 类」:前 8 位表示网络 ID,后 24 位表示主机 ID;一般给政府使用;范围:0.0.0.0 ~ 127.255.255.255
  • 「B 类」:前 16 位表示网络 ID,后 16 位表示主机 ID;分配给中等规模企业使用;范围:128.0.0.0 ~ 191.255.255.255
  • 「C 类」:前 24 位表示网络 ID,后 8 位表示主机 ID;分配给个人使用;范围:192.0.0.0 ~ 223.255.255.255
  • 「D 类」:不区分网络 ID 和主机 ID;用于多播;范围:224.0.0.0 ~ 239.255.255.255
  • 「E 类」:不区分网络 ID 和主机 ID;用于实验;范围:240.0.0.0 ~ 255.255.255.254

数据在网络中进行传输是通过识别 IP 地址中的网络 ID,从而将数据发送到正确的网络中;如果存在 子网(将 主机 ID 进一步划分为 子网 ID 和 主机 ID) 寻找网络内的子网,然后再根据主机 ID 将数据发送到目标主机上。

域名

域名(Domain Name),又称网域,是由一串用点分隔的名字组成的,表示 Internet 上某一台计算机或计算机组的名称,用于在数据传输时对计算机的定位标识(有时也指地理位置)

计算机既可以被赋予 ip 地址,也可以被赋予主机名和域名。用户通常使用主机名或域名来访问对方的计算机,而不是直接通过 ip 地址 访问。因为与 ip 地址 的一组纯数字相比,用字母配合数字的表示形式来指定计算机名更符合人类的记忆习惯

域名由多个部分组成,每个部分通过 “.” 连接,例如:www.melonfield.club。域名的结尾有时候还有一点,这是保留给根节点的,但是我们在书写时通常省略,在查询时软件会自动补上。

域名通常分为 根域顶级域(一级域)子域名(二级域、三级域等)

  • 「根域」:域名结尾的 “.”,通常由软件自行补上,目前共有 13 个根域服务器(不是 13 台,而是 13 个 IP 地址)
  • 「顶级域」:域名中最高的一级,每个域名都以顶级域结尾,如上面例子中的 club,每个域都会有域名服务器,也叫权威域名服务器
  • 「子域名」:顶级域左侧就是二级域名,二级域名左侧就是三级域名,从右侧到左侧,隔一个点依次下降一层

域名解析

有了域名,要怎么把 域名 跟 ip 地址 联系上呢?

这时候就需要进行 域名解析,解析工作一般由 域名服务器(也称:DNS 服务器) 完成。

域名解析也称为 域名指向、服务器设置、域名配置 或 反向 IP 登记等,分为:

  • 正向解析:即将域名解析成 ip 地址;
  • 反向解析:将 ip 地址转换为 域名。

下面以 melonfield.club 为例,现在我需要访问这个站点,我的小电脑需要找到这个域名对应的 ip 地址

  • 我的小电脑上会先自查
    • 先查 hosts 文件中是否有这个域名的 ip 地址
    • 如果没有找到,则查找 本地 DNS 解析器 缓存
  • 本机没有找到的话,下一步会连接到 本地域名服务器(我的小电脑的 TCP/ip 参数中设置的首选 DNS 服务器)查询
    • 权威性解析:需要查询的域名,包含在本地配置区域资源中
    • 非权威性解析:要查询的域名,不由 本地域名服务器 解析,但是存在该域名的缓存
  • 本地域名服务器也查不到的话,有两种选择
    • 通过 转发器 向上一级 域名服务器 查询
    • 向 13 个根域名服务器查询
  • 若没有转发,本地域名服务器会向最近的一个 根域名服务器 查询
    • 根域名服务器 返回一个管理该域名顶级域名(.club)的服务器 ip
    • 本地域名服务器向 club 域的服务器查询
    • .club 域的服务器也无法解析,返回 .club 域的下一级 域名服务器(melonfield.club) 的地址
    • 本地域名服务器向 melonfield.club 域服务器 查询
    • 至此,找到了 melonfield.club 域名的 ip 地址

我的小电脑 与 本地 DNS 服务器 之间的查询属于 递归查询,而 DNS 服务器 之间的交互查询就是 迭代查询

再引用一张图来理解一下,这应该是最详细的图了
万字长文,掌握必备网络知识(上篇)

域名记录

了解了 域名解析 大致是怎么工作的,但是你刚注册的域名要如何指向你自己的主机呢?
这一步就需要我们主动告诉 DNS 数据库 你这个域名是指向哪个 ip 地址 的。

DNS 数据库中包含 资源记录(Resource Records),每条资源记录由一组字段组成:

  • 「名称」 – 指示记录的名称或所有者的标签。此字段可以是根域名(用 @ 表示)或子域名(例如 www)。
  • 「类型」 – 记录的类型。例如,A(地址)记录。
  • 「TTL」 -(存留时间)存储在缓存(本地存储空间)中的记录副本必须更新(从原始存储空间提取)或舍弃的频率。存留时间越短,表示提取记录越频繁(结果是访问较慢,但数据较新)。存留时间越长,表示提取记录越不频繁(结果是访问较快,但数据较旧)。默认值为 1 小时。
  • 「数据」:记录的数据,会因记录的类型而有所不同。例如,A 记录的数据是主机的 IP 地址。这是在 DNS 搜索过程中返回的数据

常见的记录类型有以下几种:

  • 「A」:指向主机的 ip 地址;数据值:ip 地址(IPv4 地址)
  • 「CNAME」:将域名指向另一个域名,实现与被指向域名相同的访问效果;数据值:一般是主机服务商提供的一个域名
  • 「MX」:指向一个邮件服务器,用于电子邮件系统发邮件时根据收信人的地址后缀来定位邮件服务器;数据值:电邮交互记录
  • 「TXT」:文本记录,通常验证记录是会使用到;数据值:任意文本
  • 「NS」:指定该域名由哪个域名服务器来解析;数据值:域名服务器
  • 「AAAA」:与 A 记录类似,不过 AAAA 指向的是 IPv6 的地址;数据值:ip 地址(IPv6 地址)
  • 「SPF」:作为 SPF 协议的一部分,优先作为先前在 TXT 存储 SPF 数据的临时做法;数据值:SPF 记录
  • 「SRV」:SRV 记录了哪台计算机提供了哪个服务;数据格式:服务的名字.协议的类型(例如:_example-server._tcp)
  • 「CAA」:控制单域名 SSL 证书的发行,也可以控制通配符证书;数据格式:CAA 认证机构限制标志 证书属性标签 证书颁发机构、策略违规报告邮件地址等
  • 「显性 URL 转发」:访问域名时,自动跳转至目标地址;访问 www.melonfield.club 后跳转到 www.google.com,地址栏显示 www.google.com;数据值:http(s)协议地址
  • 「隐性 URL 转发」:与 显性 URL 转发 类似,不同之处在于跳转到 www.google.com 之后,地址栏仍显示的是 www.melonfield.club;数据值:http(s)协议地址

四、CDN

CDN 全称是 内容分发网络(Content Delivery Network)。建立并覆盖在承载网之上,由分布在不同区域的边缘节点服务器群组成的分布式网络。目的是通过在现有的 Internet 中增加一层新的网络架构,将网站的内容发布到最接近用户的网络“边缘”,使用户可以就近取得所需的内容,提高用户访问网站的响应速度。

前置技术

CDN 的实现需要依赖很多技术,主要包括 负载均衡技术、动态内容分发与复制技术、缓存技术。

  • 「负载均衡(Load Balance)」意思是将负载(工作任务,访问请求)进行平衡、分摊到多个操作单元(服务器,组件)上进行执行。是解决高性能,单点故障(高可用),扩展性(水平伸缩)的终极解决方案。为解决单点故障,可以采取冗余的方式,将相同的应用部署到多台机器上。为解决访问统一入口问题,可以在集群前面增加负载均衡设备,实现流量分发。
    在技术上又可细分为:DNS 负载均衡,HTTP 负载均衡,IP 负载均衡,链路层负载均衡等。
  • 「动态内容分发与复制技术」简单的说就是将网站大部分静态页面、图像、流媒体数据分发复制到各地的节点上
  • 「缓存技术」作用就是提高用户的访问速度;包括 本地缓存 以及 ISP 缓存

工作原理

CDN 通常会使用 CNAME 记录,由 CDN 服务提供商提供。

上图

万字长文,掌握必备网络知识(上篇)    

来源:阿里巴巴淘系技术

如图所示,用户访问一个使用了 CDN 服务的站点,假设 https://www.a.com 设置的域名记录为 CNAME,且值为:www.a.tbcdn.com。这里我们简化一下 域名解析 过程

  • 当用户访问 https://www.a.com 站点时,假设在本机没有找到域名记录,于是会向 本地域名服务器发起请求,也就是这里的 LDNS
  • 本地域名服务器也没有找到域名记录,于是又向已授权的域名服务器请求,拿到 www.a.tbcdn.com (CNAME) 返回给 本地域名服务器
  • 本地域名服务器 向 DNS 调度系统 请求获取 www.a.tbcdn.com 对应的 ip 地址,这时 调度系统 就会给到离用户最近的一个节点(北京节点设备)的 ip 地址
  • 本地域名服务器返回节点 ip 地址 给到用户,用户请求该节点的 ip 地址。
    • 如果该节点没有数据,会再去请求源站点
    • 如果该节点有数据,直接返回给用户

五、通信数据转发

无论是 代理、网关 还是 隧道,作用都是将请求转发给通信线路上的下一站服务器;同时,又能将服务器发回的响应再转发给客户端。

代理

代理(英语:Proxy)也称 网络代理,是一种特殊的网络服务,允许一个(一般为客户端)通过这个服务与另一个网络终端(一般为服务器)进行非直接的连接。提供代理服务的电脑系统或其它类型的网络终端称为 代理服务器(英文:Proxy Server)

代理服务器的基本行为就是接收客户端发送的请求后转发给其他服务器。代理不改变请求 URI,并不会直接发送给前方持有资源的目标服务器。有一些 代理协议 会允许代理服务器改变 客户端的原始请求 或 目标服务器的原始响应,代理服务器允许用户输入代理地址,遮盖他们的原始网络活动,可以绕过 互联网过滤 成功访问目标服务器。

使用代理有以下几点功能:

  • 提高访问速度:通常代理服务器都有一个较大的缓冲区,当有外界的信息通过时,同时也将其保存到缓冲区中,当其他用户再访问相同的信息时,则直接由缓冲区中取出信息传给用户。
  • 控制对内部资源的访问:如某大学 FTP(前提是该代理地址在该资源的允许访问范围之内),使用教育网内地址段免费代理服务器,就可以用于对教育网开放的各类 FTP 下载上传,以及各类资料查询共享等服务。
  • 过滤内容:例如限制对特定计算机的访问,将一种语言的数据翻译成另一种语言,或是防御代理服务器两边的攻击性访问。
  • 隐藏真实 IP:可以通过代理服务器隐藏自己的 IP,免受攻击。但是只一个代理很难保证安全,更安全的方法是利用特定的工具创建代理链(如:Tor)。
  • 绕过自身 IP 访问限制,访问国外站点。例如:教育网和 169 网等网络用户可以通过代理访问国外网站。
  • 绕过内容过滤限制,访问被过滤网站。(em…不能细说了)

代理还可进一步细分为 缓存代理、透明代理

  • 缓存代理 代理转发响应时,缓存代理(Caching Proxy)会预先将资源的副本(缓存)保存在代理服务器上。当代理再次接收到对相同资源的请求时,就可以不从源服务器那里获取资源,而是将之前缓存的资源作为响应返回。
  • 透明代理 转发请求或响应时,不对报文做任何加工的代理类型被称为透明代理(Transparent Proxy)。反之,对报文内容进行加工的代理被称为非透明代理。

网关

在计算机网络中,网关(英语:Gateway) 是转发其他服务器通信数据的服务器,接收从客户端发送来的请求时,它就像自己拥有资源的源服务器一样对请求进行处理。有时客户端可能都不会察觉,自己的通信目标是一个网关。

由于历史原因,现代网络术语中对网关的定义与传统 TCP/IP 术语中的定义有所不同

  • 传统:在主机(又称终端系统,end system)中,数据包需经过 TCP/IP 四层协议处理,但是在网关(又称中介系统,intermediate system)只需要到达网际层(Internet layer),决定路径之后就可以转送。网关就相当于路由器。
  • 现代:网关(gateway)能在不同协议间移动资料,而路由器(router)是在不同网络间移动资料,相当于传统所说的 IP 网关(IP gateway)。

网关的工作机制和代理十分相似。而网关能使通信线路上的服务器提供非 HTTP 协议服务。

可以在客户端与网关之间的通信线路上加密以确保连接的安全。比如,网关可以连接数据库,使用 SQL 语句查询数据。另外,在 Web 购物网站上进行信用卡结算时,网关可以和信用卡结算系统联动。

隧道

隧道 又称 隧道协议(英语:Tunneling Protocol),使用一种网络协议(发送协议),将另一个不同的网络协议,封装在负载部分。
以达到能够在不兼容的网络上传输数据,以及在不安全的网络上提供一个安全路径

隧道是在相隔甚远的客户端和服务器两者之间进行中转,并保持双方通信连接的应用程序。隧道本身不会去解析请求。也就是说,请求保持原样中转给之后的服务器。隧道本身是透明的,客户端不用在意隧道的存在。

作用:

  • 规避防火墙:一个被防火墙阻挡的协议可被包在另一个没被防火墙阻挡的协议里
  • 加密通信:将明文网络流量加密以在互联网上安全地传输。隧道可按要求创建起一条与其他服务器的通信线路,届时使用 SSL 等加密手段进行通信。

六、“墙”

为啥我们在访问 https://www.youtube.com/、https://www.facebook.com/ 等网站时都会出现无法访问的情况呢?

公然聊这个有点小敏感,旨在学习交流,不含 “科学上网” 教程。不卖关子了,直接请出本小节的主角 —— GFW,就是它拦截了 YouTube 和 Facebook 等外国站点。这里我们不讨论利弊,只关心其中可能涉及的技术。

GFW,名称取自文章《The Great Firewall of China》,简称 Great Firewall,中文名叫 中国国家防火墙。是一套用来 过滤 和 监控 互联网的软硬件系统。不但能限制国内网民访问境外的某些站点,也能限制国外用户访问国内的站点。

GFW 的工作原理我们是无从知晓的,毕竟这是机密。好的,本篇完。

万字长文,掌握必备网络知识(上篇)

大哥息怒,虽然,GFW 的工作原理无从知晓,但是还是可以通过对 GFW 拦截行为的观察揣测一下可能使用的拦截方式。

防火墙

在开始前先来简单了解一下 防火墙

防火墙最基本的功能就是隔离网络,通过将网络划分成不同的区域(通常情况下称为 ZONE),制定出不同区域之间的访问控制策略来控制不同信任程度区域间传送的数据流。

主要分为 网络层防火墙 和 应用层防火墙 两种,也有些个别的防火墙是同时运作于网络层和应用层。

  • 网络层防火墙:在网络层运作,针对数据包的过滤,只允许符合预设规则的数据包通过。较新的防火墙能利用数据包的属性来进行过滤,如:IP 地址、端口号、服务类型(HTTP 或 FTP 等)。也能经由通信协议、TTL 值、来源的域名或网段…等
  • 应用层防火墙:在应用层运作,能够监控网络封包,阻挡不符合防火墙设定规则的封包进入、离开以及呼叫系统调用(system calls)

总结一下,大致是通过判断数据包的各种属性实现过滤,主要使用的属性有:ip、端口、dns 等。

GFW

以下内容非官方说法,只是各路网友通过抓包等手段,对 GFW 拦截行为的观察与测试总结出的 GFW 可能使用的拦截方式。

1. DNS 劫持

GFW 可能有一张 域名黑名单,对所有经过位于 TCP 与 UDP 的 53 端口上的域名查询请求进行 IDS 检测,一但发现与 域名黑名单 中相匹配的域名查询请求,GFW 作为中间设备会向查询者返回虚假结果。

现在好像不使用这种方式拦截了,中国大陆有 F、I、J 这 3 个根域 DNS 镜像,但是曾经因为多次 DNS 污染外国网络,威胁到了互联网安全和自由,北京的 I 根域服务器曾被断开与国际互联网的连接。虽然目前已恢复服务,但是可能是因为这个原因,现在访问 google.com 等网站,会返回真实 ip。

万字长文,掌握必备网络知识(上篇)
google.com DNS解析
万字长文,掌握必备网络知识(上篇)
google.com ip地址查询
2. IP 地址或传输层端口封锁

在早期,GFW 会使用 访问控制列表(ACL)技术 来封锁特定的 IP 地址,由此延伸可以封锁传输层协议(TCP 或 UDP)的特定目的端口的网络流量。

由于大量的 ACL 匹配会导致网络性能不佳,现在主要是采用了效率更高的 路由扩散技术 封锁特定 IP 地址,也就是通过将需要拦截的 IP 地址配置为 空路由 或者 黑洞设备,然后通过动态路由协议将相应配置路由扩散到公众互联网网络中,从将条件匹配拦截行为转为路由器的常规转发行为。

以下是对 google.com 其中一个 ip 地址的跟踪

万字长文,掌握必备网络知识(上篇)
traceert

在 183.56.65.54 这台设备处断开了。很可能 183.56.65.54 就是 GFW 的设备之一。

3. TCP 连接重置

TCP 重置(RESET)是 TCP 的一种消息,用于重置连接。

RESET 本身用于应对服务器意外重启等情况,当服务器端在没有客户端请求的端口或者其它连接信息不符时,系统的 TCP 协议栈就会给客户端回复一个 RESET 通知消息。

GFW 切断 TCP 连接的技术实际上就是比连接双方更快地发送 连接重置 消息,使连接双方认为对方终止了连接而自行关闭连接。

据说,相关技术已申请专利 “一种阻断 tcp 连接的方法和装置”。

结语

碍于本人不是 网工 出身,文中若有表述不当之处还请各位大佬指正。由于个人订阅号不具备评论功能,欢迎前往以下任一站点评论留言:

  1. https://melonfield.club/column/detail/cv2vjOWko75(个人独立开发运营网站)
  2. https://juejin.cn/post/6947326983156006949

参考:
  • https://blog.csdn.net/qq_38560742/article/details/88398270
  • https://blog.csdn.net/zhang6223284/article/details/81414149
  • https://zh.wikipedia.org/wiki/%E5%9F%9F%E5%90%8D
  • https://zh.wikipedia.org/wiki/DNS%E8%AE%B0%E5%BD%95%E7%B1%BB%E5%9E%8B%E5%88%97%E8%A1%A8
  • https://support.google.com/domains/answer/3251147?hl=zh-Hans
  • https://www.jianshu.com/p/215b5575107c
  • https://www.zhihu.com/question/36514327
  • https://zh.wikipedia.org/wiki/%E4%BB%A3%E7%90%86%E6%9C%8D%E5%8A%A1%E5%99%A8
  • https://zh.wikipedia.org/wiki/%E7%BD%91%E5%85%B3
  • https://zh.wikipedia.org/wiki/%E9%98%B2%E7%81%AB%E9%95%BF%E5%9F%8E


原文始发于微信公众号(MelonField):万字长文,掌握必备网络知识(上篇)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/93896.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!