ETH加强时间戳校验
① 比特币———一个币值8万多元人民币
接触过数字货币的人对比特币都不陌生,它是数字货币的祖宗,如果你在2010年的时候用三美元买1万个比特币留到现在,那么现在你的身价是8亿多人民币,是不是不可思议
区块链技术被称为是继,蒸汽机,电,互联网,之后的一个划时代的标志,
比特币的底层技术是什么呢?
是区块链技术,那么区块链技术又是什么呢,举个通俗易懂的例子,你去招商银行存钱,存了100万,有一天招商银行的银行系统被黑客攻击了,并且把你的账户的钱转走了50万,你的存款单也丢了,这时候银行不想把你丢了的钱补给你,你是不是要抓狂。区块链就是有无数的存储系统,而且里面都存有相同的内容,没有人可以修改已经生产的账单,就像以前只有一个账本,但是用了区块链之后就有无数的记账账本,而且分布在各个地方。更专业一点说,区块链技术是由利用块链式数据结构来验证和存储数据,利用分布式节点共识算法来生成和更新数据,利用密码学的方式来保证数据传输和访问的安全,利用由自动化脚本代码组成的智能合约来编程和操作数据的一种全新的分布式基础架构与计算方式。
但是现在是数字货币泛滥的年代,各种新的数字货币发行进行洗钱跑路,最后一地鸡毛,对于目前国家提倡的区块链技术和企业链改如果落到实地,这样的数字货币还是可以持有的,我们知道只有大公司才能上市,但是所以公司都能上链
如果你对某个数字货币非常了解,并且知道它的运营情况,有没有落地到实地帮助公司进行链改,技术支撑等,不然尽量不要去买。
回到BTC,BTC公链被称为区块链的1.0时代,采用的是POW共识机制,也就是工作量证明,你获得多少货币,取决于你挖矿贡献的有效工作,电脑性能越好,分给你的矿就越多,POW机制解决了拜占庭将军问题,就是在互相不信任的情况下,只要多少人都信任,那么就能保证系统的正确运作,但是也有一定的缺陷,就是处理交易的速度太慢,矿工们需要不断的通过计算来碰撞哈希值,这是劳民伤财且效率低下的。TPS系统吞吐量(用户并发量)7笔/秒。ETH这条公链被称为区块链的2.0时代,ETH提出了新的共识机制POW+POS(权益证明)简单来说就是你持有的币越多,你的权益就越高,因为你持有的币越多,持有币的时间越久,你的计算难度就会降低,挖矿会容易一些,TPS为21笔/秒。EOS被成为3.0的公链,DPOS共识机制(拜占庭容错的委托权益证明)对于POS机制的加密货币,每个节点都可以创建区块,并按照个人的持股比例获得“利息”,出块时间3秒,TPS为5000笔/秒。
一、从比特币看区块链技术
(一)比特币(Bitcoin)是一种数字加密货币比特币是一种数字加密货币,由中本聪(SatoshiNakamoto)2009 年1 月25 日设计上线。比特币的产生、发行和交易机制与传统货币不同。传统货币的产生、发行和交易依托于中央银行、商业银行等中心化的二元模式;而比特币的发行不需要中心化的金融中介,比特币社区用户可通过比特币区块链网络发行和管理数字加密货币。比特币是以黄金模式发行,人们形象地将该过程称为“挖矿(Mining)”,并将所有提供计算力的节点称为“矿工(Miner)”。目前,比特币挖矿的发行方式使每位矿工都可以从中获取6.25 个比特币的收益。实际上,比特币的发行过程是求解多重哈希值解方程(Hash Function)的过程。节点挖矿获得比特币的过程,是通过计算机进行大量计算求出合理的哈希值来实现的。简而言之,这个过程的主要目标是求解交易双方的公钥。每次求出的解都会作为下次计算的初始条件,节点在此基础计算新结果。当一个节点解出一组之前未解出的哈希值时,系统向全网络发布,各节点查验本地数据库。如果各节点发现该解正确,并且数据库中没有此解记录,将确认并记录该解的合法性。当所有节点都确认并记录完毕时,求出该解的节点便被奖励一定数量的比特币。作为比特币最底层的核心技术,区块链技术来源于2014 年10 月大英图书馆的一次研讨会。比特币是区块链技术最成功的金融应用,它以公开账本的形式在全网记录所有交易信息。随着比特币的普及和应用,区块链技术日益受到金融 科技 界的关注。
(二)区块链是弱中心化的分布式账本协议区块链技术提供了一份公共的分布式安全账本,是一种开放式的价值传递协议。实际上,区块链是一个由使用密码学方法相关联产生的数据块构成的弱中心化的数据库,任何发生在此区块链网络上的交易,均会以约定的算法记录到区块链系统上。所有节点都保存一份完整的数据备份,包含自该区块链系统形成以来的所有交易记录。区块链由一个个区块组成。区块是区块链的基本存储单元,记录了10 分钟内各节点的全部交易信息。每一个数据区块中包含一次交易信息,用于验证信息的有效性,并为下一个区块的生成做准备。区块由三部分组成:本区块的地址、交易单和前一个区块的地址。当区块链上一个节点发起一笔交易时,该节点需要将信息向其他节点进行公告。该节点用私钥加密信息,从而可有效防止信息伪造。由于了解 历史 交易信息,收到信息的节点利用备份信息能够判断交易是否真实。各节点验证成功后,将最后一个区块的地址与交易信息结合,形成一个新区块,并打上时间戳(Timestamp)连接到区块链上,完成交易的全过程。由于每个区块都拥有前一个区块的地址,人们可以通过后一区块地址找到前一区块,直至初始区块。因此,区块链就是由根据时间顺序相连接的区块构成的完整交易信息链条。
(三)区块链的特点
区块链是一个全新的数据库系统,具有弱中心化、不可篡改、包容性等特点。其中,弱中心化、不可篡改是区块链技术区别于传统技术的核心特征。这两个特征使得由区块链技术构建的系统能够通过系统机制设置,实现“自信任”。
1. 弱中心化。区块链系统的每个节点都保存着一份完整数据备份,能够有效预防中央服务器发生故障而导致的网络瘫痪和数据丢失,以及黑客对单个节点的恶意攻击,从而保证数据的安全。除非有人能同时控制系统中超过51% 的节点,否则对于单个节点的攻击不能影响其他节点数据的内容。
2. 不可篡改。区块链系统是一个公共的总账本,系统全部数据都公开、透明地记录在该账本上。所有数据通过网络共识算法记录,每笔基于区块链交易的新信息都会向全网发布,经各个节点逐一确认、保存后,将收到的交易信息形成新区块,确保区块链系统信息不可篡改、无法作假、可以追溯。同时,区块链技术使用随机散列算法和时间戳技术,节点在验证时会盖上时间戳,提供交易时间证明,保证同笔交易的唯一性。如果要修改某个区块的交易信息,必须要完成该区块及之后区块的所有信息。由于修改后会造成哈希值与原来的哈希值不同,无法通过其他节点确认,将使得修改无效,大大提高了篡改信息的难度。因此,区块链技术可以为交易提供可靠的信用保证。其不可篡改的特性为解决合同冲突提供了有效方案,可以应用于存储并公证永久性记录和需要确保信息真实性的领域。如,财产所有权的公证。
3. 包容性。区块链技术以算法为基础,摒弃了不同国家文化和经济差异,使各国机构可以建立统一的信用体系。此外,区块链技术是对外开源和共享的:任何进入区块链的机构和个人,不仅能提交记录,还能得到完整的系统 历史 交易记录,并对信息所有者确权;同时,由于区块链系统运行于互联网,符合要求的任何机构和个人都能以节点的方式加入该系统。
4.溯源,公开透明。
因为区块链或者说是数字货币涉及的知识与比应用比较多,感兴趣的朋友可以点关注,我会整理和发布更多的区块链和数字货币的知识
② 区块链的六层模型是什么
区块链总共有六个层级结构,这六个层级结构自下而上是:数据层、网络层、共识层、激励层、合约层、应用层。
一、数据层
数据层是区块链六个层级结构里面的最底层。数据层我们可以理解成数据库,只不过对于区块链来讲,这个数据库是不可篡改的、分布式的数据库,也就是我们所谓的“分布式账本”。
在数据层上,也就是在这个“分布式账本”上,存放着区块链上的数据信息,封装着区块的块链式结构、非对称加密技术、哈希算法等技术手段,来保证数据在全网公开的情况下的安全性问题。具体的做法是:
在区块链网络上,节点采用共识算法来维持数据层(也就是这个分布式数据库)的数据的一致性,采用密码学中的非对称加密和哈希算法,来确保这个分布式数据库的不可篡改和可追溯。
这就构成了区块链技术中最底层的数据结构。但是,光有分布式数据库还不够,还需要让数据库里面的数据信息可以共享交流,下面我们介绍数据层的上一层——网络层。
二、网络层
区块链的网络系统,本质上是一个P2P(点对点)网络,点对点意味着不需要一个中间环节或者中心化服务器来操控这个系统,网络中的所有资源和服务都是分配在各个节点手中的,信息的传输也是两个节点之间直接往来就可以了。不过,需要注意的是,P2P
(点对点)并不是中本聪发明的,区块链只是融合了这一技术而已。
所以,区块链的网络层实际上就是一个特别强大的点对点网络系统。在这个系统上,每一个节点既可以生产信息,也可以接收信息,就好比发邮件,你既可以编写自己的邮件,也可以收到别人给你发送的邮件。
在区块链网络上,节点之间需要共同维护这条区块链系统,每当一个节点创造出新的区块后,他需要以广播的形式通知其他节点,其他节点收到信息后对该区块进行验证,然后在该区块的基础上去创建新的区块。这样一来,全网便可以共同维护更新区块链系统这个总账本了。
但是,全网要依据什么规则来维护更新区块链系统这个总账本呢,这就涉及到了所谓的“法律法规”(规则),也就是我们接下来要介绍的:共识层。
三、共识层
在区块链的世界里,共识,简单来讲就是全网要依据一个统一的、大家一致同意的规则来维护更新区块链系统这个总账本,类似于更新数据的规则。让高度分散的节点在去中心化的区块链网络中高效达成共识,是区块链的核心技术之一,也是区块链社区的治理机制。
目前主流的共识机制算法有:比特币的工作量证明(POW)、以太坊的权益证明
(POS)、EOS的委托权益证明(DPOS)等等。
我们现在介绍了数据层、网络层、共识层,这三层保证了区块链上有数据、有网络,有在网络上更新数据的规则,但是天下没有免费的午餐,如何让节点们能够积极踊跃地参与区块链系统维护呢,这里就涉及到了激励,也就是我们下面要介绍的:激励层。
四、激励层
激励层就是所谓的挖矿机制,挖矿机制其实可以理解成激励机制:你为区块链系统做了多少贡献,你就可以得到多少奖励。用这种激励机制,能够鼓励全网节点参与区块链上的数据记录与维护工作。
挖矿机制和共识机制其实是一个道理,共识机制我们可以理解为公司的总规章制度,而挖矿机制可以理解成,在这个总的规章制度之中,你做好了什么能够得到什么奖励,这种奖励规则。
就好比比特币的共识机制PoW,它的规定是多劳多得,谁能够第一个找到正确哈希值谁就可以得到一定数量的比特币奖励;
而以太坊的PoS则规定了谁持币年龄越久,谁能得到奖励的概率就越大。
需要注意的是,激励层一般只有公有链才具备,因为公有链必须依赖全网节点共同维护数据,所以必须有一套这样的激励机制,才能激励全网节点参与区块链系统的建设维护,进而保证区块链系统的安全性和可靠性。
区块链安全可靠了,还不够智能对不对,下面我们将要介绍的合约层,可以让区块链系统变得更加智能。
五.合约层
合约层主要包括各种脚本、代码、算法机制及智能合约,是区块链可编程的基础。我们说的“智能合约”便属于合约层这个层级上。
如果说比特币系统不够智能,那么以太坊提出的“智能合约”则能够满足许多应用场景。合约层的原理主要是将代码嵌入到区块链系统上,用这种方式来实现能够自定义的智能合约。这样一来,在区块链系统上,一旦触发了智能合约的条款,系统就能够自动执行命令。
六、应用层
最后就是应用层。应用层很简单,顾名思义,就是区块链的各种应用场景和案例,我们现在说的“区块链+”就是所谓的应用层。目前已经落地的区块链应用主要是搭建在
ETH、EOS等公链上的各类区块链应用,博彩、游戏类的应用比较多,真正实用的应用还没有出现。
③ 20TCP IP 网络协议基础入门--IP网际协议
IP 数据报:IP 协议位于网络层,它是 TCP/IP 协议族中最为核心的协议,所有的 TCP、UDP、ICMP 及 IGMP 数据都以 IP 数据报格式传输。IP 协议提供的是不可靠、无连接的数据报传送服务。
我们已经知道了 IP 协议提供的数据传送服务是不可靠和无连接的,具体表现如下:
不可靠(unreliable):IP 协议不能保证数据报能成功地到达目的地,它仅提供传输服务。当发生某种错误时,IP 协议会丢弃该数据报。传输的可靠性全由上层协议来提供。
无连接(connectionless):IP 协议对每个数据报的处理是相互独立的。这也说明,IP 数据报可以不按发送顺序接收。如果发送方向接收方发送了两个连续的数据报(先是 A,然后是 B),每个数据报可以选择不同的路线,因此 B 可能在 A 到达之前先到达。
我们先看一下 IP 数据报的格式,其中没有一个字段是多余的,学习 IP 协议就应从学习它的报文字段意义和作用开始。
如上图所示,普通的 IP 数据报的报头长度 20 字节(除非有选颤棚项字段),各个部分的作用:
版本号:4 位,用于标明 IP 版本号,0100 表示 IPv4,0110 表示 IPv6。目前常见的是 IPv4。
首部长度:4 位,表示 IP 报头长度,包括选项字段。
服务类型(TOS):分别有:最小时延、最大吞吐量、最高可靠性、最小花费 4 种服务,如下图所示。4 个标识位只能有一个被置为 1。
总长度:16 位,报头长度加上数据部分长度,便是数据报的总长度。IP 数据报最长可达 65535 字节。
标识:16 位,接收方根据分片中的标识字段相不相同来判断这些分片是不是同一个数据报的分片,从而进行分片的重组。通常每发送一份报文它的值就会加 1。
标志:3 位,用于标识数据报是否分片。其中的第 2 位是不分段(DF)位。当 DF 位被设置为 1 时,则不对数据报进行分段处理;第 3 位是分段(MF)位,除了最后一个分段的 MF 位被设置为 0 外,其他的分段的 MF 位均设置为 1。
偏移:13 位,在接收方进行数据报重组时用来标识分片的顺序。
生存时间(TTL):8 位,用于设置数据报可以经过的最多的路由器个数。TTL 的初始值由源主机设置(通常为 32 或 64),每经过一个处理它的路由器,TTL 值减 1。如果一个数据报的 TTL 值被减至 0,它将被丢弃。
协议:8 位,用来标识是哪个协议向 IP 传送数据。ICMP 为 1,IGMP 为 2,TCP 为 6,UDP 为 17,GRE 为 47,ESP 为 50。
首部校验和:根据 IP 首部计算的校验和码。
源 IP 和目的 IP :数据报头还会包含该数据报的发送方 IP 和接收方雀洞颤 IP。
选项:是数据报中的一个可变长、可选的信息,不常用,多用于安全、军事等领域。
了解了上面的理论知识过后,我们可以使用 tcpmp 这个抓包工具来实际看一下。
-n :显示 IP 地址而非域名地址
-t :不显示时间戳
-x :以十六进制显示包内内容
-c :tcpmp 将在接受到几个数据包后退出
首先看到开头的 192.168.42.3.3001 > 172.16.2.250.44632 代表的是源 ip 为 192.168.42.3,端口 3001,目的 ip 为 172.16.2.250,端口 44632。
然后看到 0x0000 那行:
协议版本: 0x4 表示的是协议版本为 IPv4;
首部长度: 0x5,5*4=20,表示 IP 报头长度顷败为 20 字节。一个字节通常等于 8 位,所以这里可以知道 IP 报头为 4500 到 2a02;
TOS 服务类型:0x00,意味着是一般服务;
总长度:0x0136,换算下来为 310 字节;
标识:0x172a;
3bit 标志 + 13bit 片偏移:0x4000;
生存时间:0x40,值为 64;
协议:0x06,代表 TCP 协议;
首部校验和:0x88e2。
为了便于寻址以及层次化构造网络,每个 IP 地址可被看作是分为两部分,即网络号和主机号。同一个区域的所有主机有相同的网络号(即 IP 地址的前半部分相同),区域内的每个主机(包括路由器)都有一个主机号与其对应。
IP 地址被分为 A、B、C、D、E 五类:
A 类给大型网络或政府机构等;
B 类分配给中型网络、跨国企业等;
C 类分配给小型网络;
D 类用于多播;
E 类用于实验。
各类可容纳的地址数目不同,其中我们最常见的为 A、B、C 这三类。
IP 地址用 32 位二进制数字表示的时候,A、B、C 类 IP 的网络号长度分别为 8 位、16 位、24 位:
A 类地址:
A 类地址网络号范围:1.0.0.0---127.0.0.0;
A 类 IP 地址范围:1.0.0.0---127.255.255.255;
A 类 IP 的私有地址范围:10.0.0.0---10.255.255.255 (所谓的私有地址就是在互联网上不使用,而被用在局域网络中的地址);
127.X.X.X 是保留地址,用做循环测试用的;
因为主机号有 24 位,所以一个 A 类网络号可以容纳 2^24-2=16777214 个主机号。
B 类地址:
B 类地址网络号范围:128.0.0.0---191.255.0.0;
B 类 IP 地址范围:128.0.0.0---191.255.255.255;
B 类 IP 的私有地址范围:172.16.0.0---172.31.255.255;
169.254.X.X 是保留地址;191.255.255.255 是广播地址;
因为主机号有 16 位,所以一个 B 类网络号可以容纳 2^16-2=65534 个主机号。
C 类地址:
C 类地址网络号范围:192.0.0.0---223.255.255.0;
C 类 IP 地址范围:192.0.0.0---223.255.255.255;
C 类 IP 的私有地址范围:192.168.0.0---192.168.255.255;
因为主机号有 8 位,所以一个 C 类网络号可以容纳 2^8-2=254 个主机号。
下面使用 ifconfig 命令来查看本机 ip:
思考:这是一个几类 ip 地址?
C 类
IP 地址如果只使用 ABCDE 类来划分,会造成大量的浪费:一个有 500 台主机的网络,无法使用 C 类地址。但如果使用一个 B 类地址,6 万多个主机地址只有 500 个被使用,造成 IP 地址的大量浪费。
因此,可以在 ABC 类网络的基础上,进一步划分子网:占用主机号的前几个位,用于表示子网号。
这样 IP 地址就可看作 IP = 网络号 + 子网号 + 主机号。
子网号的位数没有硬性规定,于是我们用子网掩码来确定一个 IP 地址中哪几位是主机号,具体使用方法如图:
子网掩码中的 1 标识了 IP 地址中相应的网络号和子网号,0 标识了主机号。将 IP 地址和子网掩码进行逻辑与运算,结果就能区分网络号和子网号。
使用 ifconfig 命令也可以查看到子网掩码:
如果发送方与接收方直接相连(点对点)或都在一个共享网络上(以太网),那么 IP 数据报就能直接送达。
而大多数情况则是发送方与接收方通过若干个路由器(router)连接,那么数据报就需要经过若干个路由器的转发才能送达,它是怎么选择一个合适的路径来"送货"的呢?
IP 层在内存中有一个路由表(输入命令 route -n 可以查看路由表),当收到一份数据报并进行发送时,都要对该表进行搜索:
搜索路由表,如果能找到和目的 IP 地址完全一致的主机,则将 IP 数据报发向该主机;
搜索路由表,如果匹配主机失败,则匹配同子网的路由器(这需要子网掩码的协助)。如果找到路由器,则将该 IP 数据报发向该路由器;
搜索路由表,如果匹配同子网路由器失败,则匹配同网络号路由器,如果找到路由器,则将该 IP 数据报发向该路由器;
如果以上都失败了,就搜索默认路由,如果默认路由存在,则发报;
如果都失败了,就丢掉这个包;
接收到数据报的路由器再按照它自己的路由表继续转发,直到数据报被转发到目的主机;
如果在转发过程中,IP 数据报的 TTL(生命周期)已经被减为 0,则该 IP 数据报就被抛弃。
实验环境中可以使用 route -n 查看路由表:
另外我们可以使用 traceroute 来追踪路由过程。首先需要安装一下:
接下来使用 traceroute 追踪本机到 www.shiyanlou.com 的路由:
还有一些其他选项,比如:
设置跳数为 8
探测包个数设为 4
显示 IP 地址,不查主机名
当你用 ifconfig 查看 IP 地址时,有时你会发现自己的 IP 地址是这样的———192.168.X.X 或 172.16.X.X。这是 C 类网和 B 类网的私有地址,就是俗称的内网 IP。这是因为你的路由器采用了 NAT 技术。
NAT(Network Address Translation,网络地址转换)是 1994 年提出的。当在专用网内部的一些主机本来已经分配到了内网 IP 地址,但现在又想和因特网上的主机通信时,NAT 技术将其内网 IP 地址转换成全球 IP 地址,然后与因特网连接,也就是说,内网的数台主机使用了同一个全球 IP 地址在上网。
NAT 技术实现了宽带共享,而且有助于缓解 IP 地址空间枯竭的问题。
使用 ifconfig eth0 查看内网 ip:
我们现在使用的 IPv4 协议版本从理论上讲,可以编址 1600 万个网络、40 亿台主机。但采用 A、B、C 三类编址方式后,可用的网络地址和主机地址的数目大打折扣,以至 IP 地址已于 2011 年 2 月 3 日分配完毕。
其中北美占有 3/4,约 30 亿个,而人口最多的亚洲只有不到 4 亿个,中国截止 2010 年 6 月 IPv4 地址数量达到 2.5 亿,落后于 4.2 亿网民的需求。地址不足,严重地制约了中国及其他国家互联网的应用和发展。
随着网络技术的发展,计算机网络将进入人们的日常生活,可能身边的每一样东西都需要连入全球因特网,在这样的环境下,IPv6 应运而生。
IPv6 的地址长度是 128 位,通常将这 128 位的地址按每 16 位划分为一个段,将每个段转换成十六进制数字,并用冒号隔开,比如:2000:0000:0000:0000:0001:2345:6789:abcd 就是一个 IPv6 地址。
单从数量级上来说,IPv6 所拥有的地址容量是 IPv4 的约 8×10^28 倍,达到 2^128(算上全零的)个。这不但解决了网络地址资源数量的问题,同时也为除电脑外的设备连入互联网在数量限制上扫清了障碍。
随着 IPv4 不足,支持 IPv6 的网络迅速增长,现在全球已经有 5% 的网络使用 IPv6。
查看 IP 路由表。
子网划分:现有两个 C 类网,202.203.204.0 和 202.203.224.0,分别把它们平均分成 4 个和 8 个子网,写出每个子网的起始、终结 IP 和子网掩码。
④ 一般优化linux的内核,需要优化什么参数
Sysctl命令及linux内核参数调整
一、Sysctl命令用来配置与显示在/proc/sys目录中的内核参数.如果想使参数长期保存,可以通过编辑/etc/sysctl.conf文件来实现。
命令格式:
sysctl [-n] [-e] -w variable=value
sysctl [-n] [-e] -p (default /etc/sysctl.conf)
sysctl [-n] [-e] –a
常用参数的意义:
-w 临时改变某个指定参数的值,如
# sysctl -w net.ipv4.ip_forward=1
-a 显示所有的系统参数
-p从指定的文件加载系统参数,默认从/etc/sysctl.conf 文件中加载,如:
# echo 1 > /proc/sys/net/ipv4/ip_forward
# sysctl -w net.ipv4.ip_forward=1
以上两种方法都可能立即开启路由功能,但如果系统重启,或执行了
# service network restart
命令,所设置的值即会丢失,如果想永久保留配置,可以修改/etc/sysctl.conf文件,将 net.ipv4.ip_forward=0改为net.ipv4.ip_forward=1
二、linux内核参数调整:linux 内核参数调整有两种方式
方法一:修改/proc下内核参数文件内容,不能使用编辑器来修改内核参数文件,理由是由于内核随时可能更改这些文件中的任意一个,另外,这些内核参数文件都是虚拟文件,实际中不存在,因此不能使用编辑器进行编辑,而是使用echo命令,然后从命令行将输出重定向至 /proc 下所选定的文件中。如:将 timeout_timewait 参数设置为30秒:
# echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout
参数修改后立即生效,但是重启系统后,该参数又恢复成默认值。因此,想永久更改内核参数,需要修改/etc/sysctl.conf文件
方法二.修改/etc/sysctl.conf文件。检查sysctl.conf文件,如果已经包含需要修改的参数,则修改该参数的值,如果没有需要修改的参数,在sysctl.conf文件中添加参数。如:
net.ipv4.tcp_fin_timeout=30
保存退出后,可以重启机器使参数生效,如果想使参数马上生效,也可以执行如下命令:
# sysctl -p
三、sysctl.conf 文件中参数设置及说明
proc/sys/net/core/wmem_max
最大socket写buffer,可参考的优化值:873200
/proc/sys/net/core/rmem_max
最大socket读buffer,可参考的优化值:873200
/proc/sys/net/ipv4/tcp_wmem
TCP写buffer,可参考的优化值: 8192 436600 873200
/proc/sys/net/ipv4/tcp_rmem
TCP读buffer,可参考的优化值: 32768 436600 873200
/proc/sys/net/ipv4/tcp_mem
同样有3个值,意思是:
net.ipv4.tcp_mem[0]:低于此值,TCP没有内存压力.
net.ipv4.tcp_mem[1]:在此值下,进入内存压力阶段.
net.ipv4.tcp_mem[2]:高于此值,TCP拒绝分配socket.
上述内存单位是页,而不是字节.可参考的优化值是:786432 1048576 1572864
/proc/sys/net/core/netdev_max_backlog
进入包的最大设备队列.默认是300,对重负载服务器而言,该值太低,可调整到1000
/proc/sys/net/core/somaxconn
listen()的默认参数,挂起请求的最大数量.默认是128.对繁忙的服务器,增加该值有助于网络性能.可调整到256.
/proc/sys/net/core/optmem_max
socket buffer的最大初始化值,默认10K
/proc/sys/net/ipv4/tcp_max_syn_backlog
进入SYN包的最大请求队列.默认1024.对重负载服务器,可调整到2048
/proc/sys/net/ipv4/tcp_retries2
TCP失败重传次数,默认值15,意味着重传15次才彻底放弃.可减少到5,尽早释放内核资源.
/proc/sys/net/ipv4/tcp_keepalive_time
/proc/sys/net/ipv4/tcp_keepalive_intvl
/proc/sys/net/ipv4/tcp_keepalive_probes
这3个参数与TCP KeepAlive有关.默认值是:
tcp_keepalive_time = 7200 seconds (2 hours)
tcp_keepalive_probes = 9
tcp_keepalive_intvl = 75 seconds
意思是如果某个TCP连接在idle 2个小时后,内核才发起probe.如果probe 9次(每次75秒)不成功,内核才彻底放弃,认为该连接已失效.对服务器而言,显然上述值太大. 可调整到:
/proc/sys/net/ipv4/tcp_keepalive_time 1800
/proc/sys/net/ipv4/tcp_keepalive_intvl 30
/proc/sys/net/ipv4/tcp_keepalive_probes 3
/proc/sys/net/ipv4/ip_local_port_range
指定端口范围的一个配置,默认是32768 61000,已够大.
net.ipv4.tcp_syncookies = 1
表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;
net.ipv4.tcp_tw_reuse = 1
表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;
net.ipv4.tcp_tw_recycle = 1
表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。
net.ipv4.tcp_fin_timeout = 30
表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。
net.ipv4.tcp_keepalive_time = 1200
表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时,改为20分钟。
net.ipv4.ip_local_port_range = 1024 65000
表示用于向外连接的端口范围。缺省情况下很小:32768到61000,改为1024到65000。
net.ipv4.tcp_max_syn_backlog = 8192
表示SYN队列的长度,默认为1024,加大队列长度为8192,可以容纳更多等待连接的网络连接数。
net.ipv4.tcp_max_tw_buckets = 5000
表示系统同时保持TIME_WAIT套接字的最大数量,如果超过这个数字,TIME_WAIT套接字将立刻被清除并打印警告信息。默认为 180000,改为 5000。对于Apache、Nginx等服务器,上几行的参数可以很好地减少TIME_WAIT套接字数量,但是对于Squid,效果却不大。此项参数可以控制TIME_WAIT套接字的最大数量,避免Squid服务器被大量的TIME_WAIT套接字拖死。
Linux上的NAT与iptables
谈起Linux上的NAT,大多数人会跟你提到iptables。原因是因为iptables是目前在linux上实现NAT的一个非常好的接口。它通过和内核级直接操作网络包,效率和稳定性都非常高。这里简单列举一些NAT相关的iptables实例命令,可能对于大多数实现有多帮助。
这里说明一下,为了节省篇幅,这里把准备工作的命令略去了,仅仅列出核心步骤命令,所以如果你单单执行这些没有实现功能的话,很可能由于准备工作没有做好。如果你对整个命令细节感兴趣的话,可以直接访问我的《如何让你的Linux网关更强大》系列文章,其中对于各个脚本有详细的说明和描述。
# 案例1:实现网关的MASQUERADE
# 具体功能:内网网卡是eth1,外网eth0,使得内网指定本服务做网关可以访问外网
EXTERNAL="eth0"
INTERNAL="eth1"
# 这一步开启ip转发支持,这是NAT实现的前提
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o $EXTERNAL -j MASQUERADE
# 案例2:实现网关的简单端口映射
# 具体功能:实现外网通过访问网关的外部ip:80,可以直接达到访问私有网络内的一台主机192.168.1.10:80效果
LOCAL_EX_IP=11.22.33.44 #设定网关的外网卡ip,对于多ip情况,参考《如何让你的Linux网关更强大》系列文章
LOCAL_IN_IP=192.168.1.1 #设定网关的内网卡ip
INTERNAL="eth1" #设定内网卡
# 这一步开启ip转发支持,这是NAT实现的前提
echo 1 > /proc/sys/net/ipv4/ip_forward
# 加载需要的ip模块,下面两个是ftp相关的模块,如果有其他特殊需求,也需要加进来
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
# 这一步实现目标地址指向网关外部ip:80的访问都吧目标地址改成192.168.1.10:80
iptables -t nat -A PREROUTING -d $LOCAL_EX_IP -p tcp --dport 80 -j DNAT --to 192.168.1.10
# 这一步实现把目标地址指向192.168.1.10:80的数据包的源地址改成网关自己的本地ip,这里是192.168.1.1
iptables -t nat -A POSTROUTING -d 192.168.1.10 -p tcp --dport 80 -j SNAT --to $LOCAL_IN_IP
# 在FORWARD链上添加到192.168.1.10:80的允许,否则不能实现转发
iptables -A FORWARD -o $INTERNAL -d 192.168.1.10 -p tcp --dport 80 -j ACCEPT
# 通过上面重要的三句话之后,实现的效果是,通过网关的外网ip:80访问,全部转发到内网的192.168.1.10:80端口,实现典型的端口映射
# 特别注意,所有被转发过的数据都是源地址是网关内网ip的数据包,所以192.168.1.10上看到的所有访问都好像是网关发过来的一样,而看不到外部ip
# 一个重要的思想:数据包根据“从哪里来,回哪里去”的策略来走,所以不必担心回头数据的问题
# 现在还有一个问题,网关自己访问自己的外网ip:80,是不会被NAT到192.168.1.10的,这不是一个严重的问题,但让人很不爽,解决的方法如下:
iptables -t nat -A OUTPUT -d $LOCAL_EX_IP -p tcp --dport 80 -j DNAT --to 192.168.1.10
获取系统中的NAT信息和诊断错误
了解/proc目录的意义
在Linux系统中,/proc是一个特殊的目录,proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。它包含当前系统的一些参数(variables)和状态(status)情况。它以文件系统的方式为访问系统内核数据的操作提供接口
通过/proc可以了解到系统当前的一些重要信息,包括磁盘使用情况,内存使用状况,硬件信息,网络使用情况等等,很多系统监控工具(如HotSaNIC)都通过/proc目录获取系统数据。
另一方面通过直接操作/proc中的参数可以实现系统内核参数的调节,比如是否允许ip转发,syn-cookie是否打开,tcp超时时间等。
获得参数的方式:
第一种:cat /proc/xxx/xxx,如 cat /proc/sys/net/ipv4/conf/all/rp_filter
第二种:sysctl http://xxx.xxx.xxx,如 sysctl net.ipv4.conf.all.rp_filter
改变参数的方式:
第一种:echo value > /proc/xxx/xxx,如 echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter
第二种:sysctl [-w] variable=value,如 sysctl [-w] net.ipv4.conf.all.rp_filter=1
以上设定系统参数的方式只对当前系统有效,重起系统就没了,想要保存下来,需要写入/etc/sysctl.conf文件中
通过执行 man 5 proc可以获得一些关于proc目录的介绍
查看系统中的NAT情况
和NAT相关的系统变量
/proc/slabinfo:内核缓存使用情况统计信息(Kernel slab allocator statistics)
/proc/sys/net/ipv4/ip_conntrack_max:系统支持的最大ipv4连接数,默认65536(事实上这也是理论最大值)
/proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_established 已建立的tcp连接的超时时间,默认432000,也就是5天
和NAT相关的状态值
/proc/net/ip_conntrack:当前的前被跟踪的连接状况,nat翻译表就在这里体现(对于一个网关为主要功能的Linux主机,里面大部分信息是NAT翻译表)
/proc/sys/net/ipv4/ip_local_port_range:本地开放端口范围,这个范围同样会间接限制NAT表规模
# 1. 查看当前系统支持的最大连接数
cat /proc/sys/net/ipv4/ip_conntrack_max
# 值:默认65536,同时这个值和你的内存大小有关,如果内存128M,这个值最大8192,1G以上内存这个值都是默认65536
# 影响:这个值决定了你作为NAT网关的工作能力上限,所有局域网内通过这台网关对外的连接都将占用一个连接,如果这个值太低,将会影响吞吐量
# 2. 查看tcp连接超时时间
cat /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_established
# 值:默认432000(秒),也就是5天
# 影响:这个值过大将导致一些可能已经不用的连接常驻于内存中,占用大量链接资源,从而可能导致NAT ip_conntrack: table full的问题
# 建议:对于NAT负载相对本机的 NAT表大小很紧张的时候,可能需要考虑缩小这个值,以尽早清除连接,保证有可用的连接资源;如果不紧张,不必修改
# 3. 查看NAT表使用情况(判断NAT表资源是否紧张)
# 执行下面的命令可以查看你的网关中NAT表情况
cat /proc/net/ip_conntrack
# 4. 查看本地开放端口的范围
cat /proc/sys/net/ipv4/ip_local_port_range
# 返回两个值,最小值和最大值
# 下面的命令帮你明确一下NAT表的规模
wc -l /proc/net/ip_conntrack
#或者
grep ip_conntrack /proc/slabinfo | grep -v expect | awk '{print $1 ',' $2;}'
# 下面的命令帮你明确可用的NAT表项,如果这个值比较大,那就说明NAT表资源不紧张
grep ip_conntrack /proc/slabinfo | grep -v expect | awk '{print $1 ',' $3;}'
# 下面的命令帮你统计NAT表中占用端口最多的几个ip,很有可能这些家伙再做一些bt的事情,嗯bt的事情:-)
cat /proc/net/ip_conntrack | cut -d ' ' -f 10 | cut -d '=' -f 2 | sort | uniq -c | sort -nr | head -n 10
# 上面这个命令有点瑕疵cut -d' ' -f10会因为命令输出有些行缺项而造成统计偏差,下面给出一个正确的写法:
cat /proc/net/ip_conntrack | perl -pe s/^(.*?)src/src/g | cut -d ' ' -f1 | cut -d '=' -f2 | sort | uniq -c | sort -nr | head -n 10
https://kernel.0voice.com/
⑤ 关于LINUX最基本的一些命令
Linux运维人员必会的120个命令
跟老男孩学Linux运维:核心系统命令实战
前言
第1章 Linux命令行简介 / 1
1.1Linux命令行概述 / 1
1.2在Linux命令行下查看命令帮助 / 4
1.3Linux shutdown reboot halt / 9
关机:
shutdown -h now
halt
init 0
第2章 文件和目录操作命令 / 13
2.1pwd:显示当前所在的位置 / 13
2.2cd:切换目录 / 16
2.3tree:以树形结构显示目录下的内容 / 18
2.4mkdir:创建目录 / 22
2.5touch:创建空文件或改变文件的时间戳属性 / 27
2.6ls:显示目录下的内容及相关属性信息 / 30
2.7cp:复制文件或目录 / 39
2.8mv:移动或重命名文件 / 42
2.9rm:删除文件或目录 / 45
2.10rmdir:删除空目录 / 48
2.11ln:硬链接与软链接 / 49
2.12readlink:查看符号链接文件的内容 / 54
2.13find:查找目录下的文件 / 55
2.14xargs:将标准输入转换成命令行参数 / 68
2.15rename:重命名文件 / 71
2.16basename:显示文件名或目录名 / 72
2.17dirname:显示文件或目录路径 / 72
2.18chattr:改变文件的扩展属性 / 73
2.19lsattr:查看文件扩展属性 / 75
2.20file:显示文件的类型 / 76
2.21md5sum:计算和校验文件的MD5值 / 77
2.22chown:改变文件或目录的用户和用户组 / 80
2.23chmod:改变文件或目录权限 / 81
2.24chgrp:更改文件用户组 / 85
2.25umask:显示或设置权限掩码 / 86
2.26老男孩从新手成为技术大牛的心法 / 90
第3章 文件过滤及内容编辑处理命令 / 91
3.1cat:合并文件或查看文件内容 / 91
3.2tac:反向显示文件内容 / 103
3.3more:分页显示文件内容 / 104
3.4less:分页显示文件内容 / 107
3.5head:显示文件内容头部 / 109
3.6tail:显示文件内容尾部 / 111
3.7tailf:跟踪日志文件 / 114
3.8cut:从文本中提取一段文字并输出 / 115
3.9split:分割文件 / 117
3.10paste:合并文件 / 118
3.11sort:文本排序 / 123
3.12join:按两个文件的相同字段合并 / 127
3.13uniq:去除重复行 / 129
3.14wc:统计文件的行数、单词数或字节数 / 131
3.15iconv:转换文件的编码格式 / 133
3.16dos2unix:将DOS格式文件转换成UNIX格式 / 134
3.17diff:比较两个文件的不同 / 135
3.18vimdiff:可视化比较工具 / 138
3.19rev:反向输出文件内容 / 139
3.20tr:替换或删除字符 / 140
3.21od:按不同进制显示文件 / 143
3.22tee:多重定向 / 145
3.23vi/vim:纯文本编辑器 / 147
3.24老男孩逆袭思想:做Linux运维的多个好处 / 152
第4章 文本处理三剑客 / 153
4.1grep:文本过滤工具 / 153
4.2sed:字符流编辑器 / 159
4.3awk基础入门 / 165
第5章 Linux信息显示与搜索文件命令 / 176
5.1uname:显示系统信息 / 176
5.2hostname:显示或设置系统的主机名 / 178
5.3dmesg:系统启动异常诊断 / 179
5.4stat:显示文件或文件系统状态 / 181
5.5:统计磁盘空间使用情况 / 183
5.6date:显示与设置系统时间 / 186
5.7echo:显示一行文本 / 190
5.8watch:监视命令执行情况 / 193
5.9which:显示命令的全路径 / 195
5.10whereis:显示命令及其相关文件全路径 / 196
5.11locate:快速定位文件路径 / 197
5.12updatedb:更新mlocate数据库 / 199
5.13老男孩逆袭思想:新手在工作中如何问问题不会被鄙视 / 200
第6章 文件备份与压缩命令 / 201
6.1tar:打包备份 / 201
6.2gzip:压缩或解压文件 / 208
6.3zip:打包和压缩文件 / 211
6.4unzip:解压zip文件 / 212
6.5scp:远程文件复制 / 214
6.6rsync:文件同步工具 / 216
6.7老男孩逆袭思想:新手如何高效地提问 / 220
第7章 Linux用户管理及用户信息查询命令 / 222
7.1 useradd:创建用户 / 222
7.2usermod:修改用户信息 / 227
7.3userdel:删除用户 / 229
7.4groupadd:创建新的用户组 / 230
7.5groupdel:删除用户组 / 231
7.6passwd:修改用户密码 / 232
7.7chage:修改用户密码有效期 / 237
7.8chpasswd:批量更新用户密码 / 238
7.9su:切换用户 / 240
7.10visudo:编辑sudoers文件 / 242
7.11sudo:以另一个用户身份执行命令 / 244
7.12id:显示用户与用户组的信息 / 248
7.13w:显示已登录用户信息 / 249
7.14who:显示已登录用户信息 / 250
7.15users:显示已登录用户 / 252
7.16whoami:显示当前登录的用户名 / 253
7.17last:显示用户登录列表 / 253
7.18lastb:显示用户登录失败的记录 / 254
7.19lastlog:显示所有用户的最近登录记录 / 255
第8章 Linux磁盘与文件系统管理命令 / 257
8.1fdisk:磁盘分区工具 / 257
8.2partprobe:更新内核的硬盘分区表信息 / 265
8.3tune2fs:调整ext2/ext3/ext4文件系统参数 / 266
8.4parted:磁盘分区工具 / 268
8.5mkfs:创建Linux文件系统 / 272
8.6mpe2fs:导出ext2/ext3/ext4文件系统信息 / 274
8.7resize2fs:调整ext2/ext3/ext4文件系统大小 / 275
8.8fsck:检查并修复Linux文件系统 / 278
8.9dd:转换或复制文件 / 281
8.10mount:挂载文件系统 / 284
8.11umount:卸载文件系统 / 288
8.12df:报告文件系统磁盘空间的使用情况 / 289
8.13mkswap:创建交换分区 / 293
8.14swapon:激活交换分区 / 294
8.15swapoff:关闭交换分区 / 295
8.16sync:刷新文件系统缓冲区 / 296
第9章 Linux进程管理命令 / 298
9.1ps:查看进程 / 298
9.2pstree:显示进程状态树 / 305
9.3pgrep:查找匹配条件的进程 / 306
9.4kill:终止进程 / 307
9.5killall:通过进程名终止进程 / 310
9.6pkill:通过进程名终止进程 / 311
9.7top:实时显示系统中各个进程的资源占用状况 / 313
9.8nice:调整程序运行时的优先级 / 320
9.9renice:调整运行中的进程的优先级 / 323
9.10nohup:用户退出系统进程继续工作 / 324
9.11strace:跟踪进程的系统调用 / 325
9.12ltrace:跟踪进程调用库函数 / 332
9.13runlevel:输出当前运行级别 / 334
9.14init:初始化Linux进程 / 335
9.15service:管理系统服务 / 335
第10章 Linux网络管理命令 / 338
10.1ifconfig:配置或显示网络接口信息 / 338
10.2ifup:激活网络接口 / 343
ifup eth0
10.3ifdown:禁用网络接口 / 343
ifdown eth0
service network restart(/etc/init.d/network restart) 激活整个网络,所有网卡。
10.4route:显示或管理路由表 / 344
10.5arp:管理系统的arp缓存 / 350
10.6ip:网络配置工具 / 351
10.7netstat:查看网络状态 / 358
10.8ss:查看网络状态 / 362
10.9ping:测试主机之间网络的连通性 / 363
10.10traceroute:追踪数据传输路由状况 / 366
10.11arping:发送arp请求 / 367
10.12telnet:远程登录主机 / 369
10.13nc:多功能网络工具 / 370
10.14ssh:安全地远程登录主机 / 373
10.15wget:命令行下载工具 / 376
10.16mailq:显示邮件传输队列 / 379
10.17mail:发送和接收邮件 / 381
10.18nslookup:域名查询工具 / 386
10.19dig:域名查询工具 / 389
10.20host:域名查询工具 / 393
10.21nmap:网络探测工具和安全/端口扫描器 / 394
10.22tcpmp:监听网络流量 / 398
第11章 Linux系统管理命令 / 407
11.1lsof:查看进程打开的文件 / 407
11.2uptime:显示系统的运行时间及负载 / 411
11.3free:查看系统内存信息 / 411
11.4iftop:动态显示网络接口流量信息 / 413
11.5vmstat:虚拟内存统计 / 415
11.6mpstat:CPU信息统计 / 419
11.7iostat:I/O信息统计 / 420
11.8iotop:动态显示磁盘I/O统计信息 / 423
11.9sar:收集系统信息 / 425
11.10chkconfig:管理开机服务 / 430
11.11ntsysv:管理开机服务 / 433
11.12 setup:系统管理工具 / 434
11.13ethtool:查询网卡参数 / 436
11.14mii-tool:管理网络接口的状态 / 437
11.19rpm:RPM包管理器 / 443
11.20yum:自动化RPM包管理工具 / 446
top命令
第12章 Linux系统常用内置命令 / 450
12.1Linux内置命令概述 / 450
12.2Linux内置命令简介 / 450
12.3Linux常用内置命令实例 / 452
⑥ 【NIC】如何使用 ethtool 命令管理以太网卡
ethtool 是一个 Linux 下的网络驱动程序的诊断和调整工具,可获取网络设备的相关信息,包括连接状态、驱动版本、PCI 总线定位等等。
它可以用来:
获取标识和诊断信息
获取扩展的设备统计信息
控制以太网设备的速度、双工、自动协商和流控制
控制校验和卸载及其他硬件卸载功能
控制 DMA 环大小及中断控制
控制多队列设备的接收队列选择
升级闪存中的固件
万兆网卡,理论最大支持 1250MB/s 实际 能有 几百MB /s 就不错了,要考虑交换机的能力。
如何使用 ethtool 命令管理以太网卡
https://zhuanlan.hu.com/p/146383216
ethtool工具使用实例
https://www.cnblogs.com/taosiyu/p/13425774.html
Linux网络命令——ifconfig、ifup、ifdown
https://blog.csdn.net/lu_embedded/article/details/53215324
ethtool(8) - Linux man page
https://linux.die.net/man/8/ethtool
ethtool : How to use ethtool command in Linux with examples
https://cmdref.net/os/linux/command/ethtool.html
ethtool - Unix, Linux Command
https://www.tutorialspoint.com/unix_commands/ethtool.htm
⑦ 区块链如何保证使用安全
区块链项目(尤其是公有链)的一个特点是开源。通过开放源代码,来提高项目的可信性,也使更多的人可以参与进来。但源代码的开放也使得攻击者对于区块链系统的攻击变得更加容易。近两年就发生多起黑客攻击事件,近日就有匿名币Verge(XVG)再次遭到攻击,攻击者锁定了XVG代码中的某个漏洞,该漏洞允许恶意矿工在区块上添加虚假的时间戳,随后快速挖出新块,短短的几个小时内谋取了近价值175万美元的数字货币。虽然随后攻击就被成功制止,然而没人能够保证未来攻击者是否会再次出击。
当然,区块链开发者们也可以采取一些措施
一是使用专业的代码审计服务,
二是了解安全编码规范,防患于未然。
密码算法的安全性
随着量子计算机的发展将会给现在使用的密码体系带来重大的安全威胁。区块链主要依赖椭圆曲线公钥加密算法生成数字签名来安全地交易,目前最常用的ECDSA、RSA、DSA 等在理论上都不能承受量子攻击,将会存在较大的风险,越来越多的研究人员开始关注能够抵抗量子攻击的密码算法。
当然,除了改变算法,还有一个方法可以提升一定的安全性:
参考比特币对于公钥地址的处理方式,降低公钥泄露所带来的潜在的风险。作为用户,尤其是比特币用户,每次交易后的余额都采用新的地址进行存储,确保有比特币资金存储的地址的公钥不外泄。
共识机制的安全性
当前的共识机制有工作量证明(Proof of Work,PoW)、权益证明(Proof of Stake,PoS)、授权权益证明(Delegated Proof of Stake,DPoS)、实用拜占庭容错(Practical Byzantine Fault Tolerance,PBFT)等。
PoW 面临51%攻击问题。由于PoW 依赖于算力,当攻击者具备算力优势时,找到新的区块的概率将会大于其他节点,这时其具备了撤销已经发生的交易的能力。需要说明的是,即便在这种情况下,攻击者也只能修改自己的交易而不能修改其他用户的交易(攻击者没有其他用户的私钥)。
在PoS 中,攻击者在持有超过51%的Token 量时才能够攻击成功,这相对于PoW 中的51%算力来说,更加困难。
在PBFT 中,恶意节点小于总节点的1/3 时系统是安全的。总的来说,任何共识机制都有其成立的条件,作为攻击者,还需要考虑的是,一旦攻击成功,将会造成该系统的价值归零,这时攻击者除了破坏之外,并没有得到其他有价值的回报。
对于区块链项目的设计者而言,应该了解清楚各个共识机制的优劣,从而选择出合适的共识机制或者根据场景需要,设计新的共识机制。
智能合约的安全性
智能合约具备运行成本低、人为干预风险小等优势,但如果智能合约的设计存在问题,将有可能带来较大的损失。2016 年6 月,以太坊最大众筹项目The DAO 被攻击,黑客获得超过350 万个以太币,后来导致以太坊分叉为ETH 和ETC。
对此提出的措施有两个方面:
一是对智能合约进行安全审计,
二是遵循智能合约安全开发原则。
智能合约的安全开发原则有:对可能的错误有所准备,确保代码能够正确的处理出现的bug 和漏洞;谨慎发布智能合约,做好功能测试与安全测试,充分考虑边界;保持智能合约的简洁;关注区块链威胁情报,并及时检查更新;清楚区块链的特性,如谨慎调用外部合约等。
数字钱包的安全性
数字钱包主要存在三方面的安全隐患:第一,设计缺陷。2014 年底,某签报因一个严重的随机数问题(R 值重复)造成用户丢失数百枚数字资产。第二,数字钱包中包含恶意代码。第三,电脑、手机丢失或损坏导致的丢失资产。
应对措施主要有四个方面:
一是确保私钥的随机性;
二是在软件安装前进行散列值校验,确保数字钱包软件没有被篡改过;
三是使用冷钱包;
四是对私钥进行备份。
⑧ PF_RING和DPDK接收报文如何添加时间戳
在DPDK里面在各种网卡驱动程序里面找到了一些关于添加时间戳的函数,不同的拿困搏网卡驱动程序都调用了rte_timecounter_update函数和rte_ns_to_timespec函数,这个两个函数定义在dpdk-16.07/lib/librte_eal/common/include/rte_time.h中,大尺乱概的意思是要读取硬件的时钟减去上一次存在结构体里消祥面的时钟得到的差去计算时间吧
读取当前硬件的时钟是用了一个xxx_read_systime_cyclecounter函数(xxx是不同驱动的名字,各自定义在自己的驱动文件中)
这个截图是 drivers/net/ixgbe/ixgbe_ethdev.c <<ixgbe_timesync_read_rx_timestamp>>
do_gettimeofday(&skb->stamp) 原形在/include/linux/time.h 中
net_timestamp 函数在/linux-2.6.32.5/net/core/dev.c
ktime_to_timeval 函数在 /linux-2.6.32.5/include/linux/ktime.h
ktime_to_ns 函数在 /linux-2.6.32.5/include/linux/ktime.h
ktime_to_ns(skb_hwtstamps(skb)->hwtstamp) 函数里面的 skb_hwtstamps 在 /linux/skbuff.h
⑨ ethtool原理介绍和解决网卡丢包排查思路
之前记录过处理因为LVS网卡流量负载过高导致软中断发生丢包的问题, RPS和RFS网卡多队列性能调优实践 ,对一般人来说压力不大的情况下其实碰见的概率并不高。这次想分享的话题是比较常见服务器网卡丢包现象排查思路,如果你是想了解点对点的丢包解决思路涉及面可能就比较广,不妨先参考之前的文章 如何使用MTR诊断网络问题 ,对于Linux常用的网卡丢包分析工具自然是ethtool。
2020年06月22日 - 初稿
阅读原文 - https://wsgzao.github.io/post/ethtool/
ethtool - utility for controlling network drivers and hardware
ethtool is the standard Linux utility for controlling network drivers and hardware, particularly for wired Ethernet devices. It can be used to:
Most features are dependent on support in the specific driver. See the manual page for full information.
ethtool 用于查看和修改网络设备(尤其是有线以太网设备)的驱动参数和硬件设置。你可以根据需要更改以太网卡的参数,包括自动协商、速度、双工和局域网唤醒等参数。通过对以太网卡的配置,你的计算机可以通过网络有效地进行通信。该工具提供了许多关于接驳到你的 Linux 系统的以太网设备的信息。
接收数据包是一个复杂的过程,涉及很多底层的技术细节,但大致需要以下几个步骤:
NIC 在接收到数据包之后,首先需要将数据同步到内核中,这中间的桥梁是 rx ring buffer 。它是由 NIC 和驱动程序共享的一片区域,事实上, rx ring buffer 存储的并不是实际的 packet 数据,而是一个描述符,这个描述符指向了它真正的存储地址,具体流程如下:
当驱动处理速度跟不上网卡收包速度时,驱动来不及分配缓冲区,NIC 接收到的数据包无法及时写到 sk_buffer ,就会产生堆积,当 NIC 内部缓冲区写满后,就会丢弃部分数据,引起丢包。这部分丢包为 rx_fifo_errors ,在 /proc/net/dev 中体现为 fifo 字段增长,在 ifconfig 中体现为 overruns 指标增长。
这个时候,数据包已经被转移到了 sk_buffer 中。前文提到,这是驱动程序在内存中分配的一片缓冲区,并且是通过 DMA 写入的,这种方式不依赖 CPU 直接将数据写到了内存中,意味着对内核来说,其实并不知道已经有新数据到了内存中。那么如何让内核知道有新数据进来了呢?答案就是中断,通过中断告诉内核有新数据进来了,并需要进行后续处理。
提到中断,就涉及到硬中断和软中断,首先需要简单了解一下它们的区别:
当 NIC 把数据包通过 DMA 复制到内核缓冲区 sk_buffer 后,NIC 立即发起一个硬件中断。CPU 接收后,首先进入上半部分,网卡中断对应的中断处理程序是网卡驱动程序的一部分,之后由它发起软中断,进入下半部分,开始消费 sk_buffer 中的数据,交给内核协议栈处理。
通过中断,能够快速及时地响应网卡数据请求,但如果数据量大,那么会产生大量中断请求,CPU 大部分时间都忙于处理中断,效率很低。为了解决这个问题,现在的内核及驱动都采用一种叫 NAPI(new API)的方式进行数据处理,其原理可以简单理解为 中断 + 轮询,在数据量大时,一次中断后通过轮询接收一定数量包再返回,避免产生多次中断。
(1) RX errors
表示总的收包的错误数量,这包括 too-long-frames 错误,Ring Buffer 溢出错误,crc 校验错误,帧同步错误,fifo overruns 以及 missed pkg 等等。
(2) RX dropped
表示数据包已经进入了 Ring Buffer,但是由于内存不够等系统原因,导致在拷贝到内存的过程中被丢弃。
(3) RX overruns
表示了 fifo 的 overruns,这是由于 Ring Buffer(aka Driver Queue) 传输的 IO 大于 kernel 能够处理的 IO 导致的,而 Ring Buffer 则是指在发起 IRQ 请求之前的那块 buffer。很明显,overruns 的增大意味着数据包没到 Ring Buffer 就被网卡物理层给丢弃了,而 CPU 无法即使的处理中断是造成 Ring Buffer 满的原因之一,上面那台有问题的机器就是因为 interruprs 分布的不均匀(都压在 core0),没有做 affinity 而造成的丢包。
(4) RX frame
表示 misaligned 的 frames。
网线上的packet首先被网卡获取,网卡会检查packet的CRC校验,保证完整性,然后将packet头去掉,得到frame。网卡会检查MAC包内的目的MAC地址,如果和本网卡的MAC地址不一样则丢弃(混杂模式除外)。
网卡将frame拷贝到网卡内部的FIFO缓冲区,触发硬件中断。(如有ring buffer的网卡,好像frame可以先存在ring buffer里再触发软件中断(下篇文章将详细解释Linux中frame的走向),ring buffer是网卡和驱动程序共享,是设备里的内存,但是对操作系统是可见的,因为看到linux内核源码里网卡驱动程序是使用kcalloc来分配的空间,所以ring buffer一般都有上限,另外这个ring buffer size,表示的应该是能存储的frame的个数,而不是字节大小。另外有些系统的 ethtool 命令 并不能改变ring parameters来设置ring buffer的大小,暂时不知道为什么,可能是驱动不支持。)
网卡驱动程序通过硬中断处理函数,构建sk_buff,把frame从网卡FIFO拷贝到内存skb中,接下来交给内核处理。(支持napi的网卡应该是直接放在ring buffer,不触发硬中断,直接使用软中断,拷贝ring buffer里的数据,直接输送给上层处理,每个网卡在一次软中断处理过程能处理weight个frame)
过程中,网卡芯片对frame进行了MAC过滤,以减小系统负荷。(除了混杂模式)
网卡驱动程序将IP包添加14字节的MAC头,构成frame(暂无CRC)。Frame(暂无CRC)中含有发送端和接收端的MAC地址,由于是驱动程序创建MAC头,所以可以随便输入地址,也可以进行主机伪装。
驱动程序将frame(暂无CRC)拷贝到网卡芯片内部的缓冲区,由网卡处理。
网卡芯片将未完全完成的frame(缺CRC)再次封装为可以发送的packet,也就是添加头部同步信息和CRC校验,然后丢到网线上,就完成一个IP报的发送了,所有接到网线上的网卡都可以看到该packet。
产生中断的每个设备都有一个相应的中断处理程序,是设备驱动程序的一部分。每个网卡都有一个中断处理程序,用于通知网卡该中断已经被接收了,以及把网卡缓冲区的数据包拷贝到内存中。
当网卡接收来自网络的数据包时,需要通知内核数据包到了。网卡立即发出中断。内核通过执行网卡已注册的中断处理函数来做出应答。中断处理程序开始执行,通知硬件,拷贝最新的网络数据包到内存,然后读取网卡更多的数据包。
这些都是重要、紧迫而又与硬件相关的工作。内核通常需要快速的拷贝网络数据包到系统内存,因为网卡上接收网络数据包的缓存大小固定,而且相比系统内存也要小得多。所以上述拷贝动作一旦被延迟,必然造成网卡FIFO缓存溢出 - 进入的数据包占满了网卡的缓存,后续的包只能被丢弃,这也应该就是ifconfig里的overrun的来源。
当网络数据包被拷贝到系统内存后,中断的任务算是完成了,这时它把控制权交还给被系统中断前运行的程序。
网卡的内核缓冲区,是在PC内存中,由内核控制,而网卡会有FIFO缓冲区,或者ring buffer,这应该将两者区分开。FIFO比较小,里面有数据便会尽量将数据存在内核缓冲中。
网卡中的缓冲区既不属于内核空间,也不属于用户空间。它属于硬件缓冲,允许网卡与操作系统之间有个缓冲;
内核缓冲区在内核空间,在内存中,用于内核程序,做为读自或写往硬件的数据缓冲区;
用户缓冲区在用户空间,在内存中,用于用户程序,做为读自或写往硬件的数据缓冲区;
另外,为了加快数据的交互,可以将内核缓冲区映射到用户空间,这样,内核程序和用户程序就可以同时访问这一区间了。
对于有ring buffer的网卡,ring buffer是由驱动与网卡共享的,所以内核可以直接访问ring buffer,一般拷贝frames的副本到自己的内核空间进行处理(deliver到上层协议,之后的一个个skb就是按skb的指针传递方式传递,直到用户获得数据,所以,对于ring buffer网卡,大量拷贝发生在frame从ring buffer传递到内核控制的计算机内存里)。
网卡工作在数据链路层,数据量链路层,会做一些校验,封装成帧。我们可以查看校验是否出错,确定传输是否存在问题。然后从软件层面,是否因为缓冲区太小丢包。
一台机器经常收到丢包的报警,先看看最底层的有没有问题:
(1) 查看工作模式是否正常
(2) 查看检验是否正常
Speed,Duplex,CRC 之类的都没问题,基本可以排除物理层面的干扰。
Why rx_crc_errors incrementing in the receive counter of ethtool -S output?
Check ethtool -S output and find where are the drops and errors.
Check the numbers corresponding to rx_crc_errors .
显示了p1p1 的接口类型,连接模式,速率等等信息,以及当前是否连接了网线(如果是网线Supported ports 就是TP,如果是光纤则显示Fiber),这里例举下3个重要关键词
Supported ports: [ FIBRE ]
Speed: 10000Mb/s
Link detected: yes
ethtool
Counters Troubleshooting for Linux Driver
Why do I see rx_crc_errors in ethtool output?
ping请求错误分析
ifconfig 命令详解
ethtool 命令详解
ethtool 解决网卡丢包严重和网卡原理
⑩ 区块链入门必备108知识点
作者:空林
61.套牢
预期币价上涨,不料买入后币价却下跌;或预期币价下跌,不料卖出后,币价却上涨
62.解套
买入比特币后币价下跌造成暂时的账面损失,但之后币价回升,扭亏为盈
63.踏空
因看淡后市卖出比特币后,币价却一路上涨,未能及时买入,因此未能赚得利润
64.超买
币价持续上升到一定高度,买方力量基本用尽,币价即将下跌
65.超卖
币价持续下跌到一定低点,卖方力量基本用尽,币价即将回升
66.诱多
币价盘整已久,下跌可能性较大,空头大多已卖出比特币,突然空方将币价拉高,诱使多方以为币价将会上涨,纷纷买入,结果空方打压币价,使多方套牢
67.诱空
多头买入比特币后,故意打压币价,使空头以为币价将会下跌,纷纷抛出,结果误入多头的陷阱
68.什么是NFT
NFT全称“Non-Fungible Tokens” 即非同质化代币,简单来说,即区块链上一种无法分割的版权证明,主要作用数字资产确权,转移,与数字货币区别在于,它独一无二,不可分割,本质上,是一种独特的数字资产。
69.什么是元宇宙
元宇宙是一个虚拟时空间的集合, 由一系列的增强现实(AR), 虚拟现实(VR) 和互联网(Internet)所组成,其中数字货币承载着这个世界中价值转移的功能。
70.什么是DeFi
DeFi,全称为Decentralized Finance,即“去中心化金融”或者“分布式金融”。“去中心化金融”,与传统中心化金融相对,指建立在开放的去中心化网络中的各类金融领域的应用,目标是建立一个多层面的金融系统,以区块链技术和密码货币为基础,重新创造并完善已有的金融体系
71.谁是中本聪?
72.比特币和Q币不一样
比特币是一种去中心化的数字资产,没有发行主体。Q币是由腾讯公司发行的电子货币,类似于电子积分,其实不是货币。Q币需要有中心化的发行机构,Q币因为腾讯公司的信用背书,才能被认可和使用。使用范围也局限在腾讯的 游戏 和服务中,Q币的价值完全基于人们对腾讯公司的信任。
比特币不通过中心化机构发行,但却能够得到全球的广泛认可,是因为比特币可以自证其信,比特币的发行和流通由全网矿工共同记账,不需要中心机构也能确保任何人都无法窜改账本。
73.矿机是什么?
以比特币为例,比特币矿机就是通过运行大量计算争夺记账权从而获得新生比特币奖励的专业设备,一般由挖矿芯片、散热片和风扇组成,只执行单一的计算程序,耗电量较大。挖矿实际是矿工之间比拼算力,拥有较多算力的矿工挖到比特币的概率更大。随着全网算力上涨,用传统的设备(CPU、GPU)挖到比特的难度越来越大,人们开发出专门用来挖矿的芯片。芯片是矿机最核心的零件。芯片运转的过程会产生大量的热,为了散热降温,比特币矿机一般配有散热片和风扇。用户在电脑上下载比特币挖矿软件,用该软件分配好每台矿机的任务,就可以开始挖矿了。每种币的算法不同,所需要的矿机也各不相同。
74.量化交易是什么?
量化交易,有时候也称自动化交易,是指以先进的数学模型替代人为的主观判断,极大地减少了投资者情绪波动的影响,避免在市场极度狂热或悲观的情况下做出非理性的投资决策。量化交易有很多种,包括跨平台搬砖、趋势交易、对冲等。跨平台搬砖是指,当不同目标平台价差达到一定金额,在价高的平台卖出,在价低的平台买入。
75.区块链资产场外交易
场外交易也叫OTC交易。用户需要自己寻找交易对手,不通过撮合成交,成交价格由交易双方协商确定,交易双方可以借助当面协商或者电话通讯等方式充分沟通。
76.时间戳是什么?
区块链通过时间戳保证每个区块依次顺序相连。时间戳使区块链上每一笔数据都具有时间标记。简单来说,时间戳证明了区块链上什么时候发生了什么事情,且任何人无法篡改。
77.区块链分叉是什么?
在中心化系统中升级软件十分简单,在应用商店点击“升级”即可。但是在区块链等去中心化系统中,“升级”并不是那么简单,甚至可能一言不合造成区块链分叉。简单说,分叉是指区块链在进行“升级”时发生了意见分歧,从而导致区块链分叉。因为没有中心化机构,比特币等数字资产每次代码升级都需要获得比特币社区的一致认可,如果比特币社区无法达成一致,区块链很可能形成分叉。
78.软分叉和硬分叉
硬分叉,是指当比特币代码发生改变后,旧节点拒绝接受由新节点创造的区块。不符合原规则的区块将被忽略,矿工会按照原规则,在他们最后验证的区块之后创建新的区块。软分叉是指旧的节点并不会意识到比特币代码发生改变,并继续接受由新节点创造的区块。矿工们可能会在他们完全没有理解,或者验证过的区块上进行工作。软分叉和硬分叉都"向后兼容",这样才能保证新节点可以从头验证区块链。向后兼容是指新软件接受由旧软件所产生的数据或者代码,比如说Windows 10可以运行Windows XP的应用。而软分叉还可以"向前兼容"。
79.区块链项目分类和应用
从目前主流的区块链项目来看,区块链项目主要为四类:第一类:币类;第二类:平台类;第三类:应用类;第四类:资产代币化。
80.对标美元的USDT
USDT是Tether公司推出的对标美元(USD)的代币Tether USD。1USDT=1美元,用户可以随时使用USDT与USD进行1:1兑换。Tether公司执行1:1准备金保证制度,即每个USDT代币,都会有1美元的准备金保障,对USDT价格的恒定形成支撑。某个数字资产单价是多少USDT,也就相当于是它的单价是多少美元(USD)。
81.山寨币和竞争币
山寨币是指以比特币代码为模板,对其底层技术区块链进行了一些修改的区块链资产,其中有技术性创新或改进的又称为竞争币。因为比特币代码开源,导致比特币的抄袭成本很低,甚至只需复制比特币的代码,修改一些参数,便可以生成一条全新的区块链。
82.三大交易所
币安
Okex
火币
83.行情软件
Mytoken
非小号
CMC
84.资讯网站
巴比特
金色 财经
币世界快讯
85.区块链浏览器
BTC
ETH
BCH
LTC
ETC
86.钱包
Imtoken
比特派
87. 去中心化交易所
uniswap
88. NFT交易所
Opensea
Super Rare
89. 梯子
自备,购买靠谱梯子
90. 平台币
平台发行的数字货币,用于抵扣手续费,交易等
91. 牛市、熊市
牛市:上涨行情
熊市:下跌行情
92. 区块链1.0
基于分布式账本的货币交易体系,代表为比特币
93. 区块链2.0
以太坊(智能合约)为代表的合同区块链技术为2.0
94. 区块链3.0
智能化物联网时代,超出金融领域,为各种行业提供去中心化解决方案
95. 智能合约
智能合约,Smart Contract,是一种旨在以信息化方式传播、验证或执行合同的计算机协议,简单说,提前定好电子合约,一旦双方确认,合同自动执行。
96. 什么是通证?
通证经济就是以Token为唯一参考标准的经济体系,也就是说相当于通行证,你拥有Token ,就拥有权益,就拥有发言权。
大数据是生产资料,AI是新的生产力,区块链是新的生产关系。大数据指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。简单理解为,大数据就是长期积累的海量数据,短期无法获取。区块链可以作为大数据的获取方式,但无法取代大数据。大数据只是作为在区块链运行的介质,没有绝对的技术性能,所以两者不能混淆。(生产关系简单理解就是劳动交换和消费关系,核心在于生产力,生产力核心在于生产工具)
ICO,Initial Coin Offering, 首次公开代币发行,就是区块链数字货币行业中的众筹。是2017最为热门的话题和投资趋势,国家9.4出台监管方案。说到ICO,人们会想到IPO,两者有着本质不同。
99. 数字货币五个特征
第一个特征:去中心化
第二个特征:有开源代码
第三个特征:有独立的电子钱包
第四个特征:恒量发行的
第五个特征:可以全球流通
100.什么叫去中心化?
没有发行方,不属于任何机构或国家,由互联网网络专家设计、开发并存放于互联网上,公开发行的币种。
100. 什么叫衡量(稀缺性)?
发行总量一旦设定,永久固定,不能更改,不能随意超发,可接受全球互联网监督。因挖掘和开釆难度虽时间数量变化,时间越长,开采难度越大,所开釆的币就越少,因此具有稀缺性。
101. 什么叫开源代码?
用字母数字组成的存放在互联网上,任何人都可以查出其设计的源代码,所有人都可以参与,可以挖掘,全球公开化。
102. 什么叫匿名交易? 专有钱包私密?
每个人都可以在网上注册下载钱包,无需实名认证,完全由加密数字代码组成,全球即时点对点发送、交易,无需借助银行和任何机构,非本人授权任何人都无法追踪、查询。
合约交易是指买卖双方对约定未来某个时间按指定价格接收一定数量的某种资产的协议进行交易。合约交易的买卖对象是由交易所统一制定的标准化合约,交易所规定了其商品种类,交易时间,数量等标准化信息。合约代表了买卖双方所拥有的权利和义务。
105.数字货币产业链
芯片厂家 矿机厂商 矿机代理 挖矿 出矿到交易所 散户炒币
106.空林是谁?
空林:数字货币价值投资者
投资风格:稳健
107.空林投资策略
长短结合,价投为主,不碰合约,不玩短线
合理布局,科学操作,稳健保守,挣周期钱
108.空林?
欢迎币友,共谋发展