网络中有趣的协议

介绍一些网络协议,主要内容来自极客时间趣谈网络协议.

直播中用到的协议

直播主要是视频,本质可以看作图片流。假设30帧的视频,像素1024*768,每个像素由RGB组成,每个8位,共24位。一秒钟的数据量30帧 × 1024 × 768 × 24 = 566,231,040Bits = 70,778,880Bytes达到4个G.

因此需要通过压缩或者说编解码减少数据传输,既然压缩,就要规定编解码协议

频流中的图片进行压缩,因为视频和图片有这样一些特点。

  1. 空间冗余:图像的相邻像素之间有较强的相关性,一张图片相邻像素往往是渐变的,不是突变的,没必要每个像素都完整地保存,可以隔几个保存一个,中间的用算法计算出来。
  2. 时间冗余:视频序列的相邻图像之间内容相似。一个视频中连续出现的图片也不是突变的,可以根据已有的图片进行预测和推断。
  3. 视觉冗余:人的视觉系统对某些细节不敏感,因此不会每一个细节都注意到,可以允许丢失一些数据。
  4. 编码冗余:不同像素值出现的概率不同,概率高的用的字节少,概率低的用的字节多,类似霍夫曼编码(Huffman Coding)的思路。

视频编码流派

流媒体协议名称如下

  • 名词系列一:AVI、MPEG、RMVB、MP4、MOV、FLV、WebM、WMV、ASF、MKV。 视频封装格式
  • 名词系列二:H.261、 H.262、H.263、H.264、H.265。 视频编码格式
  • 名词系列三:MPEG-1、MPEG-2、MPEG-4、MPEG-7。 MPEG指定的标准

  • 流派一:ITU(International Telecommunications Union)的VCEG(Video Coding Experts Group),这个称为国际电联下的VCEG。既然是电信,可想而知,他们最初做视频编码,主要侧重传输。名词系列二,就是这个组织制定的标准。

  • 流派二:ISO(International Standards Organization)的MPEG(Moving Picture Experts Group),这个是ISO旗下的MPEG,本来是做视频存储的。例如,编码后保存在VCD和DVD中。当然后来也慢慢侧重视频传输了。名词系列三,就是这个组织制定的标准。

后来,ITU-T(国际电信联盟电信标准化部门,ITU Telecommunication Standardization Sector)与MPEG联合制定了H.264/MPEG-4 AVC

视频文件介绍

简单来说,一个视频文件是由“集装箱(封装格式)”和包装在里面的“货物(编码格式)”共同组成的

视频文件后缀名(如 .mp4.mkv.avi.mov),在技术上被称为封装格式(Container Format)。

  • 它的本质:它就像一个集装箱文件夹
  • 它的作用:负责把视频轨道(只有画面)、音频轨道(只有声音)、字幕轨道以及视频的发布时间、导演等元数据(Metadata)打包、同步并粘合在一起,变成一个独立的文件。

常见的封装格式

MP4:目前最流行的封装格式,兼容性最强。无论是手机、电脑、电视、网页、汽车中控,几乎 100% 都能完美播放。

MKV:它的特点是容纳能力极强,一个文件里可以塞进好几种语言的音轨、十几国语言的特效字幕,电影高清爱好者最喜欢它。

MOV:苹果公司(Apple)开发的集装箱,苹果生态和专业影视剪辑(如 ProRes 编码)的常用格式。

AVI :微软(Microsoft)推出的一种封装格式

视频封装格式(也就是视频文件集装箱/后缀名)

它们不负责压缩画面,只负责把视频(画面)音频(声音)\和*字幕打包组合成一个文件。这 10 个格式记录了从 1990 年代 PC 刚兴起,到如今移动互联网、网页高清视频的整个多媒体进化史*

阵营一:现代全能霸主(目前最主流)

  1. MP4 (.mp4) —— 地表最强兼容性
  • 背景:由顶级组织 MPEG 推出(技术学名 MPEG-4 Part 14)。
  • 特点没有任何缺点就是它最大的优点。它完美平衡了文件体积、画质和网络流媒体传输。
  • 现状:绝对的统治者。不管是苹果、安卓、Windows、电视、网页还是车载系统,100% 完美支持,网络上 90% 的视频都是它。
  1. MKV (.mkv) —— 高清电影收藏家
  • 背景:著名的开源开放封装格式(Matroska)。
  • 特点号称“万能集装箱”。它最大的本事是“极能塞”。一个 MKV 文件里可以塞进好几条不同语言的音轨(国语、粤语、英语)、十几国语言的特效字幕,并且支持最新的高性能编码。
  • 现状:电影发烧友、动漫高清资源、PT 下载的最爱。

阵营二:互联网流媒体阵营(为了在线看视频而生)

  1. FLV (.flv) —— 网页网页视频的青春
  • 背景:Adobe 公司当年为了配合 Flash 播放器推出的格式。
  • 特点:体积小、加载快。在那个网络很慢的时代,它实现了“不需要下载完,点开就能在线看”的功能。
  • 现状:随着网页端 Flash 插件被历史彻底淘汰,FLV 已经退出了舞台,但在直播领域(如 HTTP-FLV 协议)仍有部分残留。
  1. WebM (.webm) —— 现代网页与动图杀手
  • 背景:由 Google 牵头主导的开源免专利费网页视频格式。
  • 特点:天生为了现代 HTML5 网页而生。它可以用极小的体积实现超高清画质,并且完美支持动态透明通道(Alpha Channel)
  • 现状:现在网页上的高画质动态表情包(取代低清 GIF)、网页背景短视频,大多是 .webm 格式。

阵营三:老牌操作系统巨头(当年的门户之见)

  1. MOV (.mov) —— 苹果生态的基石
  • 背景苹果公司(Apple) 开发的专用多媒体格式。
  • 特点:结构设计极其先进(后来的 MP4 就是参考 MOV 的架构制定的)。它能完美容纳影视工业级的高码率无损/半无损编码(如 Apple ProRes)。
  • 现状:iPhone 录制高质量视频、专业影视后期剪辑、Mac 生态的首选。
  1. WMV (.wmv) —— 微软早期的视频王牌
  • 背景微软(Microsoft) 专门为了和苹果 MOV、以及 Real 竞争推出的网络流媒体格式。
  • 特点:在 Windows 系统上拥有极高的兼容性,压缩率在当年很优秀,保护版权的 DRM 机制很严。
  • 现状:基本属于历史遗产,现在的微软自己也全面倒向了 MP4。
  1. ASF (.asf) —— WMV 的底层外壳
  • 背景:微软推出的高级流格式(Advanced Systems Format)。
  • 特点:严格来说,ASF 是集装箱,而 WMV 是里面的货物。ASF 是微软为了在网络上传输音视频而设计的。
  • 现状:极为少见,偶尔在早期的网络直播或老旧微软系统中能看到。

阵营四:历史的眼泪(基本已被淘汰)

  1. AVI (.avi) —— 1990年代的原生巨兽
  • 背景:微软在 1992 年(Windows 3.1 时代)推出的极其古老的格式。
  • 特点:架构太老。它不支持流媒体点播(必须全部下载完才能播放)、不支持特效字幕、不支持动态帧率。
  • 现状:已经彻底落伍。现在除了某些特殊行业的老设备、行车记录仪外,基本见不到了。
  1. RMVB / RM (.rmvb) —— 中国互联网初期的“盗版电影之王”
  • 背景:RealNetworks 公司推出的格式。
  • 特点:那个用电话线拨号上网、网速只有几百 KB 的时代,RMVB 靠着惊人的压缩率实现了“小体积、能看清”。它统治了当年的电影下载网站(如各种影音先锋、天天动听时代)。
  • 现状:由于它闭源、收费,且随着网速变快、高清时代来临,其画质上限不足的缺点暴露无遗,如今已彻底绝迹。

阵营五:行业最高法院

  1. MPEG (.mpg / .mpeg) —— 国际标准的鼻祖
  • 背景:ISO 国际标准组织(MPEG 组织)制定的初代官方格式。
  • 特点:它是 VCD(MPEG-1)DVD(MPEG-2) 光盘时代的底层封装格式。
  • 现状:作为独立的文件后缀已经很少见,但它的家族后代(MPEG-4 也就是 MP4)正在统治世界。

常见编码格式

为什么要编码?:未经压缩的原始视频极其恐怖。一部 1080P、2小时的原始电影可能高达 几百GB 甚至上万GB,互联网根本无法传输。为了能让大家在网上流畅看视频,必须对画面进行极限压缩。

H.264 :它是一套极其经典的视频压缩算法标准(又称 AVC)。它能把巨无霸一样的原始视频,在保证肉眼看不出明显画质损失的前提下,压缩掉 90% 以上的体积。

H.265 (HEVC):H.264 的升级版。它的压缩效率翻倍,在同等画质下,体积只有 H.264 的一半。现在的 4K 高清电影、iPhone 的高效率录像基本都在使用它,缺点是对播放设备的 CPU 解码性能要求更高。

AV1:一种全新的、开源免专利费的下一代编码格式,各大互联网巨头(谷歌、奈飞、微软等)正在全力推广,各大新显卡也已经全面支持硬件解码。

  1. H.261(1988年)—— 视频压缩的“开山鼻祖”
  • 诞生背景:当时互联网还没普及,大家通信靠的是昂贵且带宽极低的 ISDN 电话线。
  • 核心突破:它是人类历史上第一个流媒体视频压缩标准。它首次确立了现代视频压缩的核心框架:混合编码架构(将画面切成 $16 \times 16$ 的“宏块”,并引入了帧内预测运动补偿)。直到今天的 H.265,依然在沿用这一套核心思想。
  • 应用场景:最早期的早期电视电话会议。它的分辨率低得可怜(只有 $352 \times 288$),但在当时能看到会动的真人画面,已经是科技奇迹了。
  1. H.262(1994年)—— 广播电视与 DVD 的功臣
  • 诞生背景:单纯的电视会议标准满足不了人们对高质量电影、电视节目的渴望。于是 ITU-T 与 ISO 组织联手,将该技术同时命名为 MPEG-2 Part 2
  • 核心突破:首次支持隔行扫描(Interlaced Video)和多声道音频,大幅度提升了高动态画面(如体育比赛)的清晰度。
  • 应用场景:统治了整个 DVD 光盘时代。直到今天,全球各国的无线数字电视、有线电视广播,底层依然有很大一部分在用 H.262/MPEG-2 进行传输。
  1. H.263(1996年)—— 早期移动网络与视频通话的先驱
  • 背景与突破:专为低码率(低带宽)的网络环境深度优化。它改进了运动补偿算法,让视频在极烂、极卡的网络下,也能勉强保持连贯,不至于满屏马赛克。

  • 应用场景:它是 3G 时代手机视频通话(如 3GPP 规范)的绝对主力,也是早期 Flash 视频(FLV 格式)、早期的腾讯 QQ 视频聊天、

    3GP 格式手机视频背后的压缩功臣。

  1. H.264 / AVC(2003年)—— 统治世界的“格式之王”
  • 核心突破:技术跨代升级,同样命名为 MPEG-4 Part 10 (AVC)。相比 H.263,它的压缩效率直接翻倍。它引入了更精细的像素运动估计、多帧参考和更高级的熵编码。
  • 应用场景它彻底开启了现代互联网视频时代。 如今你手机录的视频、B站/YouTube/抖音上的短视频、网络高清直播、蓝光光盘(Blu-ray),超过 80% 依然在用 H.264。它的硬件解码芯片已经做到了所有手机、电脑、电视的底层,播放它最省电、最流畅。
  1. H.265 / HEVC(2013年)—— 超高清 4K/8K 的基石
  • 核心突破:同样命名为 MPEG-H Part 2 (HEVC)。面对 4K/8K 时代动辄数十 GB 的体积,H.265 将传统的 $16 \times 16$ 宏块升级为了最大 $64 \times 64$ 的 CTU(编码树单元)
  • 惊人效果在画质完全一样的前提下,体积比 H.264 再缩减 50%!
  • 应用场景:现代智能手机(如 iPhone 的“高效格式”)、4K/8K 超高清电影、各大视频网站的“极清 4K”档位。

H.265 极其优秀,但因为它的专利授权费极其昂贵且混乱,导致谷歌、奈飞、亚马逊等互联网巨头非常不满。

于是,业界在 H.265 之后分化出了两条路:

  1. 官方正统续作:ITU 组织在 2020 年推出了 H.266 (VVC),压缩率比 H.265 再提升 50%,专为未来 8K 和 VR 视频准备。
  2. 开源免费联盟:巨头们联合搞出了 AV1 编码,完全免专利费,压缩率看齐甚至超越 H.265。目前 B站、YouTube、Netflix 正在疯狂把后台视频转码为 AV1。

网络协议将编码好的视频流,从主播端推送到服务器,在服务器上有个运行了同样协议的服务端来接收这些网络包,从而得到里面的视频流,这个过程称为接流

服务端接到视频流之后,可以对视频流进行一定的处理,例如转码,也即从一个编码格式,转成另一种格式。因为观众使用的客户端千差万别,要保证他们都能看到直播。

流处理完毕之后,就可以等待观众的客户端来请求这些视频流。观众的客户端请求的过程称为拉流

如果有非常多的观众,同时看一个视频直播,那都从一个服务器上拉流,压力太大了,因而需要一个视频的分发网络,将视频预先加载到就近的边缘节点,这样大部分观众看的视频,是从边缘节点拉取的,就能降低服务器的压力。

所以整个直播流程,就可分为主播端采样编码推流,服务器接流处理分发,观众客户端拉流解码播放。

image-20260531151721013

编码流程

视频序列分成三种帧。

  • I帧,也称关键帧。里面是完整的图片,只需要本帧数据,就可以完成解码。
  • P帧,前向预测编码帧。P帧表示的是这一帧跟之前的一个关键帧(或P帧)的差别,解码时需要用之前缓存的画面,叠加上和本帧定义的差别,生成最终画面。
  • B帧,双向预测内插编码帧。B帧记录的是本帧与前后帧的差别。要解码B帧,不仅要取得之前的缓存画面,还要解码之后的画面,通过前后画面的数据与本帧数据的叠加,取得最终的画面。

I 帧(Intra-coded picture,帧内编码帧)

  • 别名:关键帧(Keyframe)。
  • 特点:它是一张完整的、独立的图片,类似于一张高质量的 JPEG 照片。
  • 压缩方式:只进行“帧内压缩”(只去除一张图片内部的冗余信息),不依赖任何其他画面。
  • 作用:它是视频序列的“锚点”。当你在播放器里拖动进度条快进时,播放器必须先找到最近的 I 帧才能开始解码渲染。

P 帧(Predictive-coded picture,前向预测编码帧)

  • 别名:差别帧。
  • 特点:它不记录完整的图片,而只记录自己与前一个 I 帧(或前一个 P 帧)的“差异”和运动矢量
  • 压缩方式:帧间压缩(向前参考)。
  • 作用:由于大多数视频相邻两帧的画面变化很小(比如只有人在动,背景没动),P 帧通过只存储变化的部分,数据量通常只有 I 帧的 1/2 到 1/4,大大节省了空间。

B 帧(Bidirectionally predictive-coded picture,双向预测编码帧)

  • 别名:双向参考帧。
  • 特点:它是压缩率最高的帧。它不仅参考前面已经出现的画面,还要参考后面即将出现的画面,通过两头对比,计算出自己的画面。
  • 压缩方式:帧间压缩(双向参考)。
  • 作用:B 帧只记录极少的运动变化信息,数据量极小,通常只有 I 帧的 1/10 左右。

I帧最完整,B帧压缩率最高,而压缩后帧的序列,应该是在IBBP的间隔出现的。这就是通过时序进行编码

image-20260531155913719

在一帧中,分成多个片,每个片中分成多个宏块,每个宏块分成多个子块,这样将一张大的图分解成一个个小块,可以方便进行空间上的编码。尽管时空非常立体地组成了一个序列,但是总归还是要压缩成一个二进制流。这个流是有结构的,是一个个的网络提取层单元NALUNetwork Abstraction Layer Unit)。变成这种格式就是为了传输,因为网络上的传输,默认的是一个个的包,因而这里也就分成了一个个的单元。

每一个NALU首先是一个起始标识符,用于标识NALU之间的间隔;然后是NALU的头,里面主要配置了NALU的类型;最终Payload里面是NALU承载的数据。

在NALU头里面,主要的内容是类型NAL Type

  • 0x07表示SPS,是序列参数集, 包括一个图像序列的所有信息,如图像尺寸、视频格式等。
  • 0x08表示PPS,是图像参数集,包括一个图像的所有分片的所有相关信息,包括图像类型、序列号等

image-20260531155954397

在传输视频流之前,必须要传输这两类参数,不然无法解码。为了保证容错性,每一个I帧前面,都会传一遍这两个参数集合。

如果NALU Header里面的表示类型是SPS或者PPS,则Payload中就是真正的参数集的内容。

如果类型是帧,则Payload中才是正的视频数据,当然也是一帧一帧存放的,前面说了,一帧的内容还是挺多的,因而每一个NALU里面保存的是一片。对于每一片,到底是I帧,还是P帧,还是B帧,在片结构里面也有个Header,这里面有个类型,然后是片的内容。

这样,整个格式就出来了,一个视频,可以拆分成一系列的帧,每一帧拆分成一系列的片,每一片都放在一个NALU里面,NALU之间都是通过特殊的起始标识符分隔,在每一个I帧的第一片前面,要插入单独保存SPS和PPS的NALU,最终形成一个长长的NALU序列

推流流程

使用RTMP协议推送网络包。RTMP是基于TCP的,因而肯定需要双方建立一个TCP的连接。在有TCP的连接的基础上,还需要建立一个RTMP的连接,也即在程序里面,你需要调用RTMP类库的Connect函数,显示创建一个连接。

RTMP也需要先简历连接,协商本版号和时间戳等信息。

客户端发送C0、C1、 C2,服务器发送S0、 S1、 S2。

首先,客户端发送C0表示自己的版本号,不必等对方的回复,然后发送C1表示自己的时间戳。

服务器只有在收到C0的时候,才能返回S0,表明自己的版本号,如果版本不匹配,可以断开连接。

服务器发送完S0后,也不用等什么,就直接发送自己的时间戳S1。客户端收到S1的时候,发一个知道了对方时间戳的ACK C2。同理服务器收到C1的时候,发一个知道了对方时间戳的ACK S2。于是,握手完成。

握手之后,双方需要互相传递一些控制信息,例如Chunk块的大小、窗口大小等。

真正传输数据的时候,还是需要创建一个流Stream,然后通过这个Stream来推流publish。推流的过程,就是将NALU放在Message里面发送,这个也称为RTMP Packet包。Message的格式就像这样。

image-20260531180233027

发送的时候,去掉NALU的起始标识符。RTMP在收发数据的时候并不是以Message为单位的,而是把Message拆分成Chunk发送,而且必须在一个Chunk发送完成之后,才能开始发送下一个Chunk。每个Chunk中都带有Message ID,表示属于哪个Message,接收端也会按照这个ID将Chunk组装成Message。

连接的时候,设置的Chunk块大小就是指这个Chunk。将大的消息变为小的块再发送,可以在低带宽的情况下,减少网络拥塞。

假设一个视频的消息长度为307,但是Chunk大小约定为128,于是会拆分为三个Chunk。

第一个Chunk的Type=0,表示Chunk头是完整的;头里面Timestamp为1000,总长度Length 为307,类型为9,是个视频,Stream ID为12346,正文部分承担128个字节的Data。

第二个Chunk也要发送128个字节,Chunk头由于和第一个Chunk一样,因此采用Chunk Type=3,表示头一样就不再发送了。

第三个Chunk要发送的Data的长度为307-128-128=51个字节,还是采用Type=3。

image-20260531180615089

拉流流程

看直播的观众就可以通过RTMP协议从流媒体服务器上拉取,但是这么多的用户量,都去同一个地方拉取,服务器压力会很大,而且用户分布在全国甚至全球,如果都去统一的一个地方下载,也会时延比较长,需要有分发网络。

分发网络分为中心边缘两层。边缘层服务器部署在全国各地及横跨各大运营商里,和用户距离很近。中心层是流媒体服务集群,负责内容的转发。智能负载均衡系统,根据用户的地理位置信息,就近选择边缘服务器,为用户提供推/拉流服务。中心层也负责转码服务,例如,把RTMP协议的码流转换为HLS码流。

类似地,客户端拉流被,客户端通过RTMP协议拉取,然后组合为NALU,解码成视频格式进行播放。

P2P协议

无论是HTTP的方式,还是FTP的方式,都有一个比较大的缺点,就是难以解决单一服务器的带宽压力, 因为它们使用的都是传统的客户端服务器的方式。

后来,一种创新的、称为P2P的方式流行起来。P2P就是peer-to-peer。资源开始并不集中地存储在某些设备上,而是分散地存储在多台设备上。这些设备我们姑且称为peer。

想要下载一个文件的时候,你只要得到那些已经存在了文件的peer,并和这些peer之间,建立点对点的连接,而不需要到中心服务器上,就可以就近下载文件。一旦下载了文件,你也就成为peer中的一员,你旁边的那些机器,也可能会选择从你这里下载文件,所以当你使用P2P软件的时候,例如BitTorrent,往往能够看到,既有下载流量,也有上传的流量,也即你自己也加入了这个P2P的网络,自己从别人那里下载,同时也提供给其他人下载。可以想象,这种方式,参与的人越多,下载速度越快。

通过.torrent文件,也就是种子,知道文件信息。.torrent文件由两部分组成,分别是:announcetracker URL)和文件信息

文件信息里面有这些内容。

  • info区:这里指定的是该种子有几个文件、文件有多长、目录结构,以及目录和文件的名字。
  • Name字段:指定顶层目录名字。
  • 每个段的大小:BitTorrent(简称BT)协议把一个文件分成很多个小段,然后分段下载。
  • 段哈希值:将整个种子中,每个段的SHA-1哈希值拼在一起。

下载时,BT客户端首先解析.torrent文件,得到tracker地址,然后连接tracker服务器。tracker服务器回应下载者的请求,将其他下载者(包括发布者)的IP提供给下载者。下载者再连接其他下载者,根据.torrent文件,两者分别对方告知自己已经有的块,然后交换对方没有的数据。此时不需要其他服务器参与,并分散了单个线路上的数据流量,因此减轻了服务器的负担。

下载者每得到一个块,需要算出下载块的Hash验证码,并与.torrent文件中的对比。如果一样,则说明块正确,不一样则需要重新下载这个块。这种规定是为了解决下载内容的准确性问题。

这种方式特别依赖tracker。tracker需要收集下载者信息的服务器,并将此信息提供给其他下载者,使下载者们相互连接起来,传输数据。虽然下载的过程是非中心化的,但是加入这个P2P网络的时候,都需要借助tracker中心服务器,这个服务器是用来登记有哪些用户在请求哪些资源。

所以,这种工作方式有一个弊端,一旦tracker服务器出现故障或者线路遭到屏蔽,BT工具就无法正常工作了。

DHT去中心化网络

后来就有了一种叫作DHTDistributed Hash Table)的去中心化网络。每个加入这个DHT网络的人,都要负责存储这个网络里的资源信息和其他成员的联系信息,相当于所有人一起构成了一个庞大的分布式存储数据库。

有一种著名的DHT协议,叫Kademlia协议

任何一个BitTorrent启动之后,它都有两个角色。一个是peer,监听一个TCP端口,用来上传和下载文件,这个角色表明,我这里有某个文件。另一个角色DHT node,监听一个UDP的端口,通过这个角色,这个节点加入了一个DHT的网络。在DHT网络里面,每一个DHT node都有一个ID。这个ID是一个很长的串。每个DHT node都有责任掌握一些知识,也就是文件索引,也即它应该知道某些文件是保存在哪些节点上。它只需要有这些知识就可以了,而它自己本身不一定就是保存这个文件的节点。

数据中心

数据中心里面是服务器。服务器被放在一个个叫作机架Rack)的架子上面。数据中心的入口和出口也是路由器,由于在数据中心的边界,就像在一个国家的边境,称为边界路由器Border Router)。为了高可用,边界路由器会有多个。

一般家里只会连接一个运营商的网络,而为了高可用,为了当一个运营商出问题的时候,还可以通过另外一个运营商来提供服务,所以数据中心的边界路由器会连接多个运营商网络。

数据中心里面往往有非常多的机器,当塞满一机架的时候,需要有交换机将这些服务器连接起来,可以互相通信。这些交换机往往是放在机架顶端的,所以经常称为TORTop Of Rack交换机

当一个机架放不下的时候,就需要多个机架,还需要有交换机将多个机架连接在一起。这些交换机对性能的要求更高,带宽也更大。这些交换机称为汇聚层交换机Aggregation Layer)。

image-20260531211311654

数据中心里面的每一个连接都是需要考虑高可用的。这里首先要考虑的是,如果一台机器只有一个网卡,上面连着一个网线,接入到TOR交换机上。如果网卡坏了,或者不小心网线掉了,机器就上不去了。所以,需要至少两个网卡、两个网线插到TOR交换机上,但是两个网卡要工作得像一张网卡一样,这就是常说的网卡绑定bond)。

这就需要服务器和交换机都支持一种协议LACPLink Aggregation Control Protocol)。它们互相通信,将多个网卡聚合称为一个网卡,多个网线聚合成一个网线,在网线之间可以进行负载均衡,也可以为了高可用作准备。

网卡有了高可用保证,但交换机还有问题。如果一个机架只有一个交换机,它挂了,那整个机架都不能上网了。因而TOR交换机也需要高可用,同理接入层和汇聚层的连接也需要高可用性,也不能单线连着

最传统的方法是,部署两个接入交换机、两个汇聚交换机。服务器和两个接入交换机都连接,接入交换机和两个汇聚都连接,当然这样会形成环,所以需要启用STP协议,去除环,但是这样两个汇聚就只能一主一备了。

image-20260531211434589

另一种方法是,将多个交换机形成一个逻辑的交换机,服务器通过多根线分配连到多个接入层交换机上,而接入层交换机多根线分别连接到多个交换机上,并且通过堆叠的私有协议,形成双活的连接方式。

image-20260531211452050

汇聚层将大量的计算节点相互连接在一起,形成一个集群。在这个集群里面,服务器之间通过二层互通,这个区域常称为一个PODPoint Of Delivery),有时候也称为一个可用区Available Zone)。

当节点数目再多的时候,一个可用区放不下,需要将多个可用区连在一起,连接多个可用区的交换机称为核心交换机

VPN

有的公司有多个数据中心,需要将多个数据中心连接起来,或者需要办公室和数据中心连接起来。这该怎么办呢?

  • 第一种方式是走公网,但是公网太不安全,你的隐私可能会被别人偷窥。
  • 第二种方式是租用专线的方式把它们连起来,这是土豪的做法,需要花很多钱。
  • 第三种方式是用VPN来连接,这种方法比较折中,安全又不贵。

VPN,全名Virtual Private Network虚拟专用网,就是利用开放的公众网络,建立专用数据传输通道,将远程的分支机构、移动办公人员等连接起来。

image-20260531212927889

VPN工作方式

VPN通过隧道技术在公众网络上仿真一条点到点的专线,是通过利用一种协议来传输另外一种协议的技术,这里面涉及三种协议:乘客协议隧道协议承载协议

IPsec VPN。这是基于IP协议的安全隧道协议,为了保证在公网上面信息的安全,因而采取了一定的机制保证安全性。

  • 机制一:私密性,防止信息泄露给未经授权的个人,通过加密把数据从明文变成无法读懂的密文,从而确保数据的私密性。 前面讲HTTPS的时候,说过加密可以分为对称加密和非对称加密。对称加密速度快一些。而VPN一旦建立,需要传输大量数据,因而我们采取对称加密。但是同样,对称加密还是存在加密密钥如何传输的问题,这里需要用到因特网密钥交换(IKE,Internet Key Exchange)协议。
  • 机制二:完整性,数据没有被非法篡改,通过对数据进行hash运算,产生类似于指纹的数据摘要,以保证数据的完整性。
  • 机制三:真实性,数据确实是由特定的对端发出,通过身份认证可以保证数据的真实性。

image-20260531213609789

有了IPsec VPN之后,客户端发送的明文的IP包,都会被加上ESP头和IP头,在公网上传输,由于加密,可以保证不被窃取,到了对端后,去掉ESP的头,进行解密。

-------------本文结束感谢您的阅读-------------
感谢阅读.

欢迎关注我的其它发布渠道