2.2.2 域间路由与域内路由
在过去十年中,互联网几乎没有发生变化的一个部分就是路由系统。十年前,人们预测边界网关协议(Border Gateway Protocol,BGP)很快就会发生严重的可扩展性问题,但是事实上,BGP仍然一直坚持着为互联网的域间路由服务。在这十年里,IPv4核心路由表增长为原来的三倍,由2008年的约25万条增长到2019年的约75万条[8]。IPv6的路由表数量增长更为惊人,从十年前的1100条增长到如今的5万多条。然而,BGP作为全球互联网唯一的边界网关协议仍然有效、高效地工作至今。谁都没有想到当初为数百网络的几千条路由设计的协议能够有效支持数十万网络的近百万条前缀。即使如此,由于BGP采用的路由技术与十年前并没有差别,BGP仍然面临着一系列问题,时常发生的管理员误配置和恶意前缀劫持导致的问题仍然危害着互联网。研究人员一直在致力于解决BGP面临的可扩展性、稳定性、收敛性和安全性问题,例如BGPsec[9]通过资源公钥基础设施(Resource Public Key Infrastructure,RPKI)来确保BGP路径的真实性,过滤虚假路由,防止路由劫持。BGPsec从2011年起经历了多年的探讨,终于在2017年成为了标准,在今后互联网的发展中或将得到广泛部署。
另一方面,互联网域内路由协议也没有进行大的改动。规模较大的网络通常根据它们的设备环境选用OSPF[10]或ISIS[11]协议,而较小的网络可能会选择距离向量协议,如RIPv2甚至EIGRP。随着IPv6的发展,OSPF协议也进一步扩展为OSPFv3[12],然而基本的技术原理并没有发生变化,各个路由器仍然采用链路状态信息数据库来保持一致的全网拓扑视图,并通过Dijkstra最短路径算法计算路由。过去十年中,IETF中路由领域的工作组也提出了一些新的域内路由协议。例如为了解决IP地址同时具有位置和身份标识这二重语义的问题,提出了位置/身份分离协议(Locator/IDseparation protocol,LISP)[13];为了解决距离向量协议中的路由环路问题,提出了Babel路由协议[14],可用于有线网络或无线mesh网络。尽管这些新的协议在路由管理方面具备一些有趣的特性,然而它们所具备的能量和能够带来的好处还不足以改变传统网络设计与运行惯性,因此它们都没有得到大规模的使用。从过去十年的互联网路由,可以看到互联网巨大规模所具有的惯性给技术发展和变革所带来的阻力。
2.2.3 网络管理与配置
在网络管理方面,大约25年前提出的简单网络管理协议(Simple Network Management Protocol,SNMP)仍然是目前广泛使用的工具。SNMP存在很多问题,包括安全性较弱,处理效率较低,ASN.1标准复杂而难以使用等。另一方面,SNMP更加适用于网络监控,但并不适用于网络配置,网络管理员需要人为手动进行大量繁杂的网络配置任务,不仅效率低下而且容易出错。为了解决这一问题,自动化的网络配置管理方法和工具是过去十年里研究人员努力的方向之一。
早在2003年,IETF就成立了Netconf工作组,目标是提出全新的网络配置协议NETCONF[15]。NETCONF采用可扩展标记语言(eXtensible Markup Langrage,XML)来传递配置数据和协议消息,并采用基于连接的可靠传输和SSH等安全协议来提高安全性。2010年,IETF提出了YANG(Yet Another NextGeneration)语言[16]用于对NETCONF协议中涉及的各类数据建立模型,随后的一系列标准为路由、传输、安全、服务相关的管理数据建立了YANG模型。近年来提出的RESTCONF协议[17]对YANG模型数据库提供了基于HTTP协议的可编程访问接口。网络管理数据仓库(Network Management Datastore Architecture,NMDA)[18]提供了连接网络管理数据模型与网络管理协议的框架。另一方面,一批的自动化配置工具涌现出来,可以对大规模网络设备或服务器进行更高效的管理,包括Ansible[19]、Chef[20]、NAPALM[21]、SALTSTACK[22]等。这些自动化、批量处理的工具逐渐取代原始的基于命令行和脚本的配置方式。但总的来说,过去十年里互联网网络管理方面发生的变革仍在继续,距离实现自动化、智能化的网络监控和配置还需要时间。
2.3 端到端传输
2.3.1 TCP
TCP协议是互联网端到端协议的核心。许多其他传输协议要求较低级别的网络协议栈为传输协议提供可靠的流接口。这些传输协议需要由网络层及以下的部分来创建这种可靠性,并且执行数据完整性检查,数据流控制,在网络内部恢复丢失的数据等等。TCP免除了所有这些对网络层的要求,并简单地假设网络仅仅可以提供不可靠数据报传送服务,并让TCP传输层协议负责数据完整性和流量控制。