区块链技术网络协议网络协议就是为网络数据交换而制定的规则、约定与标准。1.2分层模型为了降低网络设计的复杂性,绝大多数网络都组织成一堆相互叠加的层。每一层都建立在下一层的基础之上,且每一层的目的都是向上一层提供特定的服务,但是把如何实现这些服务的细节对上一层加以屏蔽。用户接触到的是网络体系的应用层,属于最上层;网络体系层级越低,越接近硬件。常见的网络体系结构分层模型有两种:OSI模型和TCP/IP模型。OSI模型将网络层分为七层:物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。TCP/IP模型将网络层分为四层:主机至网络层、互联网层、传输层和应用层。OSI模型对于讨论计算机网络非常有用,但是没有流行;TCP/IP模型没有被纳入国际标准,但是协议被广泛地使用。为了更清晰地解释网络体系结构,本文采用如图所示的五层模型。区块链技术每层协议的功能网络体系结构的每一层都是为了实现一种功能。为了实现这些功能,需要大家遵守共同的规则,因此每一层都定义了很多协议。这些协议的总称叫做“互联网协议(InternetProtocolSuite)”。1.3.1物理层物理层就是把电脑连接起来的物理手段。它定义了物理设备的标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。它的主要作用是传输比特流(就是将1、0转化为电流强弱来进行传输,到达目的地后再将电流强弱转化为1、0,也就是数模转换与模数转换),这一层的数据叫做比特。区块链技术数据链路层☛1.3.2.1设计数据链路层的原因在原始的物理线路上传输数据信号是有差错的,数据链路层采取差错检测、差错控制与流量控制等方法,将有差错的物理线路改进成逻辑上无差错的数据链路,向网络层提供高质量的服务。☛1.3.2.2数据链路层的基本功能数据链路层位于物理层上方,它定义了如何让格式化数据以帧(Frame)为单位进行传输,以及如何控制对物理介质的访问。数据链路层还提供了错误检测和纠正措施,以确保数据的可靠传输。在数据链路层,通过以帧为单位进行数据传输、以获取网卡MAC地址作为对物理介质的访问控制、以广播作为数据的发送方式,多台计算机之间可以相互传送数据。区块链技术☛1.3.2.3以太网协议以太网是目前最流行的一种局域网组网技术,它规定了在以太网中传输的数据帧结构。以太网协议将一组电信号构成的一个数据包叫做“帧”,帧分为两个部分:标头(Head)和数据(Data)。标头(Head):数据包的说明项,比如发送者、接受者、数据类型等,固定为18字节;数据(Data):数据包的具体内容,最短为46字节,最长为1500字节。因此,整个帧最短为64字节,最长为1518字节。如果数据很长,就必须分割成多个帧进行发送。☛1.3.2.4MAC地址介质访问控制(MediumAccessControl)简称MAC,它是解决当局域网中共用信道的使用产生竞争时,如何分配信道的使用权问题。区块链技术(MediumAccessControl)地址,也称为物理地址、硬件地址,用来定义网络设备的位置。一个主机有一个MAC地址,MAC地址是网卡决定的,是固定的。以太网规定,连入网络的所有设备,都必须具有“网卡”接口。数据包必须是从一块网卡,传送到另一块网卡。网卡的地址,就是数据包的发送地址和接收地址,也就是MAC地址。每块网卡出厂的时候,都有一个全世界独一无二的MAC地址,长度是48个二进制位,通常用12个十六进制数表示。前6个十六进制数是厂商编号,后6个是该厂商的网卡流水号。有了MAC地址,就可以定位网卡和数据包的路径了。☛1.3.2.5广播区块链技术以太网规定数据包必须从一块网卡传送到另一块网卡,但是一块网卡无法直接获取另一块网卡的MAC地址。在网络层中会介绍一种ARP协议(AddressResolutionProtocol,地址解析协议),如果两台主机位于同一个子网络(由活性节点组成的局部网络),通过对方的IP(InternetProtocol,网络之间互连的协议)可以获得对方的MAC地址。虽然获得了对方的MAC地址,系统并不是把数据包准确地发送给接收方。其中一种实现数据包发送到接收方的方式就是广播,就是以广播的方式向本网络内所有计算机发送,让每台计算机自己判断,是否为接收方。上图中,1号计算机向2号计算机发送一个数据包,同一个子网络的3号、4号、5号计算机都会收到这个包。它们读取这个包的“标头”,找到接收方的MAC地址,然后与自身的MAC地址相比较,如果两者相同,就接受这个包,做进一步处理,否则就丢弃这个包。这种发送方式就叫作“广播(broadcasting)”。区块链技术有了数据包的定义、网卡的MAC地址、广播的发送方式,数据链路层就可以在多台计算机之间传送数据了。1.3.3网络层网络层的目的是两个端系统之间的数据实现透明传送。具体功能包括寻址、路由选择、建立连接、保持连接和终止连接等。这使得位于不同地理位置网络中的两个主机系统之间提供连接和路径选择,世界各站点访问信息的用户数大大增加。☛1.3.3.1网络层的由来当两台主机位于同一个子网络,可以通过广播的方式把数据包发送给本网络内所有的计算机,让每台计算机自己判断是否为接收方。但是当两个主机不在一个子网络,例如一个在北京,一个在纽约,这样发送信息的方式就不合理了。网络层引进了一套地址,用来判断不同的计算机是否属于同一个子网络,这套地址叫作网络地址,也就是网址。属于同一个子网络的采用广播方式发送数据包,否则就采用路由方式发送数据包。因此每台计算机有了两种地址:MAC地址和网络地址。这两种地址之间没有任何联系,MAC地址是绑定在网卡上的,网络地址则是管理员分配的,它们只是随机组合在一起。网络地址帮助我们确定计算机所在的子网络,MAC地址则是将数据包送到该子网络中的目标网卡。因此,必定是先处理网络地址,然后再处理MAC地址。区块链技术☛1.3.3.2IP协议IP协议就是规定网络地址的协议。它所定义的地址,就叫作IP地址。目前的IP版本有IPv4和IPv6两种,最流行的版本是Ipv4。Ipv4有十进制和二进制两种表示方法,用点分为四组,每一组的范围是0~255。如图所示,IP地址的两种表示方法为:十进制表示为:172.16.254.1;二进制表示为:10101100.00010000.11111110.00000001。区块链技术地址。IP地址分为两个部分,前一部分代表网络,后一部分代表主机。但是从一个IP地址无法判断哪一段代表网络,哪一段代表主机。当两台联网的计算机的IP地址的网络部分完全相同,说明两台计算机位于同一个子网络。但是要从两台计算机的IP地址判断两台计算机是否属于同一个子网络,需要用到一个表示子网络特征的参数——“子网掩码(subnetmask)”。子网掩码在形式上等同于IP地址,例如IPv4版本的子网掩码也是一个32位二进制数字,一般子网掩码地址都是255.255.255.0。根据子网掩码可以判断任意两个IP地址是否处于同一个子网络。先将两个IP地址分别和子网掩码(255.255.255.0)换算为二进制形式;然后将两个IP地址分别与子网掩码进行按位与运算;最后比较结果是否相同,相同表明两个IP地址在同一个子网络,否则不在一个子网络。区块链技术,它们分别与子网掩码255.255.255.0按位与的运算结果都是172.16.254.0,这说明这两个IP地址在同一个子网络。总得来说,IP协议一个作用是为每一台计算机分配IP地址,另一个作用是确定哪些IP地址位于同一个子网络。☛1.3.3.3IP数据包根据IP协议发送的数据叫作IP数据包,其中数据包包括IP地址信息。在数据链路层中,以太网协议将一组电信号构成的一个数据包叫做“帧”,帧包含MAC地址,但没有IP地址。在网络层,不需要修改以太网的规格,直接将IP数据包放进以太网数据包的Data部分。IP数据包分为“标头”和“数据”两个部分。标头Head包括版本、长度、IP地址等信息,数据Data则是IP数据包的具体内容。区块链技术☛1.3.3.4ARP协议因为IP数据包是放在以太网数据包里发送的,所以在发送数据包时必须同时知道接收方的MAC地址和IP地址。一般接收方的IP地址已知,但是MAC地址无法直接获取。在数据链路层中提到过,一块网卡无法直接获取另一块网卡的MAC地址,如果两台主机位于同一个子网络,需要根据ARP协议(AddressResolutionProtocol,地址解析协议),通过对方的IP获得对方的MAC地址。ARP协议就是向子网络的每一台主机发送数据包,从中取出IP地址,并与自身的IP地址进行比较。如果两者相同,都做出回复,向对方报告自己的MAC地址,否则就丢弃这个包。如果两台主机不在同一个子网络,要在网络层上实现网络互连,就需要网络互联设备——网关(Gateway)。它又称网间连接器、协议转换器,其本质上是一个网络通向其他网络的IP地址。假如两台主机分别在不同的子网络A和B,网络A区块链技术中的某一主机,需要经过以下步骤:首先网络A中的主机将数据包传送到网络A所在的网关;然后网络A所在的网关将数据包转发给网络B所在的网关,最后网络B所在的网关将数据包转发给网络B的那台主机。总的来说,有了ARP协议和网关,一台主机可以把数据包发送到任意一台主机。1.3.4传输层☛1.3.4.1传输层的由来有了MAC地址和IP地址就可以在互联网上的任意两台主机上建立通信。但是从互联网上发送过来的数据包到底供给哪个程序(进程)使用,需要用到传输层。传输层(TransportLayer)是最重要,最关键的一层,唯一负责总体的数据传输和数据控制,实现了端到端的数据传输。传输层在终端用户之间提供透明的数据传输,向上层提供可靠的数据传输服务。传输层在给定的链路上通过流量控、分段/重组和差错控制,保持对分段的跟踪,并且重传那些失败的分段。在传输层中,端口(port)表示一个数据包到底供哪个程序(进程)使用,它是每一个使用网卡的程序编号,每个数据包都发到主机的特定端口,所以不同的程序就能取到自己所需要的数据。区块链技术网络层建立了主机到主机的通信,而传输层建立了端口到端口的通信。只要确定主机和端口,就能实现程序之间的交流。因此,Unix系统把主机+端口,叫作“套接字(socket)”。有了它,就可以进行网络应用程序开发。☛1.3.4.2UDP协议UDP(UserDatagramProtocol,用户数据报协议)是一个非连接的协议,传输数据之前源端和终端不建立连接,当它想传送时就简单地抓取来自应用程序的数据,并尽可能快地把它扔到网络上。在发送端,UDP传送数据的速度仅仅是受应用程序生成数据的速度、计算机的能力和传输带宽的限制;在接收端,UDP把每个消息段放在队列中,应用程序每次从队列中读一个消息段。由于传输数据不建立连接,因此也就不需要维护连接状态,包括收发状态等,因此一台服务机可同时向多个客户机传输相同的消息。UDP使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的链接状态表。UDP协议数据包由“标头”和“数据”两部分组成。“标头”定义了发出端口和接收端口,“数据”就是具体的内容。区块链技术数据包中“数据”的一部分,而IP数据包又是以太网数据包中的一部分,所以整个以太