并不是很多互联网协议都是基于文本的。实际上,如果我猜到了,我会说基于文本的协议是少数。对于在互联网上看到的几乎所有基于文本的协议,人们至少发明了两种二进制协议来发送相同或相似的数据。
但是,确实,大多数互联网流量使用基于文本的协议。如果您假设二进制协议比文本多得多,但文本流量比二进制多得多,那么这个事实就很有趣。这意味着互联网上大多数成功的协议都是基于文本的。除了少数应用程序(bittorrent是一个例子)之外,二进制协议趋向于消失。
在Internet的早期,公司倾向于设计和使用二进制协议(例如,MSN,而不是今天的MSN网站,最初的专有MicroSoft Network应该替代HTTP),而军事,研究机构和学者则倾向于设计和使用基于文本的协议。部分原因是建立和调试二进制协议很困难,并且公司可以负担得起人们付钱去做,而军人,研究人员和学者却在闲暇时无偿付钱(大多数开发互联网的人都有与发展互联网无关的工作)。
当您在业余时间以业余爱好编写代码并且不因做自己的事情而获得报酬时,您倾向于选择较简单的解决方案-文本。因此,基于文本的协议比二进制协议被更多的人使用。
但这还不是全部。建立网络非常困难。真的很难。今天,我们已经习惯了互联网,因此还没有完全意识到这是工程学的奇迹。互联网的几乎每个方面都是从错误修复演变而来的。例如,我们使用IP地址而不是MAC地址,因为它允许我们构建只有几千字节(或这些天的兆字节)的路由器,而不是用于路由表的TB的RAM。我们尝试解决的问题越来越多,我们越倾向于使用基于文本的协议来调试它们。一旦我们有足够的开发低级网络协议的经验,当开发应用程序协议时,大多数有经验的程序员和工程师就会倾向于使用文本协议。
从个人经验来看,我曾在一家制造路由器的公司工作过,也曾在一家建筑遥测设备的公司工作过,所以我在使用二进制协议(例如TCP / IP,ARP,IEC60870-5-)方面有很多经验。 101和DNP3。我还使用过HTTP,POP3和NMEA等文本协议。我还使用了二进制数据格式(例如ASN.1)和文本数据格式(例如JSON和XML)。如果要选择,我几乎每次都会选择文本。我唯一选择二进制的是协议是否真的是低级的(那么我将实现足够的水平,以便可以在顶部或顶部对基于文本的协议进行定位),或者数据自然是二进制的(例如音频文件) 。