“飞行错觉”:爆发飞行事故最危险的因素

from : http://m.sirenji.com/article/60277.html

 飞行中会出现很多种飞行错觉,有些会导致空间方位迷航,其他的会引起降落偏差。飞行错觉也是导致飞行事故最危险的因素之一。人的内耳内有很复杂的空间立体方位感知系统,飞行中任何能扰乱该系统正常工作的动作或视觉表象都可能产生飞行错觉。要防止飞行错觉的发生只有充分的相信飞行仪表或参考地面可靠的地标。

  会导致导致空间方位迷航的飞行错觉有:

  1、倾斜(Leans)

  当从一个慢慢进入的、稳定的、连续的转弯姿态突然改出时,飞行员就会产生一个向相反方向倾斜的错觉,迷航的飞行员就会向相反方向压坡度,从而使飞机进入一个非正常姿态,直到飞行错觉消失。

  2、科氏错觉(Coriolis illusion)

  当飞机在长时间的稳定坡度转弯状态时,如果飞行员有突然的头部垂直于转弯弧线的运动时,人体内的感知系统会给飞行员一个飞机在围绕完全不同的轴线运动的错觉。迷航的飞行员这时会尝试让飞机进入一个危险的姿态来终止飞机的正常运动状态。为防止这类错觉的发生,不要在飞行中有突然的头部动作,尤其当飞机在仪表条件下匀速压坡度转弯时。

  3、墓地螺旋(Graveyard spin)

  当把飞机快速从螺旋状态改出时,人的感觉系统会给飞行员一个飞机向相反方向进入螺旋的错觉,这时迷航的飞行员就会采取错误的动作而让飞机再次进入螺旋状态。

  4、墓地螺旋下落(Graveyard spiral)

  如果飞机是匀角速度螺旋下降,飞行员可能并未意识到飞机在旋转却看到高度在快速降低,于是他会快速拉动驾驶盘试图将飞机拉起,结果却是加剧了螺旋状态使飞机坠落更快。

  5、身体加速度错觉(Somatogravic illusion)

  当飞机突然加速时会给人一个飞机在抬头的错觉,迷航的飞行员会前推驾驶盘给飞机一个低头的姿态而造成俯冲。相反,当飞机快收油门突然减速时会给人一个飞机低头的错觉,迷航的飞行员会快速拉杆而使飞机进入爬升姿态。

  6、倒置(Inversion)

  飞机快速从爬升状态改为平飞状态会给飞行员一个向后翻滚的错觉,迷航的飞行员会快速推杆使飞机低头,从而进入危险姿态。

  7、升降梯错觉(Elevator illusion)

  上升气流会给飞机一个垂直向上的瞬时加速度,给人一个飞机爬升的错觉,迷航的飞行员会认为飞机在爬升而改变飞机到低头姿态;下降气流则会产生相反的错觉。

  8、虚假地平线(False horizon)

  层云倾斜的上表面、模糊的地平线、夜间星星和地表灯光相互影响、以及比较特殊的地表面都会给飞行员一个飞机并不是在平飞而是带坡度的错觉,这时迷航的飞行员会改变飞机的坡度而让飞机进入非正常姿态。

  9、自动运动(Autokinesis)

  黑暗中,盯一个静止的灯光数十秒,这个灯光就像是在开始移动。迷航的飞行员也许会放弃这个可靠的地标参考而失去对飞机的控制。

  会引起降落偏差的飞行错觉有:

  1、宽度错觉

  一个比正常宽度窄的跑道会产生一个飞机比正常曲线高的错觉,飞行员认识不到这一点会飞低高度进场,从而增大了碰撞地面障碍物的可能性;相反,一个比正常宽度宽的跑道会产生一个飞机比正常曲线低的错觉,飞行员认识不到这一点会飞高高度进场,从而增加了飞机重着陆和冲出跑道的可能性。

  2、跑道及地表坡度错觉

  一个有上坡度的跑道或地表会产生一个飞机比实际高度高的错觉,认识不到这一点的飞行员会飞低高度进场;反之,则有相反的影响。

  3、无表象地表错觉

  如果地表缺乏特征识别物,如水中降落、飞越漆黑的区域、刚下大雪的跑道附近,没有任何明显的地面特征供飞行员参考高度,飞行员往往此时会飞相对较低的高度。

  4、大气中的错觉

  有雨的风挡会产生一个高高度错觉,有霾则会产生一个离跑道距离较实际距离远的错觉,大雾弥漫也会产生一个飞机在较高高度的错觉。

  5、地面灯光错觉

  地面上直线排列的灯光,如路灯或甚至是行驶的火车窗灯,会被飞行员误认为是跑道或进近灯光。如果跑道处在缺乏其他地表灯光的地形内,夜间的跑到灯光会给飞行员一个离跑道很近的错觉,认识不到这一点的飞行员就会飞一个很低的高度进近。

2020-08-10

一个人独自在没有信号的天台静静地仰望星空,透过望远镜观察恒星和星云,轻轻拂过的是夜晚的凉风,不用在意时间的流逝,默默地感受心灵与宇宙的联系

什么是惯性导航系统?

from : https://www.oxts.com/zh/what-is-inertial-navigation-guide/

GPS 出现之前的生活

由于现在甚至连厨房用具都装有 GPS 接收器,很难想象 GPS 出现之前的生活是怎样的。人们是如何生活的?甚至可能有不见其人的声音告诉您左转、右转以及在可能时掉头?对于依赖卫星导航仪和智能手机的一代人而言,这是一个严重的问题—人们到底是怎么知道自己在哪里的?
事实是,在 GPS 出现以前,如果普通人想知道他们在哪里,他们必须求助于地图、观察和极其不准确的假设。而且,如果情况真的很糟,他们就问路。然而,对于拥有大量的金钱、充足的空间和真正需要知道自己所在位置的个人和行业来说,他们的救星经常以 INS(惯性导航系统)的形式出现。

什么是惯性导航系统?

惯性导航系统有各种形状和尺寸。它们的共同点是使用多个惯性传感器,以及某种形式的中央处理单元来跟踪这些传感器的测量值。INS 使用的传感器通常是陀螺仪和加速度计,并且内部通常都有几种传感器。稍后我们将介绍 INS 的实际工作方式,现在,最重要的事情是认识它们与 GPS 的区别 - 您可能更熟悉 GPS。

打开 GPS 接收器,假设一切正常,在很短的时间后,它将生成位置测量值。接收器生成的位置测量值非常具体,不存在 GPS 的不精确性。它指出“您在这个纬度和这个经度”- 换句话说,它用已知的坐标系提供给我们一个绝对位置。惯性导航系统不能这样工作。就它们而言,它们生成的测量值是相对于他们最后已知的位置。因此,即使在惯性导航系统已经打开几分钟后,它也不能说“您在这个纬度和这个经度”,但它可能会说,“您没有从开始位置移动“。

那么,为什么人们使用惯性导航系统呢?如果他们不能告诉你你在哪里,他们怎么能把人类导航到月球上,为什么潜艇不一直坠毁,飞机和导弹是怎么找到他们的?谢天谢地,这个问题的答案很简单。惯性导航系统可以判断它相对于出发地的位置,因此,如果您告诉 INS 其出发位置,它可以轻松地根据自己的测量结果得出现在的位置。这就是宇宙飞船、潜艇、飞机和导弹使用 INS 成功导航的方式,因为它们知道它们从哪里开始。

INS 实际上是如何运行的?

惯性导航系统包括两个不同的部分。第一个是 IMU(惯性测量单元),有时也称为 IRU(惯性参考单元)。这是提供加速度和角速度测量的加速度计和陀螺仪的统称。第二部分是导航计算机。导航计算机获取来自 IMU 的测量值,并使用它们来计算 INS 的相对位置、方向和速度。

基本上使用两种导航计算机;稳定平台和捷联导航仪。稳定平台使用真实的旋转机械陀螺仪实现平台稳定,而不受 INS 旋转影响。因此,当惯性导航系统旋转时,其内部的稳定平台不会旋转。这样,系统就可以了解其方向,并可以利用来自加速度计的测量值。这类系统的缺点是万向节死锁(参见陀螺仪部分以获取完整说明)、高成本和复杂性。

相反,捷联式导航仪内部的传感器不会独立于 INS 进行移动。如果您愿意,它们会固定下来。这克服了与稳定平台相关的许多问题,这也是现在更多人买得起惯性导航系统的主要原因。与稳定平台内的旋转机械陀螺仪不同,捷联式导航仪内部使用的陀螺仪通常为 MEMS(微机电系统),似乎没有任何活动部件。实际上,最好将它们视为角速度传感器,而不是陀螺仪,尽管人们通常这样叫。

那么,INS 是如何工作的呢?为了捕获在 3D 空间中导航所需的测量值,惯性传感器的轴以相互垂直的方式布置。换句话说,每条轴与其他两条轴成 90° 角(参见下图)。

IMU 参照系

IMU 参照系:此图像显示了惯性导航系统用于测量移动和方向的三条轴 (xyz)。INS 中的轴位置是固定的,因此它们随之旋转。每条轴都以两个方向测量 - 图像中的箭头显示哪个方向读数为正。例如,如果 INS 沿绿色箭头的方向加速,则 y 轴将显示正加速度。如果 INS 以相反方向加速,我们将看到沿 y 轴为负加速度。每条轴的角速度也会被测量。如果 INS 按照圆形红色箭头指示旋转,我们将在 x 轴陀螺仪上看到正读数。如果 INS 以相反的方向旋转,我们将在 x 轴陀螺仪上看到负值。

通过沿着(和围绕)x 轴、y 轴和 z 轴进行测量,导航计算机可以了解其移动和旋转方式。在 IMU 参照系图像中,您可以清楚地看到测量 xyz 轴是如何在我们的产品中布局的。您还可以看到一个圆形箭头,显示 x 轴陀螺如何测量角速度。

值得指出的是,尽管每个箭头都指向一个方向,但陀螺仪和加速度计仍沿着或围绕每条轴在两个方向上进行测量。箭头仅指示传感器将哪个方向视为正向运动。因此,如果产品向下加速(沿蓝色箭头方向),则 z 轴加速度计将指示正值;如果产品向上加速,则 Z 轴加速度计将显示负值。

参照系

此时,我们应该解释 IMU 参照系等术语的含义。刚才我们谈到了当产品加速下降时,z 轴加速度计上的正测量值,但是如果我们将 INS 翻转到如下图所示的方向,会发生什么呢?现在,当 INS 向下加速时,z 轴将记录一个负值。这就是为什么参照系很重要的原因。

INS 参考框架

对您我来说,向上意味着我们之上,下面意味着我们之下。同样,我们都知道哪条路都是分左右方向的,如果我说我向前移动了 1 米,您可以准确地想象我做了什么——因为您把自己放到了我的参照系中。作为人类,我们非常擅长这样做。事实上,我们发现”从另一个角度看待事物”是如此容易,以至于很容易忘记每个对象都有自己的参照系,而我们如何描述运动取决于所使用的参照系。

例如,想象自己站在火车站台上。想象您可以看到有人站在火车车厢内寻找座位。当火车驶出车站时,此人开始向火车后方行走。从那个人的角度来看,他们正以恒定的速度向前走。但是对您来说,从站台的参照系看火车时,那个人最初似乎并没有移动 - 因为他们向前行走(在其框架中)的速度与火车在其框架中前进的速度相同。但是,随着火车速度的加快,此人似乎朝火车前进的方向移动。对于您来说,他们正在向后移动,但是对于火车上的人来说,他们仍在向前移动。两种观点都是正确的,只是使用了不同的参照系。

幸运的是,大多数惯性导航系统足够智能,能够将运动从一个参照系转换到另一个参照系,只要先给它们一点点信息即可。因此,想象一下将 INS 倒置,使 z 轴指向上方。只要我们在开始之前告诉 INS 它是倒置的,那么当您向上移动您的手时,惯性测量单元将在 z 轴上记录一个正值(就其而言指向下方),但是惯性导航系统(计算机)知道它实际上被您倒置了。所以它旋转所有的测量值,把它们放到一个对我们有用的不同参照系中;一个表明 INS 正在向上移动的参照系。

加速计

加速计是大多数惯性导航系统中使用的传感器类型之一。您可以从它们的名字中猜出它们测量的是加速度而不是速度。根据处理物体物理特性的时间长度,您可能会记得 SI 的加速度单位是 m/s²(即:米/平方秒)。值 1 m/s² 表示,每过去一秒,物体的速度就会增加 1 m/s(即:米/秒)。

尽管惯性导航系统无法直接测量速度,但是通过跟踪加速度的大小以及持续时间,惯性导航系统可以通过将加速度乘以时间来轻松计算出速度是多少。例如,如果 5 秒的加速度为 2.5 m/s²,并且假定初始速度为 0 m/s,则 INS 现在必须具有 12.5 m/s (2.5 m/s2 = 5 s = 12.5 m/s) 的速度。距离也可以计算出来。使用 s = 0.5 × at² 求出,其中 s 是距离,a 是加速度,t 是时间。在这种情况下,假设惯性导航系统在 x 轴上看到加速度,则可以算出它向前移动了31.25 米 (0.5×2.5 m/s²×5s² = 31.25 m)。

因此,拥有三个加速计非常有用,特别是当它们以相互垂直的方式排列时,因为它们允许 INS 测量 3D 空间中的加速度并计算行驶距离和当前速度。但是,当人们第一次看到从三轴加速计输出的数据时,往往会感到困惑,为什么向下的轴显示 -9.81 m/s² 的加速度?为了回答这个问题,我们需要研究加速计的工作原理以及它们实际测量的是什么。

此时,您可能会想,“等等!之前您说过加速计可以测量加速度”。尽管加速计确实可以测量加速度,但我们不想混淆问题,说加速计实际测量的是相对于自由落体的加速度,这就是为什么静止时垂直加速计的读数为 -9.81 m/s² 的原因。如果还是不明白,不要担心,下一节将对此进行说明。

适当的加速度

您无疑听说过艾萨克·牛顿爵士的名字,并记得他写了一些运动定律。牛顿第一定律告诉我们,除非有力作用在物体上,否则它将保持完全静止,或以相同的速度持续运动。换句话说,要使某物运动或改变其速度,我们需要施加力。他的第二条定律描述了物体的加速度与作用在物体上的力以及物体的质量之间的关系。可以总结为力=质量×加速度 (F = ma)。

加速计使用牛顿第二运动定律中描述的原理来测量相对于自由落体的加速度。也就是说,它们测量作用在已知质量上的相对力,并以此来计算它必须发生的加速度。为了理解这一点,让我们首先绘制一个简单的加速计。

加速度计

从上图中,我们可以看到加速计包含一个已知质量,该质量连接到能够测量力的传感器上。但是,请注意,质量被限制在加速计的外壳内,只能向左或向右移动,这定义了加速计的测量轴。

那么,在现实世界中,这是如何工作的呢?下图显示了当我们将加速计放在汽车中时会发生什么情况。汽车以四种状态显示:静态、加速、匀速巡航和制动。您可以看到在每种情况下加速计内部的质量发生了什么。

加速度计解释与汽车

当汽车静止和匀速巡航时,由于没有力作用在其上(至少测量轴上没有作用力),质量保持在其中心位置。因为质量处于其中心位置,所以传感器检测不到力,因此记录不到加速度。当汽车加速并制动时,质量就会移动。在加速时,它朝传感器的后方移动,而在制动时,它朝着传感器的前方移动。汽车制动和加速的速度越快,质量的位移越远。每当质量发生位移时,传感器就会测量力,并记录一个值。因为传感器知道质量以及作用在该质量上的力,所以它可以轻松计算必须引起质量运动的加速度。

虽然这似乎很合乎逻辑,但它并不能解释为什么垂直放置在地板上的加速度计会产生 9.81 m/s² 的值,即使地板显然没有移动。然而,自由落体的加速度计从天而降时明显正在加速,为何显示零加速?答案见下图。

加速度计和重力

陀螺仪

加速度计擅长测量直线运动,但它们不擅长旋转,这就是陀螺仪的用处。陀螺仪根本不关心线性运动,只关心旋转。如前所述,在描述不同的惯性导航系统时,术语陀螺仪可以指不同的东西,这取决于所描述的系统类型。

在传统意义上,陀螺仪采用一个或多个旋转转子,该转子保持在万向架中或悬挂在其他系统中,该系统旨在将其与外部扭矩隔离。 这种陀螺仪之所以起作用,是因为一旦转子旋转,它便希望保持其轴或旋转。 换句话说,如果您通过陀螺仪的旋转轴投影一条线,则无论您如何尝试扭曲和旋转陀螺仪,投影线将始终指向同一点。 显然,如果您可以对其施加扭矩,则可能会使陀螺仪移动,而采用万向节就是要防止这种运动。

万向节使用多个彼此垂直安装的同心环,这些同心环通过正交排列的枢轴连接。假设环没有在万向节中死锁,这种设计可使陀螺仪在三轴中自由旋转。当两个轴对齐时,万向节发生死锁。在这种状态下,万向节具有两个自由度,而不是三个,因此在某个方向上施加的外部扭矩可能会影响旋转轴。

由于陀螺仪的转子要保持其初始旋转轴,因此可以将传感器安装到万向节上,以测量其所连接的外部框架的相对方向变化。通过这种方式,可以保持外部框架相对于陀螺仪轴的方向。左图说明了这一点。

捷联导航仪中使用的陀螺仪不受万向节死锁的影响。那是因为它们不是传统意义上的陀螺仪。而是测量角速度的 MEMS 设备,通常以 °/s(读作:度每秒)为单位。因此,无论 MEMS 陀螺仪指向哪个方向,只要它不围绕其测量轴旋转,就会输出 0°/s 的值。但是,如果陀螺仪绕其测量轴旋转并需要大约 1 秒钟来执行每次旋转,它将输出 360°/s 的值。

是正数还是负数取决于旋转方向。

MEMS 角速率传感器

从中可以看到,就像加速度计一样,陀螺仪本身不会告诉 INS 它的方向。首次通电时,陀螺仪只知道其旋转速度有多快。INS 的工作是跟踪所有这些测量。因此,如果 INS 在绕 z 轴的 0.25 秒内看到 360°/s 的平均速度,它就知道无论指向哪个方向开始,它现在都旋转了 90° (360°/s÷ 0.25 s = 90°)。当然,如果 INS 在运动之前就知道它是朝北的,并且还知道正陀螺值表示顺时针旋转,那么它可以很容易地算出它现在朝东。

就像通常使用三个加速度计一样,INS 通常包含三个陀螺仪,用于测量围绕三个相互垂直轴的旋转。通过这种方式,INS 可以测量其在 3D 空间中的方向。

导航;把这一切组合在一起

利用从三个加速度计和三个陀螺仪获得的测量值,惯性导航系统可以跟踪其在三维空间中的位置。它使用称为航位推算的过程来执行此操作。航位推算的实际过程非常容易理解;您可以从某些来源(在本案例中为陀螺仪和加速度计)中获取信息,并将它们转换为运动添加到您最后的已知位置,以查看您现在的位置。航位推算的简化 2D 示例如下。

死推算

您可以看到,INS 最初是静止的,并且与图像成直角对齐,其 x 轴指向上方。然后,图像显示了其他三个位置以及它们之间的传感器记录的信息。当然,实际上,INS 每秒更新其位置数十或数百次,但是在本例中,仅在发生关键变化时才显示位置更新,以便于理解。

因此,在时间为零时,INS 是静止的(并且不知道它在哪里)。然后,X 轴加速度计上出现 5 m/s² 的加速度 1 秒,其速度为 5 m/s(或 18 km/h)。随后立即完全停止运行 - 在 0.5 秒内检测到 -10 m/s² 的加速度。由于其他传感器上没有记录其他测量值,因此捷联式导航仪可以轻松地确定它沿 x 轴方向移动了 3.75 米。同样,此时 INS 不知道它在哪里,因为我们没有提供任何位置信息。

一旦 INS 在位置更新 1 处停止,z 轴陀螺仪就会在 0.5 秒钟内检测到 90°/s 的值;因此它知道它已经沿顺时针方向旋转了 45°。同样,一旦完成该运动,INS 将再次在 x 轴加速度计上看到加速度。这次是 1m/s²,持续 10 秒,然后是 -5 m/s²,持续 2 秒。使用与以前相同的技术,INS 可以得出结论,现在 INS 从位置更新 1 处以 45° 角前进了 60 米。这就是我们之前谈到的 INS 的位置更新是相对于最后一个已知位置这一事实的含义。

最后一次运动不同于以前的运动。在位置更新 2 中,您可以看到 INS 旋转了,因此其方向与最初的方向相同。但是,当它向位置 3 移动时,我们可以知道 INS 现在正与其测量轴(IMU 参考系)呈一定角度移动 - 以 135° 的方向向后和向右移动。

由于此运动,同时在 x 轴和 y 轴上录得加速度。也没有引起 INS 停止的负加速度 - 因此,尽管加速度计上的测量值在 1 秒后降为零,但导航计算机知道该装置仍然具有速度。在这种情况下,它以 7.07 m/s(约 25 km/h)的速度运动,位置更新 3 发生在 INS 离开位置更新 2 后 1.5 秒。此时,INS 覆盖了 7.95 米。

优势和劣势

我们尚未涉及的一件事就是漂移,这是基本的无辅助惯性导航系统的致命弱点 - 无辅助意味着仅使用加速度计和陀螺仪测量来计算其位置的系统。漂移是用于描述加速度计和陀螺仪测量中的小误差累积的术语,这些误差逐渐导致 INS 位置估计变得越来越不准确。

很容易理解为什么发生漂移。想象一下,用一根 5 米长的卷尺测量木材的长度。如果您能以 1 毫米的精度读取卷尺上的刻度,则很容易说出这根木材长 4 米 ± 1 毫米。另一方面,如果您只能找到 0.5 米长的卷尺,而您仍然只能以 1 毫米的精度读取它,那么在完成测量并与卷尺一起移动 8 次时,您只能说该木材长 4 米 ± 8 毫米。实际上,您可能根本不会量到 4 m 长。

INS 中的漂移以相同的方式累积。每次读取加速度计或陀螺仪时,读数都会出现微小的误差。如果我们只读取一个读数就可以得出我们加速或转弯的速度,那么这将不是问题。但是,由于导航计算机正在对每个测量结果进行累加,以计算出它是如何从之前的位置估计值移动的,因此微小的误差会随着时间推移而增加。

INS 漂移

当然,这是一个非常简化的观点。系统中已进行了大量工作,以尽量减少这些误差的累积,但是并没有摆脱它们存在的事实。然而,这并不意味着惯性导航系统的原理是无用的,或者不如 GPS。远非如此。

在本部分的开头,我们说过漂移是无辅助惯性导航系统的致命弱点,那么辅助导航系统呢?当您将 INS 与 GPS 组合以创建 GPS 辅助 INS(也写作 GPS INS)时,您可以解决漂移问题,并解决影响 GPS 的问题。您可以在这里找到有关 GPS 的章节

全球卫星导航系统 (GNSS) 简介

from : https://www.oxts.com/zh/what-is-gnss/

全球卫星导航系统 (GNSS) 简介

每天每一小时,我们都被无线电波包围。有些电波(例如电视和广播)为我们带来愉悦,有些电波(如 GPS)则提供宝贵的信息,如果没有这些信息,我们将茫然无措。然而,尽管 GPS 在我们日常生活中很重要,但我们通常对它的工作原理了解甚少。

本文档旨在使您对卫星导航有所了解。内容会比某些解释更深入,但避免了只有系统工程师才需要知道的复杂内容。最后,您将对卫星导航的实际工作方式有深刻了解,更重要的是,知道它可以为您做什么和不能做什么。

什么是 GNSS?

现在,GPS 这个词已为普通大众所熟悉,以至于它已成为任何卫星导航系统的代名词,但我们需要小心,GPS 一词实际上是由美国军方创建系统的名称,代表全球定位系统,也有其他系统。例如,俄罗斯的军事系统被称为 GLONASS(全球轨道导航卫星系统),而中国正在开发一种名为”北斗-2”的系统。

在谈及卫星导航系统时,您经常会遇到一个术语 GNSS,它代表全球导航卫星系统。这是用于描述地球上任何以导航为目的传输信号的全球卫星系统的通称。如果您将卫星系统用于测量目的,则区分使用 GPS 或 GLONASS 等术语非常重要,因为每个系统的工作方式略有不同(尽管最终结果似乎相同)。

截至 2017 年,主要的 GNSS 包括:

  • GPS:美国的全球定位系统。
  • GLONASS:俄罗斯的全球轨道导航卫星系统。
  • 北斗-2:中国正在开发的系统 - 目前尚未完全投入运行。
  • Galileo:欧盟正在开发的系统 - 目前尚未完全投入运行。

全球卫星导航系统

GNSS 接收器如何工作?

大多数 GNSS 接收器有两个部分:天线以及处理单元或接收器。天线用于接收卫星信号,而接收器则可以感知接收到的信息,并将其转换为我们理解的测量值,例如纬度和经度。

全球导航卫星系统接收器和INS

重要的是要认识到,位置、速度和海拔的计算与天线本身有关,与接收器无关。为了解 GNSS 的工作原理,我们需要将 GNSS 分成几个部分,并了解每个部分。由于 GPS 是人们最熟悉的系统,因此让我们来了解一下它,它可以分成三个部分:

  • 太空段
  • 控制段
  • 用户段

太空段

卫星

太空段与在轨卫星有关。2015 年,GPS 星座由地球中轨道的 32 颗非对地静止卫星组成,尽管并非所有卫星都处于活动状态。每颗卫星在平均海拔 20,200 公里(即 26,571 公里的轨道半径)处,每 11 小时 58 分钟 2 秒绕轨道运行一圈。

GPS 卫星星座被排列成六个间隔相等的轨道平面,每个平面中不少于四颗卫星。这样的布置可确保几乎在任何时候都可以从地平线上方 15° 看到至少四颗卫星 - 尽管实际上通常能看到更多的卫星。

虽然卫星的年限和设计各不相同,但其工作原理保持不变。每个时钟都包含四个基频为 10.23 MHz 的高精度时钟,它们不断在 L 波段传输两个载波,这些载波以光速返回地球,被称为 L1 和 L2。

  • L1 载波的频率为 1575.42 MHz (10.23 MHz × 154 = 1575.42 MHz)。
  • L2 载波的频率为 1227.60 MHz (10.23 MHz × 120 = 1227.60 MHz)。

载波之所以重要,是因为它们将信息从卫星带回地球,正是这些信息使我们的接收器能够确定所处的位置。但是,我们稍后再来了解这是如何完成的。

控制段

控制段是指位于地球各地(靠近赤道)的若干地面站,这些地面站用于跟踪、控制和向每颗 GPS 卫星发送信息。这是一个重要的部分,因为每颗卫星的时钟同步至关重要 — 整个系统依赖于计时。

GPS 地面天线

发送到每颗卫星的轨道信息也至关重要,因为我们需要这些信息,以便找出发送信息时卫星的位置。所有这些信息都发送到卫星,然后通过 L1 载波导航信息发送到 GPS 接收器。

用户段

用户段是大多数人感兴趣的部分。此段包括拥有 GPS 接收器的任何人或任何事物;卫星导航、手机、无人机、执法。那么它是如何工作的呢?

正如我们已经看到的那样,有一个卫星群在我们头顶上盘旋,以光速源源不断地将信息流发送到地球。了解它们如何帮助确定我们的位置需要一些时间,但它是基于一个名为三边测量的过程。

在进一步了解之前,我们应该纠正一个普遍的误解。卫星导航或手机内的 GNSS 接收器绝不会向卫星发送任何信息。我们今天使用的接收器完全是被动的 - 它们仅接收信息。当欧洲的伽利略系统投入运行时,其接收器会略有不同,因为它会有一个紧急功能,该功能会在激活后发送信息,但这不适用于正常运行。

当您听到人们谈论被 GPS 跟踪的东西(例如一辆装甲车)时,情况就是这样。车辆上的 GNSS 接收器正在接收来自卫星的信号,并确定其位置。一旦知道了位置,它就会使用其他系统(例如 GSM 数据连接)将该信息发送回某个监测站。

GPS 信号

因此,目前,GNSS 接收器通过接收相关在轨卫星发送的信号来工作。使用的信号取决于接收器的类型。GPS 接收器只能使用 GPS 卫星的信号,而 GLONASS 接收器只能使用 GLONASS 卫星的信号。还有另一种接收器实际上可以从两种卫星(GPS 和 GLONASS)接收信号,以增强其测量范围。

现在我们再次来重点谈谈 GPS 接收器。

GPS 接收器如何知道我在哪里?

关于GPS 接收器如何知道您在哪里的简短且简化的回答就是:

  • 它计算它看到的每颗卫星发出的信号要花费多长时间到达。
  • 它将时间乘以光速以计算到每颗卫星的距离。
  • 然后,使用三边测量法计算相对于不少于三颗卫星的位置。
  • 因为接收器在发送信号时知道每颗卫星的精确位置,所以它可以将其相对位置转换为基于地球的坐标系。

当然,这种解释在大多数人的头脑中引起了很多疑问。接收器如何计算信号的传输时间?除非知道信号的发送时间,但这又怎么可能知道呢?什么是三边测量?接收器如何知道卫星发送信号时在哪里?这仅仅是个开始。

好消息是,您无需了解任何这些即可使用 GPS。然而,没有多少信息是多余的,因此,如果您想进一步了解它的工作原理(当您正在收集测量值用于工作时,这可能对您有所帮助),请继续阅读。

GPS 信号

理解 GPS 最困难的部分是信号本身。根据时间计算距离非常简单,甚至三边测量(稍后将要介绍)听起来也没有添加几张图时那么棘手。但是 GPS 信号及其工作方式非常复杂。

那么,发送给我们的是什么信息呢?从每颗卫星发送的唯一信号包含两个代码和一条消息:

  • C/A 代码(粗/捕获码)
  • P 代码(精确代码)[以加密形式,称为 Y 代码]
  • 导航消息

P 代码已加密供军事使用,因此可以忽略。加密的目的是防止欺骗和控制系统的访问权。顺便说一句,P 代码加密后,被称为 Y 代码。

GPS 信号

作为平民,我们只对 C/A 代码和导航消息感兴趣。C/A 代码实际上是由 1,023 个位组成的二进制字符串。乍一看,序列似乎是完全随机的,但事实并非如此。序列经过了精心编排,因此,如果将序列写在两块描图纸上并覆盖它们,则只有一个位置可以匹配(如下所示)。

GNSS 二进制

稍后,当介绍如何计算与卫星的距离时,我们将知道为什么 C/A 代码只匹配一个位置。现在,我们需要知道的是每颗卫星发送的 C/A 代码对该卫星都是唯一的,虽然它似乎是一个随机的比特字符串,但事实并非如此。该代码实际上遵循精确的确定性模式,因此通常称为伪随机噪声(PRN)。

导航消息不同于 C/A 代码,因为它包含数据。这包括有关时钟校正、卫星健康状况、星历(精确轨道)数据、电离层模型参数和年历(关于星座中所有卫星的一般信息)数据的信息。由于导航消息中包含的信息量以及传输速度相对较慢,因此发送整个消息需要 12.5 分钟。稍后,我们将详细介绍此消息。

我们需要了解的 GPS 信号的最后部分是载波本身。正如我们已经说过的,每颗卫星传输两个频率-L1在1575.42MHz和L2在1227.60兆赫。所有三个元素(C/A 代码、Y 代码和导航消息)都调制到 L1 载波上,而只有 Y 代码被调制到 L2 载波上。但是,虽然民用用户无法从 L2 载波中解调 Y 代码,但我们可以使用 L2 载波本身,我们稍后将在差分修正中谈到。

C/A 代码以 1.023 Mb/s 的速度调制到载波上。导航消息以 50 b/s 的速度调制到载波上。

寻找卫星

接收器开机后需要做的第一件事就是寻找卫星。它是如何做的取决于接收器最后一次锁定 GPS 卫星已有多长时间。这是因为我们已经知道,GPS 星座中的每颗卫星都会发送一条导航消息,并且该消息的一部分是年历,其中包含星座中每颗卫星轨道的大致信息。

年历数据可使用约 6 个月,因此,使用其最近的已知位置和当前时间,接收器可以对应该看到哪些卫星做出合理猜测。之所以这样做,是因为另一种选择是盲目搜索所有卫星,这可能需要一些时间。实际上,这就是为什么一段时间未开机或自上次开机以来已经运送到世界各地的接收器可能要花费大量时间来获取 GPS 锁定的原因所在 - 因为必须盲目搜索 。

查找全球导航卫星系统卫星

假设我们的接收器有有效的年历数据,并且自上次开机以来没有移动太多,它将对当前应该能够看到哪些卫星以及信号频率如何受多普勒频移的影响有一个合理认识。现在,它可以开始从希望从天线接收到的信号中看到的卫星中寻找信号。

接收器首先对信号的频率和 C/A 代码相位进行二维搜索。这并不容易,但作为最终用户,我们不需要对此过于担心。一旦接收器认为它从卫星上找到了信号,便对其进行确认,然后用 PLL(锁相环)和 CLL(代码锁环)锁定在卫星上。然后在解调数据之前搜索位同步。

计算出到卫星的距离

正如我们已经看到的那样,GPS 星座中的每颗卫星都传输唯一的 C/A 代码,这似乎是随机噪声,但实际上是一个确定性序列。因为序列是确定性的,所以 GPS 接收器能够生成与卫星本身完全相同的代码序列。通过在内部生成相同的码型,接收器可以查找卫星正在发射的码型,然后算出与自己的码型相比有多少延迟。

由于采用了精确的时钟同步,它可以做到这一点。例如,假设您和一个朋友站在一片很大的旷野中。您同步手表后,您的朋友同意在正午时分扣动发令枪扳机。然后,您的朋友走到了旷野的另一端。正午时分,他们扣动发令枪扳机,但是根据您的手表,直到正午后四秒,您才听到爆炸声,因为声音必须在旷野中传播。如果我们假设声音速度为 340 m/s,我们可以乘以这个时间,求出您的朋友是在 1360 米远的地方。

接收器和 GPS 卫星的工作方式相似。因为接收器能够准确地将其时钟与卫星时钟同步,并且因为接收器知道达到速度的时间,所以才能计算出卫星的距离。

当然,还需要考虑其他因素,但这就是基本原理。

卫星到接收器

距离测量如何帮助我确定自己的位置?

继续以您和一些朋友在一片旷野中为例,想象您自己站在一个大的正方形旷野中。每个朋友都有一种发出不同声音的方法(启动手枪、敲打乐器、喊叫等)。您同步手表,一个朋友走到旷野的每个角落。从中午开始,他们同意每 10 秒发出一次声音。

现在假设当他们开始发出噪音时,两个声音同时到达,紧接着是另外两个声音。然后,您向延迟的声音方向移动一点。十秒钟后,又一波声音到达,但这次第二对的延迟较短。如果您继续移动,您会来到一个所有四个声音同时到达的位置。如您所知,每个人都站在旷野的一角,那么您也可以算出自己必须正好站在中心。

就 GPS 导航而言,卫星可能不在天空的角落,但是由于星历表数据的存在,我们可以在发送信号时确定它们相对于已知坐标系的精确位置,并使用 C/A 代码,我们还可以计算出距该已知位置有多远。接下来介绍一个名为三边测量的过程。

三边测量有点像三角测量。使用三角测量时,您可以通过说一个特定点相对于点 1 的角度为 a,相对于点 2 的角度为 b 来确定这个特定点。以指定角度从每个点绘制的线将相交,并且它们的交点就是我们的新点位置。

三角

三边测量法的工作方式类似,但使用距离而不是角度来查找点。另一个主要区别是,使用三边测量法时,您至少需要三个参考点,而不是两个,才能将搜索范围缩小到一个位置。

三角化

GPS 使用相同的技术,但处理方法略有不同。我们一直在观察的圆圈是二维的。在现实生活中,事物远不止是三维的,这意味着我们的相交圆成为相交球体。

当两个球体相交时,您最终不会得到两个相交点,而是得到一个相交环(想象两个气泡连接在一起)。如果第三个气泡加入,它将在所有三个相交环相交处创建两个点。如下所示。

领域

此时,您可能还记得听说过 GPS 只需三颗卫星即可生成位置测量值。这种说法既是对的,也是错的。从上图中可以清楚地看出,为了使用三边测量法得出单个点,需要第四个球体(向我们展示哪个点是正确的)。但是,由于 GPS 使用以地球为中心的地球固定坐标系,因此可以立即排除其中一个点,因为它恰好位于地球大气层之外。因此,另一点必须是正确的。

因此 GPS 只能使用三颗卫星来生成位置测量值,但是为了实现这一点,其内部时钟必须准确,否则无法正确计算距离。校正内部时钟需要四颗卫星!这就是为什么这种说法既对又错的原因。只要系统使用四颗卫星来校正其内部时钟,它就可以降回三颗卫星,并且仍然可以进行位置估算 — 只是不能永远做到这一点。

什么是 SPS?

术语 SPS 代表标准定位服务,并描述仅基于 C/A 代码的 GPS 位置测量。之所以需要区分是因为并非所有 GPS 位置测量都以相同的方式进行,并且用于计算测量值的方法会影响准确性。

SPS 提供最低精度的 GPS 位置测量,通常在 3-10 米范围内。为了进行 SPS 测量,GPS 接收器锁定四颗或更多颗卫星,然后使用 C/A 码估计到每颗卫星的距离。这些估计称为伪距测量。

使用 SPS,测量精度取决于接收器将其内部生成的 C/A 代码与天线接收到的 C/A 代码正确对准的能力。尽管即使它能够完美地做到这一点,但精度仍然受到系统设计的限制。

在大多数情况下,我们希望达到的最佳对准精度约为位宽度的 1%。由于位以每毫秒 1,023 的速度传输,光每毫秒传输约 300,000 米,因此我们的 1% 对准实现的精度大约为 3 米。但是,某些 L1 接收器可以达到大约 0.6% 的对准度,从而使它们的精度达到 1.8 米。

尽管该精度水平足以满足卫星导航需求,但在许多其他应用中仍需要更高的精度,因此通常需要其他测量技术,例如 DGPS(差分 GPS)和实时运动学(RTK)。

什么是差分修正或 DGPS?

SPS 测量中的大多数误差来自以下事实:接收器无法真正知道卫星信号通过电离层时如何影响其速度。由于导航消息中包含一些估计值,因此可以从中获得一点线索,这使它可以对可能的影响进行猜测,但这只是估计值。在实践中,这意味着延迟乘以的速度并不十分正确 — 这又意味着计算出的伪距也不正确。

允许这样做的唯一方法是测量而不是估计信号速度在通过大气层下降时如何受到影响。这就是差分 GPS 的用武之地。DGPS 可以通过多种方式实现,但是本质上它们使用的技术都相同。

将一个单独的 GPS 接收器(称为基站)放在预先测量的位置并打开。因为已经非常精确地知道基站的位置,所以基站能够将其自己的 GPS 接收器生成的位置测量值与已知坐标进行比较。任何差异都意味着它们从多个卫星之一发出的信号被延迟。系统要做的就是算出应该对每颗卫星进行多少修正,以修正 GPS 位置测量值。

一旦基站知道如何修正来自每个卫星的信号后,便可以与该地区的任何其他 GPS 接收器(通常称为漫游器)共享此信息。这通常使用无线电调制解调器来实现。巡回接收器检查其所看到的卫星是否可进行修正,并在适用的情况下进行应用,即使其不在已知位置,也可提高其伪距测量的准确性。

还有其他方法可以实现 DGPS。不必使用自己的本地基站(您在自己的站点上设置),而是可以通过基于 Web 的服务和数据连接来接收差分修正。在这种情况下,您的接收器(流动站)将以正常方式计算出其位置。然后,它将其位置传输到中央服务器,该服务器计算出离您最近的参考站的位置,然后再从该位置发回差分修正。这样的系统的优点在于,您可以从一个国家的一端行驶到另一端,并获得整个行程的有效修正。

另一种方法是使用称为 SBAS(基于卫星的增强系统)的基于卫星的修正服务。这些工作方式略有不同。已知位置的地球地面站可以对不同地理位置的差分进行修正。然后将这些修正上载到卫星,在那里它们可以广播到任何能够接收它们的接收器。但是,除了接收器需要配备正确的硬件之外,您通常还需要支付订阅费才能解锁修正。

使用 SBAS 服务可以提高接收器的准确性,但不能达到与本地基站相同的程度。使用 DGPS 时,位置测量的精度通常会提高到几十厘米,例如 40 厘米左右。通过 SABS 实现的 DGPS 通常精确到亚米,大约在 50-60 厘米之间。

什么是 RTK?

RTK 代表实时运动学,是另一种提高 GPS 位置测量精度的技术,然而,它是最难理解且实施最密集的技术之一。

我们已经看到,SPS 是 GPS 系统实现的第一个定位,并且使用 C/A 代码实现。如果可以使用差分修正,则可以提高 SPS 精度,因为可以消除卫星信号的时序延迟。使用约为 40 厘米的 DPGS 位置精度是很正常的。RTK 是 DGPS 的下一步,它有两个版本:RTK 浮点解(可达到分米级精度)以及 RTK 整数(可达到厘米级精度)。

要了解任一版本的工作原理,必须了解两点。首先是 RTK 正在改变我们使用民用 GPS 接收器应能实现的规则。它并不是一个被设计成旨在帮助我们的技术系统。相反,GPS 制造商认为这是一种比使用 C/A 代码所要达到的精度更高的方法。要了解的第二点就是,它基于载波本身,而不是基于它们所携带的 C/A 代码或导航消息。

那么它是怎样工作的?我们已经看到,SPS 基于使用 C/A 代码计算出的伪距测量值。接收器通过将其时钟与 GPS 卫星同步,然后为它可以看到的每颗卫星生成自己的 C/A 代码版本来完成此操作。如果它必须将自己的 C/A 代码副本延迟例如 7 毫秒,以匹配在天线上接收到的 C/A 代码,则它知道来自该卫星的信号的传输时间为 7 毫秒,然后就可以算出卫星有多远。

RTK 的最终目的是确定天线和卫星之间有多少个载波。这样做的原因很简单。我们已经看到,每颗卫星都广播了由 1,023 位组成的唯一 C/A 码。该代码以 1.023 Mb/s 的速率发送,这意味着大约每微秒发送一个位。在一微秒内,来自卫星的无线电信号覆盖了大约 300 米的距离。

C/A代码调制到的载波频率更高,但是-1575.42 MHz。这意味着单波覆盖了大约19厘米。如果我们能计算出卫星和天线之间有多少个全波,那么就可以更准确地计算出距离。事实上,如果我们知道有多少个全波,而且也可以测量出部分波(相位角),那么我们就可以非常精确。

RTK 整数和 RTK 浮点解可以被视为在系统中同时运行的两种独立(但相关)的算法。如果 RTK 整数有一个有效的解,则系统将切换至该解(但是 RTK 浮点解算法将继续在后台运行)。如果 RTK 整数随后变得无效,则系统将恢复为 RTK 浮点解,只要载波相位锁没有丢失,就无需再次启动。

那么算法有何不同? RTK 浮点解旨在使用统计方法来识别您可能的位置(提高当前 DGPS 的准确性)。它至少需要与基站一起安装四颗普通卫星,并且(以俗称方式)在围绕卫星旋转的当前位置测量周围寻找一个圆点。与 RTK 整数不同,浮点解算法从不尝试解决歧义问题 — 它仅尝试识别围绕当前位置估计值绘制的圆内最可能的位置。RTK 浮点解的精度大约为 40 厘米,但最多可以提高到 20 厘米。

另一方面,RTK 整数旨在解决歧义问题,只有在解决之后才使用它。它需要五颗普通卫星,并且当找到有效的解决方案时,系统就会知道有 n 个载波以及它与卫星之间的任何部分波。它可以将其测量结果与 19 厘米波长的 0.6% 对准,从而提供约 1 厘米的精度。

DGPS 或 RTK 不能提高速度测量的准确性吗?

常见的误解是,GPS 速度测量是通过测量两次连续位置测量之间移动所需的时间来进行的。这不是测量速度的方法,也是位置精度对速度精度没有影响的原因。

为了计算速度,GPS 接收器实际上使用多普勒频移。因此,它们查看每颗卫星的载波中的频移,并使用该信息来计算速度矢量。因此,您的接收器是否处于 RTK 整数的 SPS 模式并不重要,速度测量将同样准确。
GNSS 有哪些局限性?

总体而言,GNSS 系统非常出色。它们易于使用,不会漂移,并且可以达到较高的准确性。但是,它们并不完美。对于初次使用者来说,为了充分发挥系统的潜能,他们需要清晰、连续的天空视野。如果您在一片旷野中工作,那很棒,但是,如果您要测量城市街道,或者在桥梁和隧道下进行工作,则最多只能得到降低后的精度,而在最坏情况下根本得不到测量值。

此外,虽然 GPS 接收器非常擅长捕获位置和速度测量值,但如果您也对侧倾、俯仰和偏航感兴趣,那就不好了。双天线系统有助于解决其中一些问题,但仍无法提供完整的图像。对于极其动态的操作,根本就不需要分辨率。

如需进一步了解惯性导航系统,请单击此处 什么是惯性导航系统

密码学一小时必知[2010]

本文翻译了Colin Percival 于2010年在bsdcan的演讲ppt

原文标题:Everything you need to know about cryptography in 1 hour

演讲时间:May 13, 2010

原文在 https://www.bsdcan.org/2010/schedule/attachments/135_crypto1hr.pdf

演讲视频在 https://www.youtube.com/watch?v=jzY3m5Kv7Y8 ( 请自行翻墙 )

Colin Percival 是密码学方面的专家,FreeBSD项目的安全长官,Tarsnap在线备份服务的创始人,scrypt密钥衍生算法的作者,致力于改进软件中密码学的应用,向程序员传播密码学的正确使用。


为什么要 cryptography in 1 hour

因为有例如下面这些错误的使用案例:

  1. Google keyczar(时间通道攻击)
  2. SSL( session renegotiation)
  3. Amazon AWS 签名方法 (可能碰撞的签名算法)
  4. Flicker API 签名(hash length-extension) 错误地使用了错误的工具
  5. Intel Hyper Threading (architectual side channel) 不常用的环境
  6. WEP,WPA,GSM…(多种漏洞)

密码学被攻破通常是由于:

  1. 愚蠢
  2. 使用了错误的工具,或者以错误的方式使用它们
  3. 不常用的环境

经验智慧:不要亲自写密码学代码!

  1. 使用SSL做传输
  2. 使用GPG保护静止数据

“如果你在输入A-E-S到你的代码里,你已经开始犯错” – Tomas Ptacek

现实:如果你无论如何都要写密码学代码,你最好知道你在干什么

现实:大多数应用程序只需要众所周知的标准模式的一个子集,而这是很容易保证正确的

55分钟后,你应该:

知道在99%的情况下应该怎么做

知道一些常见的错误在哪里

知道当你在做一些非标准的事情的时候,你真的需要咨询一个密码学专家


密码学做保护,并对抗一些攻击,但不能对抗所有攻击:

  • 贿赂,盗窃,敲诈
  • 监狱刑罚
  • 攻击人通常比攻击数据更贵
  • 攻击人通常比攻击数据更危险
  • 数据被拷打时不会开记者招待会来控诉
  • 密码学的目的是强迫美国政府拷打你
  • 希望他们认为你的信息不是这么重要

密码学有3个主要目的:

  • 加密 Encryption
  • 认证 Authentication
  • 识别 Identification
  1. 加密阻止恶意者读取你的数据
  2. 认证阻止恶意者在不被发现的情况下改动你的数据
  3. 识别阻止恶意者假装你

有时认证和识别在一个步骤中进行:“这条消息自从我写下它之后没有被篡改”和“我是Colin” 可以替换成“这条消息自从Colin写下它之后没有被改过”

在大多数case里,你需要把2个,或者更多的密码学组件合起来使用


概念定义

  1. plaintext是我们关心的数据
  2. ciphertext是恶意者可以得到的数据
  3. key用于在这两者之间做转换,有时候我们需要多个key

对称密码学就是 ,使用相同的key,来把plaintext转换成ciphertext,和把ciphertext转换成 plaintext

非对称密码学就是,这两个方向的转换使用不同的key

理想的密码学组件并不存在,但是如果一个密码学组件被识别出不理想,一般就认为它是被攻破的


hashing

一个理想的hash函数H(x)是一个函数映射,把任意长度的输入映射成n-bit的输出, 保证:

  1. 抵抗碰撞
  2. 单向

抵抗碰撞意味着需要 2^(n/2) 的时间来找到2个输入,使得它们的hash相同

单向意味着给定hash后,需要2^n的时间来找到一个输入,使得它的hash是给定hash

没有保证任何其他性质

特别是: 知道H(x)可能允许一个攻击者计算某些y的H(y)


hashing 实践

使用 SHA-256

考虑切换到SHA-3,在未来5-10年内(2010年算起)

使用一个hash,如果你可以安全地分布 H(x),并且想验证不安全地收到的x’实际上等于x

不要使用:MD2 MD4 MD5 SHA-1 RIPEMD

不要把 FreeBSD-8.0-RELEASE-amd64-disc1.iso和CHECKSUM.SHA256放到同一个FTP 服务器上,还以为自己干了件有用的事情

不要尝试把一个hash函数当成对称签名用


对称认证

对称认证是通过提供一个消息认证码(MAC,message authentication code)来进行的。

一个理想的 MAC fk(x)使用一个key,来把任意长度的输入映射到n-bit的输出,确保需要 2^n 的时间,一个攻击者才能在得到任意 (x, fx(x)) 对的情况下,生成任意 (y,fk(y)) 对。 有时MAC被称作随机函数

与hashing不同,知道 fk(x) 不能使你对另一个key计算出 fk(y),

Flicker的API使用了hashing来认证API请求,他们实际需要的是 MAC


对称认证 实践

使用 HMAC-SHA256

确保同样的输入,HMAC-SHA256不会生成不同的消息

Amazon和Flicker都做错了

不要使用 CBC-MAC

理论上安全,但是把你的块加密算法暴露给了攻击者

不要使用 Poly1305

太新,除非你是Daniel Bernstein(Poly 1305的发明者),否则你基本不可能做出一个

安全和正确的实现

不要 当验证一个签名的时候,通过timing side channel的形式泄露信息


Side channel 攻击

一个side channel 是攻击者除了ciphertext以外可以获取信息的任何方式

密码系统是以它们的数学设计被定义的,但是side channel 是由于密码系统的人工实现导致的。

最常见的side channel是timing – 你花费多长时间来 加密/解密/签名/验证 一个消息

其他side channel包括:电磁辐射,电力消耗,和微架构特征(例如L1缓存替换,在支持 HyperThreading的Intel CPU上)


Side channel 攻击 实践

  • 咨询一个密码学专家,如果你计划使恶意者可以物理接触到任何密码设备
  • 咨询一个密码学专家,如果你计划允许恶意者在你允许密码学的物理硬件上运行代码(虚拟化系统)
  • 咨询一个密码学专家,如果你计划发布一个以新方式泄露信息的CPU

intel可能做错了 不要写其运行时间泄露信息的代码


Timing attacks

避免 依赖于key,或者依赖于plaintext的表查找

不要有依赖于key,或者依赖于plaintext的分支(if, for, while , foo?bar:baz 等代码指令)

不要想这种代码:

1
2
3
4
for(int i=0;i<MACLEN;i++){
if(MAC-computed[i] != MAC-received[i])
return MAC_IS_BAD ;
return MAC_IS_GOOD;

应该这样写

1
2
3
4
for(int i=0;i<MACLEN;i++){
x |= (MAC-computed[i] - MAC-received[i]);

return x?MAC_IS_BAD:MAC_IS_GOOD;

Google Keyczar就做错了


块加密

对称加密通常构建在块加密算法的基础之上

一个理想的块加密算法使用一个key来双向地把n-bit的输入x转换成n-bit的输出Ek(x),这样当 知道(x,Ek(x))时,对任意的(x’,k’)!=(x,k),你没法以大于2^-n的概率猜出(x’,Ek’(x’))

有时被称为“随机排列”

通常我们关心的是Ek(x)不透露出 当x!=x’时Ek(x’)的信息。

如果一个攻击者可以通过观察一个块加密算法怎么处理不同key,来获取有用信息,该块加密算法 被认为可被 key相关攻击 (key-related attack)攻破。


块加密 实践

使用 AES-256

AES-256有related key攻击漏洞,但是当你把其它事情做对时,这并不是问题

AES-128理论上足够强壮,但是块加密算法很难没有side channel地正确实现 ,

并且key里面的额外bit 在key的一些bit泄露之后是有用的。

不要使用 blowfish

想都不要想使用DES

避免 triple-des(3des)

不要使用块加密算法”raw”,替代地,在一个已经建立的操作模式中使用它(?)。


块加密算法操作模式

一个块加密算法操作模式告诉你怎么使用一个块加密算法来保护数据流

在很多case中,plaintext需要被填充到块大小的整数倍,块密码算法操作模式会 告诉你怎么做到这一点

流行的模式有: ECB ,CBC , CFB , OFB,CTR,IAPM,CCM,EAX,GCM …

大多数模式只提供了加密,但也有一些提供了认证

实践: 使用:CTR模式

不要使用同时提供加密和认证的模式

想都不要想使用ECB

使用一个MAC(例如HMAC-SHA256)来认证你的加密数据

如果你认为你不需要这么做,咨询一个密码学专家,他会告诉你你为什么是错的。

验证你的加密数据的真实性,在你揭秘数据之前。


非对称加密

一个非对称加密模式使用一个签名key来把plaintext转换成ciphertext,使用一个认证码来把 ciphertext转化成plaintext或者“错误的签名”

签名key不能从认证key算出,但是认证key可以从签名key算出

ciphertext通常由 plaintext加一个签名构成

如果一个攻击者接触到了验证key,并且可以说服你签名任意的plaintext,那就可以认为这个 非对称加密系统被攻破了。


非对称认证

使用 RSASSA-PSS(RSA签名,使用Probabilistic Signature Scheme padding)

使用 2048-bit的RSA key,使用65537作为公钥的公共幂,和SHA256

不要使用 PKCS v1.5 padding

想都不要想 使用不带消息padding的RSA(即RAW)

可能避免: DSA

可能避免:椭圆曲线签名模式

想都不要想 使用相同的RSA key既做认证,又做加密

非对称加密

非对称加密类似于非对称签名,除了方向相反,使用公钥把plaintext转成ciphertext,但是要 使用私钥把ciphertext转成plaintext

一个

大多数非对称加密模式都限制能加密的消息大小到一个很低的数字以下。


非对称加密 实践

使用 RSAES-OAEP(RSA加密,使用Optimal Asymmeric Encryption Padding)

使用2048-bit的RSA key,以65537为幂底数,SHA256和MGF1-SHA256

不要使用 PCKS v1.5 padding

不要使用不带消息padding的RSA

生成一个随机key,用这个key使用对称加密加密你的消息,然后使用非对称加密算法加密你的key

小心避免RSAES-OAEP的timing攻击通道


密码

密码通常被直接用于识别,但是也可以被用于加密或者认证。

实践

尽可能避免密码

使用一个key继承函数,来尽快把密码转成key。

使用PBKDF2,如果你跟随流行趋势

使用scrypt,如果你希望2^8倍地比严肃的攻击者更安全

想都不要想把用户的密码存储在服务器上。绝对不能,就算它们被加密了也不能。


SSL

SSL是一个可怕的系统

SSL的复杂性导致它很难别安全地实现

SSL给了攻击者很多攻击选项

SSL要求你决定你想信任什么CA

你相信中国政府吗?

不幸的是,SSL是唯一可行的选项

SSL 实践

随客户端分发非对称签名key,并且使用这个key开始你的整个密码系统

使用SSL加密你的网站,Email,和其他公开的标准面向Internet的服务器。

认真地想想你信任哪些CA。


奇奇怪怪地部分

咨询一个密码学专家,如果

  • 你的密码学硬件设备,攻击者可以物理接触到。(例如smartcards)
  • 你想使用最少的电力消耗(例如在手机上)
  • 你需要处理尽可能大的数据流量(例如 10Gbps的 IPSec 隧道)
  • 你需要传输尽可能少的bit(例如和一个核潜艇的通信)
  • 你想忽视我在这个talk中提出的任何建议

QA

from : https://blog.helong.info/blog/2015/04/12/translate-Everything-you-need-to-know-about-cryptgraphy-in-1-hour/


场景与算法选择

密码学-场景与算法选择
from bitcoin-on-nodejs 4-开发实践/0-加密与解密/3-三张图让你全面掌握加密解密技术

现代密码学实践指南[2015年]

现代密码学实践指南[2015年]


本文介绍目前现代密码学的最先进技术,
前半部分主要翻译自 《Cryptographic Right Answers》 ,附上收集的资料,和byron个人的理解。

密码学理论艰深,概念繁多,本人知识水平有限,错误难免,如果您发现错误,请务必指出,非常感谢!


下文分类介绍在各种适用场景下,你应该使用的现代密码学算法

1. 加密数据 :

按照优先级,应该选择:
(1) 首选 NaCl库,或者libsodium库,使用里面的crypto_secretbox()/crypto_secretbox_open() 函数
(2) Chacha20-Poly1305 算法
(3) AES-GCM 算法

适用场景:当你需要避免把明文数据在网络上传输的时候。

以上3种算法,都是AEAD类的算法,AEAD是2015年最好的选择。
其中的(2)和(3)在结构上类似:一个流加密模式的算法,配合一个多项式结构的MAC。
(2)是一个流加密算法,配合一个为通用cpu优化的MAC算法,
对密码学库的实现者来说,Poly1305也比GCM更容易安全地实现。
AES-GCM是工业标准(TLS目前主要用的就是AES-GCM),现代CPU通常都有专门为AES-GCM设计的硬件指令,但是在没有硬件指令支持的CPU上(比如32位的arm),(3)性能低于(2)。

此外,应该

  • 避免AES-CBC
  • 避免AES-CTR
  • 避免64bit块大小的块加密算法–(说的就是你–BlowFish)
  • 避免OFB模式
  • 不要使用RC4,RC4已经被攻破

2. 对称密钥长度 :

选择使用256bit长度的密钥

适用场景:只要你在使用密码学,你就应该注意对称密钥长度

请记住:不要把对称加密(如AES)的key长度,和非对称加密(如RSA)的key长度搞混淆了,对称加密的key通常比非对称加密的key短多了。

下表对比了相同安全程度时,不同算法的密钥长度,单位:bit

Symmetric ECC DH/DSA/RSA
80 163 1024
112 233 2048
128 283 3072
192 409 7680
256 571 15360

此外,应该

  • 避免使用巨大key的算法(使用远大于256的key,只能说明使用者没有安全概念)
  • 避免把多个加密算法串联叠加起来使用,这并没有什么卵用
  • 避免128bit以下的key长度(比如,哥们求你别再提DES这种56bit密钥的古董了)

3. 对称签名:

应该选择 HMAC 类的算法

适用场景:安全加固一个API,如各种开放API的调用方认证

如果对一个API,你需要做认证(authenticating),但是不需要做加密(encrypting),记得千万不要自己发明算法,你自己发明的MAC算法基本都有安全漏洞,如果不信,请Google一下 “长度扩展攻击”
长度扩展攻击
Flickr的漏洞案例

同时,必须要注意的是,要使用一个常数时间字符串对比算法(这个地方和码农的常识完全相反,请务必留意)

此外,应该

  • 避免自行设计的“带密码的hash”结构,你的设计基本都是有安全漏洞的
  • 避免HMAC-MD5,避免HMAC-SHA1,使用HMAC-SHA256, HMAC-SHA512等
  • 避免复杂的多项式MAC
  • 避免加密hash值的结构
  • 避免CRC

4. Hashing/HMAC 算法

应该选择 SHA2 类的算法:: SHA-256, SHA-384, SHA-512, SHA-512/256

优先使用 SHA-512/256,SHA-512/256这个算法把 SHA-512 的512bit输出截短到256bit,避开了length extension 攻击。
同时,目前SHA-2是很安全可靠的,你不需要升级到SHA-3.

此外,应该

  • 避免SHA-1
  • 避免MD5
  • 避免MD6

5. 随机ID

应该使用256 bit的随机值

一定要使用 /dev/urandom,请认准这个

此外,应该

  • 避免用户空间的随机数生成器如:havaged,prngs,egd,等
  • 避免/dev/random

6. 密码处理

按照优先级顺序,选择:

  • scrypt
  • bcrypt
  • 如果以上2个都没有,那就用PBKDF2

此外,应该

  • 避免直接SHA-2
  • 避免直接SHA-1
  • 避免直接MD5

7. 非对称加密

应该使用NaCl库

适用场景:当你需要加密消息,发给陌生人,并且对方异步接收消息,做离线解密时。这是一个很窄的应用案例,这种用法有个名字叫电子信封(digital envelope),典型比如gpg加密文件后发送。

这条是几条之中最难做正确的,不要使用底层的密码学库,比如OpenSSL或者BouncyCastle。

你应该停止使用RSA,并且切换到椭圆曲线类体制,原因是:

  • 对RSA的攻击能力的进步 — 定义在传统质数域上的乘法运算(应用包括DH,DSA,ElGamal等),要比椭圆曲线域上的乘法运算快得多。这是由于质数域上数域筛法(number field sieve,NFS)的进展,而在椭圆曲线域上,没有NFS这类算法。
  • RSA (和DH) 或迫使你考虑“向后兼容性”,而椭圆曲线体制没有这种兼容性包袱。TLS最近的几个安全漏洞,部分原因也是由于这种向后兼容性,导致已经被破解的陈旧算法存在
  • RSA在一般场景中,都是直接用公钥做非对称加密,这种用法丧失了前向安全性(Perfect Forward Secrecy)。而椭圆曲线就不提倡,也很难这样使用,这样你就不会害死自己了。
  • 在椭圆曲线体制下,保证正确性和安全性的重任,主要由密码学家承担,密码学家会提供一组曲线参数,在某一性能水平下,针对安全性和性能做优化。这样程序员不容易误用而害死自己。在RSA体制下,正好相反,程序员必须提供参数来保证正确性和安全性,就算是RSA-OAEP这种很好的设计,程序员也必须知道怎么提供参数,这样程序员很容易搞错。

如果你必须使用RSA,一定要使用RSA-OAEP with SHA256,指数使用 65537

  • 避免 RSA-PKCS1v15
  • 避免 ElGamal
  • 避免 RSA

8. 非对称签名

应该使用NaCl,Ed25519,或者RFC6979

应用场景:如果你在设计一种新的比特币,或者一个给Ruby Gems或者Vagrant imges文件签名的系统,或者数字版权保护系统(DRM),其中一系列的文件需要离线做认证;
或者你在设计一个加密消息传输层

上一条的内容在此处全部适用。

在10+年做付费软件安全评估的工作经历中,我只有屈指可数的几次,遇到使用RSA-PSS的用户,RSA-PSS是一个学术界的推荐算法。

过去10年,非对称签名最主要的应用场景是比特币,和前向安全的密钥协商(TLS协议里面的ECDHE)。
其中最主要的算法全都是基于椭圆曲线体制的。务必警惕新出现的使用RSA签名的系统,很有可能有问题。

在过去几年中,业界有一种趋势:放弃传统DSA签名,改为难以误用的确定性签名体制,其中的EdDSA(不要和ECDSA搞混了喂!)和RFC6979是最好的例子。
这种趋势的主要是受到2010年索尼PlayStation 3的 ECDSA私钥被破解事件的影响,在这个案例中,索尼公司的码农错误地把一个随机数重复使用来做ECDSA签名,形成了漏洞,使得破解者据此直接把私钥算出来了。
确定性签名体制在设计中不再依赖随机数生成器,因此彻底避开此类误用。所以你应该优先使用确定性签名体制。

  • 避免RSA-PKCS1v15,避免RSA,避免ECDSA,避免DSA
  • 特别要避免常规的DSA和ECDSA

9. Diffie-Hellman 密钥交换

应该使用NaCl,Curve25519,或者DH-2048

适用场景:如果你在设计加密消息传输系统,并且无法使用固定对称密码

这是很棘手的一条,主要考量如下:

  • 如果你能使用NaCl库,那就使用NaCl库。你甚至不需要管NaCl是什么。
  • 如果你能使用一个可信赖的第三方库,那就使用Curve25519,这是一条现代的ECDH曲线,有丰富的开源代码,性能经过高度优化,被彻底地安全分析过。并且Curve25519即将进入TLS 1.3版本标准。
  • 但是绝对不要自己实现Curve25519,也绝对不要自己移植Curve25519的C代码
  • 如果你不能使用第三方ECDH库,但是可以使用DH库,那就使用DH-2048,使用1个标准的2048 bit的群。
  • 但是不要使用传统的DH,如果你需要协商DH参数,或者和其他实现互操作
  • 如果你一定要做握手协商,或者和旧软件互操作,那么考虑使用NIST P-256, NIST P-256 有广泛的软件支持。
  • 写死在代码里的DH-2048参数,比NIST P-256更安全。NIST P-256比协商出来的DH更安全。
  • 但是,由于NIST P-256的实现有一些陷阱,所以一定要谨慎选择可信赖的,广泛使用使的第三方库
  • P-256 可能是NIST曲线中最安全的,不要使用P-224。

DH(密钥协商)算法确实很难用,但是它很重要。

  • 避免,传统常规的 DH, SRP, J-PAKE 握手和协商
  • 避开任何只使用了块加密算法和srand(time())的密钥协商模式(肯定有漏洞)

10. 网站安全

应该使用OpenSSL,或者Google的BoringSSL,或者直接使用 AWS的 ELB

此处网站安全,指的是让网站支持HTTPS协议。
如果你不能把这个任务交给Amazon的云服务去做,把难题留给Amazon去解决,那么OpenSSL目前仍然是正确选择。

  • 避免不常见的TLS库,例如polarssl,GnuTLS,MatrixSSL等

11. 客户端-服务器结构的应用程序的安全

应该使用TLS

适用场景:如果你以为自己理解了前面关于公钥加密的介绍。。。

通常,在你设计了自己的RSA协议之后的1至18个月,你肯定会发现,你犯了某个错误,使你的协议没有任何安全性。
比如Salt Stack,Salt Stack的协议使用了 e=1 的RSA 公钥。。。

听起来,TLS有下面这些黑历史:

  • The Logjam DH negotiation attack
  • The FREAK export cipher attack
  • The POODLE CBC oracle attack
  • The RC4 fiasco
  • The CRIME compression attack
  • The Lucky13 CBC padding oracle timing attack
  • The BEAST CBC chained IV attack
  • Heartbleed
  • Renegotiation
  • Triple Handshakes
  • Compromised CAs

但是,你仍然应该使用TLS做传输协议,因为:

  • 这些漏洞中的大部分,仅仅是针对浏览器的,因为他们依赖受害者执行攻击者控制的JavaScript脚本,这些JavaScript脚本生成重复的明文,或特定的明文。
  • 这些漏洞中的大部分,其影响都可以被减轻,只需要你在代码和配置里面写死 TLS v1.2, ECDHE,和 AES-GCM就行。这听起来很棘手,但是这远远没有你自己设计使用ECDHE和AES-GCM的传输协议棘手。
  • 在一个自定义的传输协议的场景中,你并不需要依赖CA,你可以用一个自签名证书,嵌入到你的客户端里面。
  • 不要自己设计加密传输协议,这是极其困难而易错的工程难题
  • 使用TLS,但是不要使用默认配置

12. 在线备份

应该使用Tarsnap


名词解释

本文的内容比较新,相关中文资料极少,因此文中的名词对读者可能有点陌生,故byron这里介绍一下文中提到的一些名词:

1. NaCl库:

http://nacl.cr.yp.to/
是密码学学术权威 Daniel J. Bernstein教授 设计的一个密码学算法库,2008年发开始公布。
NaCl的特点是:api简洁而易用,高性能,高安全性,主要用于网络通信,加密,解密,签名等,NaCl提供了构建高层密码学工具的核心功能。

2. libsodium库:

https://download.libsodium.org/doc/
libsodium是对NaCl库的一个分支,进一步改进接口易用性,和可移植性。

3. AEAD:

https://www.imperialviolet.org/2014/02/27/tlssymmetriccrypto.html
AEAD的概念: 在通常的密码学应用中,Confidentiality (保密) 用加密实现,Message authentication (消息认证) 用MAC实现。
这两种算法的配合方式,引发了很多安全漏洞,过去曾经有3种方法:1. Encrypt-and-MAC 2.MAC-then-Encrypt 3.Encrypt-then-MAC ,后来发现,1和2都是有安全问题的,所以,2008年起, 逐渐提出了“用一个算法在内部同时实现cipher+MAC”的idea,称为AEAD(Authenticated encryption with additional data)。
在AEAD这种概念里,cipher+MAC 被 一个AEAD算法替换。
http://en.wikipedia.org/wiki/Authenticated_encryption

4. ChaCha20-poly1305

ChaCha20-poly1305是一种AEAD,提出者是Daniel J. Bernstein教授,针对移动互联网优化,目前Google对移动客户端的所有流量都使用ChaCha20-Poly1305

5. AES-GCM

AES-GCM是一种AEAD,是目前TLS的主力算法,互联网上https流量的大部分依赖使用AES-GCM。

6. AES-GCM和ChaCha20-Poly1305的性能对比测试结果:
Chip AES-128-GCM speed ChaCha20-Poly1305 speed
OMAP 4460 24.1 MB/s 75.3 MB/s
Snapdragon S4 Pro 41.5 MB/s 130.9 MB/s
Sandy Bridge Xeon (AESNI) 900 MB/s 500 MB/s
7. AES-CBC

关于AES-CBC,在AES-GCM流行之前,TLS主要依赖AES-CBC,而由于历史原因,TLS在设计之初固定选择了MAC-then-Encrypt结构,AES-CBC和MAC-then-encrypt结合,为选择密文攻击(CCA)创造了便利条件,TLS历史上有多个漏洞都和CBC模式有关:

8. SHA2

http://en.wikipedia.org/wiki/SHA-2

9. Curve25519

http://cr.yp.to/ecdh.html
Curve25519 是目前最高水平的 Diffie-Hellman函数,适用于广泛的场景,由Daniel J. Bernstein教授设计。
由于NIST P-256的设计过程不透明,有来历不明的参数,被广泛怀疑有后门,所以设计了Curve25519,Curve25519的设计过程完全公开,没有任何来历不明的参数。
部署情况:http://ianix.com/pub/curve25519-deployment.html

10. Ed25519

http://ed25519.cr.yp.to/
Ed25519是一个数字签名算法,

  • 签名和验证的性能都极高, 一个4核2.4GHz 的 Westmere cpu,每秒可以验证 71000 个签名
  • 安全性极高,等价于RSA约3000-bit
  • 签名过程不依赖随机数生成器,不依赖hash函数的防碰撞性,没有时间通道攻击的问题
  • 并且签名很小,只有64字节,公钥也很小,只有32字节。 部署情况:http://ianix.com/pub/ed25519-deployment.html
11. 前向安全性

前向安全性( Perfect Forward Secrecy ) http://vincent.bernat.im/en/blog/2011-ssl-perfect-forward-secrecy.html
前向安全性指的是,如果攻击者抓取并保存流量,那么将来私钥泄露后,攻击者也无法利用泄露的私钥解密这些流量。

12. Diffie-Hellman 密钥交换

http://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange
在任何一本密码学教材里面都会重点介绍的

13. constant time compare

针对Timing attack,http://en.wikipedia.org/wiki/Timing_attack (这种攻击真是脑洞大开!)
当一个算法的运行时间和输入数据有关的时候,可以根据运行时间这一信息,破解出密钥等。
典型的,比如要验证一个对称签名,如果你用了C库里面的memcmp(),那你就会被timing attack方式攻击。
因此,涉及到密码学数据的memcmp,必须要用运行时间和输入无关的函数,比如OpenSSL库里面的CRYPTO_memcmp()

from:


加密解密算法选择

密码学-加密解密
from bitcoin-on-nodejs 4-开发实践/0-加密与解密/3-三张图让你全面掌握加密解密技术

Archlinux 磁盘空间清理 free disk space

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# Archlinux 磁盘空间清理 free disk space


# show all disk space
df -h


# list dir space size
# https://bbs.archlinux.org/viewtopic.php?id=123224
du -md1 / | sort -n


# clean pacman cache
# /var/cache/pacman
pacman -Scc


# clean journal cache
# /var/cache/journal
# https://wiki.archlinux.org/index.php/Systemd_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)/Journal_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)
journalctl --disk-usage
journalctl --verify

journalctl --vacuum-time=2weeks
journalctl --vacuum-time=2d
journalctl --vacuum-size=100M

长寿个人网站构建思路

http://www.yini.org/

1
2
3
4
这个比QQ空间还古老的网站 是多少女孩的精神家园?
https://www.cnbeta.com/articles/tech/994799.htm
这个太活化石了,古老到我都不认识……
https://t.me/CE_Observe/13699

长时间的,缓慢的,逐步的,构建网站
逐个页面逐个页面地添加到网站上去,不需要考虑页面风格兼容问题
尽量不要使用某些工业化框架或商业服务,转而使用语言基本特性,考虑基础结构的可迁移性和可持续性,以尽可能延长网站的寿命

netdata汇聚多个节点的监测数据到一个中心节点

netdata proxy data config
the UUID generate from uuidgen
example is : a0047db7-6088-438a-b607-7f3b3e2e15a9
you can enable dbengine on the center to storage all data

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# center conf

# config revice data rule
# by https://learn.netdata.cloud/docs/agent/streaming/#options-for-the-receiving-node
# /etc/netdata/stream.conf
[a0047db7-6088-438a-b607-7f3b3e2e15a9]
enabled = yes
default history = 3600
default memory mode = dbengine
health enabled by default = auto
allow from = *

# enable dbengine on center
# by https://learn.netdata.cloud/docs/agent/database/engine/#configuration
# /etc/netdata/netdata.conf
[global]
memory mode = dbengine
page cache size = 32
dbengine disk space = 256
1
2
3
4
5
6
7
# node conf
# by https://learn.netdata.cloud/docs/agent/streaming/#options-for-the-sending-node
# /etc/netdata/stream.conf
[stream]
enabled = yes
destination = 192.168.137.164:19999
api key = a0047db7-6088-438a-b607-7f3b3e2e15a9

出现节点数量始终不能超过某一数值,例如slave节点数量始终不能超过4个的现象时,可能是因为文件打开句柄数受限了

可以使用以下方法在systemd配置文件中扩大句柄数限制

systemctl edit netdata

1
2
[Service]
LimitNOFILE=65536