编者按:区块链涉及到的技术很多,从互联网底层到不明觉厉的密码学,可是往往关注币价者多而研究技术的人少。牛市的时候,大家为了炒币也会努力学习,熊市的时候,反正也没啥事,我觉得可以更加努力学习。作为一个文科生,我当然会有很多理科生看起来觉得很白痴的问题。作为一个记者,我不难找到业内懂的人用人话给我解释,而且他们往往不会当面嫌弃我。这是小明学习笔记第三期,学习的是TCP/IP协议,第一期学习的是虚拟机,第二期是跨链,之后想学习的有VRF、开源历史和文化、网络体系结构与区块链分层体系对比、“假如把币圈看成一个国家这个国家的货币在经历什么”。如果有其他有趣问题,欢迎投稿和提问。
在接触区块链的时候,你可能会发现经常有人会说到协议,偶尔还会有人说到TCP/IP协议。乍听之下不明觉厉,但转念一想这似乎真的已经是最普遍而且我们每天都在用的“协议”了。还会有人拿区块链跟互联网相比,而互联网的底层是TCP/IP协议;还听到过徐明星说过区块链是将会是金融的TCP/IP协议;加上以太坊的架构中网络层的资料也非常少。所以我想了解一下。这次的学习笔记主要是依靠网上公开资料的整理,很多段落可能是copy自不同的解释文章,真的是所谓的“笔记”了。
图片来自CSDN博客什么是TCP/IP协议
首先,协议,可以理解为是一套统一的规则,就像行业标准。由于互联网主要的功能是传输信息,所以其协议一般是管理系统之间如何相互通信的规则。用邮政和物流等线下的“运输协议”来理解,我们以前写信的时候都需要写邮编、寄信人、收信人和地址,在途中邮政也有自身的标准,比如不同地区的邮递员收集特定地区的邮件,然后汇集分发;物流行业也有集装箱、铁轨等。在互联网通信中,“如何探测到通信目标、由哪一边先发起通信、使用哪种语言进行通信、怎样结束通信等规则都需要事先确定。不同的硬件、操作系统之间的通信,所有的这一切都需要一种规则。”TCP/IP协议的全称是TransmissionControlProtocolandInternetProtocol。TCP和IP分别是两种协议;同时TCP/IP协议可以指互联网传输过程中用到的一组协议族和互联网模型,因为TCP和IP在其中比较重要,所以以它们来命名。由于通信中涉及到的步骤和用到的软硬件很多,因此会被划分成不同的层次。TCP/IP模型有四个抽象的层次,描述了总体的设计大纲,并实现了网络通信的具体协议。这个模型中不同的协议有着不同的“分工”,掌握所需要的信息,并且根据特定信息完成它的工作,其实跟现实生活中工作流程差不多。再用上面邮政和寄快递的例子,由于存在分工,你问收件的快递员你的快递单到哪是他肯定是不知道的,他只负责把你的快件送到快递集散点。对于用户而言,可以把TCP/IP协议理解成快递公司,用户只需要寄件和签收,怎么把快件从A运到B手上,就是快递公司的事了。再次借用知乎哦吼的话:“TCP/IP也是网络通信里的物流公司,应用程序只要把需要传输的数据提交给TCP/IP,TCP/IP就可以把数据打包发到目的地,至于里面的传输细节应用程序也可以不关心,这样应用程序就可以从最底层的传输细节里解放出来,把更多的注意力放在应用程序数据本身的处理。”接下来我们可以开始来了解一下这家快递公司内部的各个重要角色。TCP/IP各层协议的职能
这家公司大概可以分成四个部门,也就是TCP/IP协议族按层次分别分为应用层、传输层、网络层和网络接口层。
先来个英文版
再来个萌萌哒中文版上面这幅图其实很形象地表现了整个数据传输的过程,我们在微信上发一句话看似很简单,其实每一步都经过了从上层到底层,再从底层到上层应用的过程。比如小熊在微信上给小明发了一句消息,直到小明收到这个消息,其实就经过了上述过程。微信所在的是应用层,它按照特定格式把数据打包好,加上收寄件人和双方地址、自己的“记号”等等,给到传输层;传输层的TCP协议会把文件切成更小的碎片,确保数据包都被安全传输;网络层的IP协议会找到最佳路径;这个消息会通过光纤、WiFi等网络发过去。到达目的地之后,被打散的数据会经过重组,传输层也会从记号知道这是给微信的。上面这个过程其实已经聊到TCP协议和IP协议的主要作用,这两个分别是传输层和网络互连层最主要的协议,因此这个模型以它们来命名。具体过程中会有很多其他协议,传不同的数据时,应用层会有不同的协议处理。感兴趣的宝宝可以继续跟我一起了解细节。每一层都有自身的职能和常见的协议,整理CSDN上极光推送的博客、MarchOn博主,知乎网友哦吼、Drake、小明的文章,还有《图解HTTP》一书,总结如下。
图片来自CSDN互联网中信息以数据包的单位传输,不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报(datagram),在链路层叫做帧(frame)。
图文来自《图解HTTP》发送端在层与层之间传输数据时,每经过一层时必定会被打上一个该层所属的首部信息,这种把数据信息包装起来的做法称为封装。数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,最后将应用层数据交给应用程序处理。我会从最底层开始讲起。网络接口层
常见协议:Ethernet802.3、TokenRing802.5、X.25、Framerelay、HDLC、PPPATM等。又叫网络访问层,负责从上层接收IP数据包并通过网络发送,或者从网络上接收物理帧,抽出IP数据包,交给IP层。这层包括主机连接到物理网络所需要的硬件以及传送数据的协议。比如路由、NIC,及光纤等物理可见部分;这层的协议取决于所使用的物理网络。如果物理网络是LAN,那么通常使用的是以太网协议以及它的变体,如果使用的是WAN,常用的则是点对点协议以及帧中继等协议。其中比较出名的是以太网协议。“两台电脑之间是通过网卡来进行发送和接收数据的。每个网卡都有一个独特的地址,也就是MAC地址。以太网数据以帧为单位,包括标头和数据部分。以太网在子网内以广播的形式发送数据。光有MAC地址并不能让两台主机之间相互通信,如果两台主机不在同一个子网,以太网协议就没辙了。这就要通过网络层来区分每台主机所在的网络是哪个子网。如果在同一个子网,就用广播发送数据,否则就用路由发送。这就导致了网络层的诞生。”网络访问层
常见协议:IP(InternetProtocol)、ICMP、ARP(AddressResolutionProtocol)、RARP(ReverseARP)。IP是网络层的核心,通过路由选择将下一条IP封装后交给接口层。ICMP是网络层的补充,可以回送报文。用来检测网络是否通畅。网络层的主要任务简而言之就是“给每个数据包确定路线”。这个主机可能在同一个网络或者外部网络,因此需要先区分主机是不是在同一个子网。这层就是IP协议所在的地方。就像我们写信的时候需要有一个地址,在网络世界中也需要一个地址,这个网络地址就是IP地址。IP地址是门牌号,而IP协议负责计算并找到指定门牌,快递小哥每天出门前要做的事就是IP协议的天职:分拣包裹、规划路径。其实,三五个节点的小型网络内部通信完全不必使用IP协议,因为这些节点之间本来就能两两互通,但会有个问题:节点数变多后,网速就会瘫痪,因为带宽耗尽。因此,后来一片网络拆分成很多子网络,每片子网络交给一台路由器统管。子网络中的节点间可以单独通信,不需要IP协议,但由于带宽限制,如果你想和本网络外的节点沟通时,就得使用一个设备:路由器。世界上大多数的路由器被几家大运营商掌管。
如上图,节点1和2同属一个子网,可基于内部通信协议沟通,而1和5间的联络必须基于IP协议,通过路由器1和2之间的路径交流。把IP协议的逻辑推广到整个互联网,最终,连接我们手机客户端和腾讯服务器的是无数个路由器。
把大网络切小的好处显而易见:节约带宽、抬高网速,同时一只路由器挂了不影响其他节点间的通信,这就是IP协议的作用。这层还有一些“协助”IP协议工作的协议,比如ARP和RARP。要保证数据确实传送到对方主机,除了IP地址之外还需要MAC地址。Mac地址又称物理地址,跟网卡一一对应,对于一台主机来说是唯一且不可变的。IP地址则是会根据你所在网络的不同改变的。上述两个协议的作用简单而言就是:用IP地址找Mac地址;以及用Mac地址找IP地址。具体的作用请看下面两段:“ARP基本功能就是通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。以太网中的数据帧从一个主机到达网内的另一台主机是根据48位的以太网地址来确定接口的,而不是根据32位的IP地址。内核必须知道目的端的硬件地址才能发送数据。P2P的连接是不需要ARP的。RARP允许局域网的物理机器从网关服务器的ARP表或者缓存上请求其IP地址。局域网网关路由器中存有一个表以映射MAC和与其对应的IP地址。当设置一台新的机器时,其RARP客户机程序需要向路由器上的RARP服务器请求相应的IP地址。假设在路由表中已经设置了一个记录,RARP服务器将会返回IP地址给机器。”看完之后你可能跟我有一样的疑惑,既然都是靠物理地址找主机,为啥还需要IP地址?51CTO和CSDN这两篇文章可以解答这个问题:MAC地址结构是酱紫的:一共有48bit,分为两部分,前24bit是厂商代码,后24bit是厂家自己分配的。假如我们认为MAC地址可以区分不同的网络的话,那只能是使用厂商代码来区分不同的网络,显然同品牌网卡不代表在同一个网络。最早这个世界上的电脑没这么多的时候,是没有路由这个东西存在的,主机都在一张网里,所以确实是直接通过mac地址通信的。最初的链路层协议是和ip地址无关的,没有网络层方面的设定,只有物理层和链路层,最初也只有集线器,没有交换机路由器,服务器之间传输数据全靠mac地址。在没有ip地址之前,mac地址已经在使用了。现在到处都在用的二层交换机,就是根据mac地址转发数据。mac地址的设计不携带设备在网络中的位置信息,想要通过mac地址通信,我们得在所有的设备上维护一张很大的表,记录所有mac地址路由在当前位置的的下一跳,这显然是不合理的。再次用《图解HTTP》里面萌萌哒图解释一下这个过程:
MAC地址就像电脑的个人身份证,IP地址就像电脑所在的屋子,屋子里可以住着很多人,局域网关路由就像登记人口的街道办公室。传输层
有了IP协议,就可以在两个主机之间发送数据了,接下来的问题在于每台主机都有不同的应用,如何区分哪个数据包属于哪个程序?这就是传输层的作用。传输层的主要任务是确保分割的单元在另一端正确地到达,它建立端口到端口的连接。网络层建立主机到主机的连接,只要有主机和端口,就能确定数据包属于哪个程序的。同时它也负责接收应用层的数据,然后把它们分成更小的单元,传输到网络层。这里提到的端口不是硬件端口,而是软件端口,端口有点向外界信息进入电脑的门,不同的信息通过这些门传给不同应用程序。更形象的解释可以参考《为什么要有端口,怎么来规划端口,看下边。》:“ip能锁定一台物理机器,对应着一张网卡,外界发来的数据包网卡都会接收。但是问题来了,网卡给程序提供了接口,你监听一下我,要是有消息来了,我就转发给你。这样应用程序就能收到数据了。但是问题来了,程序A和程序B都需要监听网卡接发数据,网卡说那我把接到的数据都发给你两,你们自己看着办吧。好,小A小B都接受了。但是又来了CDEF......,不行了,每个包都被发到了所有应用程序,每个应用程序都累得不行,最终垮了。好,那网卡说我给你们加个表示吧,我们之间可以用一个号码来作为标识,我和小A之间就用1来标识,如果外界发给1号标识的数据我就转发给你,你监听我的时候得告诉我你监听的时1,我就转发1的数据包给你。好了其他的BCD...都自己弄一个标识号,只要不重复就行。这样大家都省事了。最后设计到安全,一个标识号只能被一个应用程序监听,因为如果小A程序和小B同时监听一个标识号号,那就坏了,我传的数据都被AB接到,这样数据安全性就没办法保证了。”这一层主要有两个协议:TCP和UDP。TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议。UDP是一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。这两句话虽然看起来也是让人懵逼,但大概能让人get到一个可靠一个没那么可靠。没错这就是两者的区别。TCP协议提到的所谓字节流服务是指,为了方便传输,将大块数据分割成以报文段为单位的数据包进行管理。而可靠的传输服务是指,能够把数据准确可靠地传给对方。简单来说就是,它把数据切成一个个数据包,从第一只数据包开始传,传送成功就翻倍,发现失败就地爬起来,从绊倒的那只数据包重新开始,周而复始。:
图片来自《图解HTTP》为了准确无误地将数据送达目标处,在收发数据前,必须和对方建立可靠的连接。TCP协议采用了三次握手策略。握手过程中使用了TCP的标志——SYN和ACK:第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。注意:握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。除了上述三次握手,TCP协议还有其他各种手段来保证通信的可靠性。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP连接都将被一直保持下去。断开连接时服务器和客户端均可以主动发起断开TCP连接的请求,断开过程需要经过“四次握手”。至于UDP协议,传送数据前并不与对方建立连接,对接收到的数据也不发送确认信号,发送端不知道数据是否会正确接收,当然也不用重发,所以说UDP是无连接的、不可靠的一种数据传输协议。具体据知乎用户陈宝佳的帖子,UDP传输的信息包最小只有8个字节,TCP则是20个字节。这样的好处是,UDP对系统资源要求更低,开销更小,数据传输速率更高,因为不必进行收发数据的确认,所以UDP的实时性更好。他还表示MSN采用TCP传输协议传文件,QQ传输文件采用UDP,所以后者更快。
我在学校的时候,有师兄教过我用“ping”命令来测试两台主机之间TCP/IP通信是否正常。依然是据上面那个知乎大神解释,“其实ping命令的原理就是向对方主机发送UDP数据包,然后对方主机确认收到数据包,如果数据包是否到达的消息及时反馈回来,那么网络就是通的。ping命令是使用IP和网络控制信息协议(ICMP),因而没有涉及到任何传输协议(UDP/TCP)和应用程序。它发送icmp回送请求消息给目的主机。ICMP协议规定:目的主机必须返回ICMP回送应答消息给源主机。如果源主机在一定时间内收到应答,则认为主机可达。”
应用层
应用层是互联网程序与其他程序通信所使用的层,也是离用户“最近”的一层。比如说访问网页,肯定要用到HTTP,前面肯定会有"HTTP://",这就是HTTP协议。1982年春,美国国防部宣布TCP/IP作为军用网络的通信标准。1989年,TimothyBerners-Lee研发出了超文本传输协议HTTP,之后,互联网上可以传输的不仅只有文字,还有包括图片等各种多媒体的网页。我们通常访问一个网页的的时候更习惯打域名,比如http://www.badidu.com,而不会直接打IP,因为这样更好记,可是电脑就不是这么想的,所以就需要DNS。DNS用于通过域名查找IP地址,或逆向从IP地址反查域名的服务。如果要发邮件,就要用到SMTP;还有FTP,用于Internet上的控制文件的双向传输,同时也是一个应用程序;还有Telnet,Internet远程登陆服务的标准协议和主要方式,能用户可以在一台电脑上远程控制另一台电脑。
这一层的主要任务是将接收到的数据包按照协议解读成各种类型的数据,并将要发送的数据打包进传输层。主要协议有:HTTP、FTP、SMTP、Telnet、NFS、RIP等等。我是Odaily星球日报编辑卢晓明,探索真实区块链,爆料、交流请加微信lohiuming,烦请备注姓名、单位、职务和事由。
相关阅读:TCP/IP协议是什么?现在有哪些问题?为什么说区块链是TCP/IP解决方案?一分钟了解TCP/IP模型TCP/IP模型及OSI七层参考模型各层的功能和主要协议TCP/IP协议是什么?我们10分钟搞定小白如何理解TCP/IP网络协议族计算机网络结构模型TCP/IP详解TCP/IP协议到底在讲什么?TCP和UDP的区别OSI参考模型如何理解TCP端口BlockChain-以太坊架构以太坊入门分享从概念到底层技术,一文看懂区块链架构设计
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。