比特币源码阅读(0.16)(十九)

net_processing.cpp::ProcessMessage

一、发送version消息,对端也会发version消息,双方将自己的版本信息告诉对方。
如果对端支持(兼容)相关版本的话,会回复verack消息。verack只是空消息。
二、发送getaddr消息,以向对端询问有哪些活跃的网络节点。对端会将其认为是活跃的节点的信息发送给钱包,通常3小时内有消息收发的节点算作活跃的。
三、发送sendheaders消息,表示自己支持最新的headers命令,后续对端可以通过headers消息宣告新区块。
四、发送两次sendcmpct消息,告知对端自己支持接收哪些后续消息,如cmpctblock或invs或headers。
五、定期发送ping消息,用来检测对端TCP连接是否OK,并期待对端响应pong消息。
六、发送getheaders消息,该消息指示只下载区块的header,不需要下载交易内容。有很多交易与我们无关,所以我们只需要下载自己关心的交易,对于绝大多数不关心的交易所在的区块,只需要下载区块header即可。
七、发送feefilter消息,用于设置费率,避免无效消息的重放攻击。费率单位是每1000字节多少聪,聪是比特币最小单位即一亿分之一比特币。