20世纪最激动人心的东西太多了,我最喜欢的相对论算一个,然而在工程界,我觉得最伟大的发明就是TCP/IP,没有之一!它从单台的计算机互联,到承载着如今爆炸式的互联网以及今后的物联网过程中,一直都很优秀,并且最激动人心的是,它几乎还是保持着它刚出生的样子,如此的稳定!不变性本身就是美,就是永恒!再次读到大师的 《The design philosophy of the DARPA internet protocols》 ,感觉有写点东西的必要了。
        读史使人明智,确实如此,想了解一个事件或者一种技术的深邃内涵,一定要历史地看!因为所有事物都是稍瞬即逝,要想彻底把握它,必须要了解它的前身和后世,如果你不了解太阳巨石文化和罗马帝国和美索不达米亚,你就很难理解今天西方国家的政策和行为...如果你理解了商周文化和先秦地缘政治学,你就会知道,其实汉字并非人们想象的那样博大精深!对待技术也一样,了解技术历史虽然不能让你写出规范的代码,但它可以让你有可能创造出一个从来没有的东西,而这正是最激动人心的,否则,你掌握的仅仅是一门匠艺,最终会被新的更多的匠艺所淹没。

一.TCP/IP的进化历史概述

-1.最初,TCP/IP是这个样子:

注意,TCP/IP在最初并不是这么拼写的,也没有分层结构,它只是为了解决计算机互联而被设计出来的,今后的发展围绕着原始需求逐渐加入了设计哲学这个手柄,正如Dave Clark说的那样。

IP的分离: 这是一桩大事件,IP协议从TCP中分离出来,成了TCP/IP,或者TCP over IP。至于为何分离,设计哲学给出了答案,具体的分析下面详述。IP仅仅是一个报文分组交换的复用层,为了提供IP尽力而为(下文将反复强调,它并没有尽力)的语义,UDP被作为一个端到端的复用层被设计出来,其实UDP就是端系统的IP,而IP则贯穿端系统节点和中间节点。我们从IP报文的分组交换出发,审视TCP/IP这幅美丽的画卷:

0.IP报文交换

IP报文交换是核心中的核心,既然IP从TCP中分离以后就成了一个最大公因子,那么它的职责就是负责传输报文,这也是分组交换的核心思想,由此衍生出来的原则就是IP不能处理任何和服务类别相关的控制功能,比如丢包重传,按序交付等等(流量工程,SDN之类的属于外延的控制,不是IP内在的秉性)。我们可以反过来来理解这个核心中的核心,如果IP实现了丢包重传,按序交付,那么那些不需要该功能的服务的效率会被拖累,也正是因为这样,IP才从TCP中分离开!由此自然而然的得到了上述第一个结论,那就是和服务类型相关的控制功能必须是端到端的行为实现!我们得到一个推论:

1.端到端的传输控制

IP协议自分离以来就是尽力交付的,事实上也真的看不出它“尽力”,它只是逐跳地例行公事罢了!那么对于那些原本的需要丢包重传,按序交付的服务怎么办,这就是留下来的TCP的功能,事实上,现在的TCP把包交换的功能分给IP了,自己仅仅留下了一个控制功能,履行端到端的传输控制。端到端的传输控制思想源头之一是为了减轻中间节点实现传输控制的复杂性,由此可见,阻力有时候也能带来创新,人穷则思变。于是TCP/IP变成了下面的样子:

之所以把IP和TCP分离的另一个原因是需要支持无需重传,无需按序交付的服务,既然现在IP已经纯粹变成了一个包交换传输协议,那么就可以创造一种和和TCP并列的UDP协议同样使用IP的服务,只是刨去TCP的传输控制功能了,印证一句名言:加一个层!于是TCP/IP成了下面的这个样子:

于是,分层模型就出来了,这直接影响了后面几十年!于是一个自然而然的推论就出来了:

2.应用层的高度的可扩展性

分层模型之后,百花齐放的时代到了,既然TCP和UDP都能复用IP,那么TCP之上,UDP之上的多种服用同样也能复用TCP和UDP。看看下面的这个图即可:

仅仅说明一点,应用程序之所以可以爆炸式增长,得益于端到端的传输控制以及分层模型,我们还是反过来考虑这个问题,如果没有端到端的控制,那么每实现或者优化一种传输控制功能,都需要修改中间节点的实现,而想让节点的实现者们为了支持一种协议达成共识是不可能的。如果没有分层模型,中间节点就会显得不像现在这么标准化(封闭),任何的应用创新都可能波及到中间节点,以至于应用创新几乎不可能!(如今的SDN可能或多或少的改变了)

但是,实际的协议栈是一个沙漏而不是一个倒立的锥子!因为我们一直都忽略了实际的物理链路网络!实际上是这个样子:

因此,事情远不像Internet的设计者开始想的那么完美,事实上,在这些链路层以及物理层被设计出来的时候,分层架构还远没有深入人心,并且也借鉴了电话交换网的一些现有思想和技术,所以才造成了很多重复设计,比如X.25的链路级别的重传和TCP的端到端的重传,然而不管怎样,下层的传输控制都是链路级别的,其设计不会影响到整个Internet全局,比如TCP重传会导致一个重传报文穿越整个端到端的所有链路,进而会引发更多的不可控的事件,比如TCP封装TCP时的重传叠加等。

说起TCP封装TCP,TCP/IP的分层架构可以使分层递归化,一个TCP/IP分层实际上带表了一个逻辑网络,真实的网络可以将任意的层作为任意层的payload,进而使VPN的实现成为可能,VPN就是典型的一种物理网络上的逻辑网络!总之,分层模式允许任意层面的封装,TCP/IP于是是下面的样子:

仅仅考虑TCP/IP,我们看到IP是一个逻辑意义上最底层的传输协议,然而数据需要跨越物理链路传输,IP层面以下就是物理链路的最上层了,因此我们有了下面的推论:

3.以往的传输网络退化成了IP的下层

分层模型提出后,各大标准争相靠拢,当时IP并未取得统治地位,可以说ATM,X.25等网络完全实现了分层模型,它们并非一定要使用IP协议,它们本身就是类似IP协议的技术,只是实现更加复杂,对上层和下层提出了很多假设,它们和TCP/IP栈是平行的。最终TCP/IP的IP完胜,鉴于以往的投资以及上述广域网技术的成熟,它们统统退化成了一种链路层技术,这个退化直接得益于分层模式的递归特性,该特性允许逻辑意义的任意封装和再封装!

附:端到端传输控制与路由快速恢复

话说TCP/IP协议栈采用了美丽的端到端控制,IP仅仅保留了分组交换的功能,这个设计出了衍生出了大量的应用之外,还有一个重中之重,那就是使得路由可以快速恢复,怎么说呢?如果和服务应用相关的传输控制特性在IP中实现,那么整个中间节点加上端系统都要支持诸如状态(N元组)的初始化,复制,处理,销毁等操作,以现今的路由协议为例,如果一条链路出现故障,路由协议将不能简单地将IP报文重路由到另外一条路径,此处的复杂性包含但不限于和所有相关端系统的状态的复制操作,即使复制操作得以实现,如果复制的时机和端系统的状态机没有正确对应,会出现意想不到的错误,而这个错误可能是无法恢复的,直接的后果就是端到端通信的中断,这将违背IP协议对应用的透明性原则。(可以参见《 再次深入到ip_conntrack的conntrack full问题  》)
       不管怎样,确实是端到端的传输控制直接导致路由的简单性,很多路由协议和TCP/IP栈是低度耦合的,比如IS-IS协议。最终,路由的工作就是简单根据IP报头来寻找下一跳,没有任何附加的复杂性,在这个原则之上,开发出了很多的动态路由协议用来支持IP网络故障的自动恢复而不用让端系统感知到这种故障!虽然说策略路由和QoS很大程度上被归为IP协议的范畴,导致了IP的复杂性,然而我认为那只是控制平面的一些有针对性的增强和优化,并没有改变IP简单的秉性!简单就是一切,简单可以应付进化和突变,找个领域的另一个例子是以太网,还有一个终极一点的例子,那就是DNA,再终极一点,就是阴和阳了!

附:简单的IP衍生复杂的控制

IP报文的交换甚至都不是尽力而为,它确实是转发后就不管了,然而它却能保证端到端通信在任意中间节点失效时的快速恢复。如果你说IP的无状态特征使管理和统计很困难的话,那是因为没有考虑控制平面,IP报头的简单性和规整性使得控制平面的实现者可以高效方便的解析协议首部从而将一个数据报文和一个N元组关联起来,进而定义一个流,然后对该流实施任意的控制,目前而言,NAT,状态防火墙,深度解析,入侵检测,VPN等系统都是上述控制平面的实例,将来,SDN将这一切统一起来!
       一个协议如此简陋的出身,注定将来大展宏图,所谓英雄不问出处!IP协议和Linux很像,从超级计算机到嵌入式设备,都有它的身影,其背后的原则正是:简单的内秉可以衍生任意的外延!

二.问题以及解决

起初的设计被认为是一个开放式的设计,最终进化成了如今的基于TCP/IP的Internet,可是问题逐渐显现,如果在框架内解决不了,那就说明起初的设计还不够开放和可扩展,事实上最终我们发现IP协议设计得如此精妙,以至于可以设计出任意的控制平面施加于它而得不到它的任何抱怨!

1.问题:端到端的传输控制真的没有问题吗?

过去,网络节点不多,大家满足于分组交换这个简单又实用的网络,所有的复杂性全部由端系统实现,中间节点只负责逐跳将分组交换到目的地端系统,导致了中间节点对应用和服务完全不知情,它无法辨别一个报文是原始报文还是重传报文,当这个越来越严重的时候,便在中间节点引入了越来越多的复杂功能,比如流量工程等,这在某种层面上违背了IP的原始设计理念,然而却是必要的,因为IP协议从一开始就缺乏一个有效且足够复杂的控制层或者说控制平面,IP的设计理念应该是:提供足够简单且灵活的分组转发逻辑。这个理念背后的含义应该是:足够简单且灵活的转发逻辑可以衍生出任意复杂的控制逻辑!我们知道,IP真正的做到了简单和灵活,从一开始就是,不管是IP报头,还是路由器的行为,都足够简单,然而Internet上缺乏控制逻辑,其实控制逻辑早就可以构建出来,SDN迟到的原因并不是说技术上的原因,而是原有的架构工作得还足够好!

2.问题:IP报文交换和端到端的割裂

这个问题其实是问题的延伸,然而是另一个层面的探讨。正如发展经济时提倡买车,经济发达时抑制拥堵一样,Internet也经历了类似的过程!诸如不让人家买车-限制新应用开发,单双号限行-低级的调度策略,不让外牌上高架-资源独占,沪C不让进内环内-粗粒度包分类阻止,这些方式都是一些狗屁方式,最终都会遇到自己给自己制造的瓶颈!最根本的方式除了加快基础设施的建设以外,那就是提供高超的调度策略,提供一种端到端的跟踪体系。SDN真实而不是形式上做到了这一点,它可以让人通过编码而不是“买设备-求支持-写配置”的方式来定义网络行为。
       记住,这只是一种控制平面的拓展,没有在任何层面增加IP的复杂度。再次重申,IP的简单,灵活(包括行为定义以及报文头)允许任意复杂的控制平面施加于其上!

3.问题:QoS到底由谁来提供

总览TCP/IP,我们发现它是完全逻辑意义上的,没有对底层的物理设施提出任何的假设,虽然有很多的所谓针对不同物理设施的优化算法,但是这种算法也是可插拔的,比如TCP对于高有损链路的拥塞控制优化。实际上,QoS面对的很多问题都是物理意义上的,比如光纤就是比10BASE-T好,因此,首先底层要提供一个QoS保证的最小集,然后让上层的控制平面来对数据包进行调度分拣(比如根据N元组来识别不同的流量),而不是直接在协议层面植入QoS特性,因此我认为IP报头中保存QoS相关的字段并不适合!正如,你首先要有一条宽阔平整的马路,然后才能在上面划分出各种专用车道和路肩。

4.问题:TCP真的很复杂吗

总有人说TCP很复杂,文档太多且杂,然而其核心却是十分简单的!所谓的那些复杂的东西都是一些可插拔的针对特定场景的优化!最原始的TCP是没有延迟确认和捎带确认的,而引入这些机制是为了优化网络行为和提高吞吐量,可是却影响了延迟,为了干掉糊涂窗口,又引入很多优化,正是这些让协议变得复杂起来,如果读一下理论方面的书,单帧的停等协议就是TCP协议的核心!

1.TCP/IP模型与OSI模型

TCP/IP模型从一开始就是从实践走出来的,因此它能更好地迎合实际的应用而不单单停留在纸面上。从TCP/IP的发展史来看,它将IP从TCP独立出来的一部分原因是旨在将复杂度压缩在最少的位置,即主机中。否则中间节点作为传输控制的实现者,太复杂了。最终它仅仅分出了两个层,即TCP over IP。
       OSI是在TCP/IP的初稿设计出来以后被提出的。它的目标旨在解决不同厂家异构设备的互联问题,因此提出一个标准化的分层模型。虽然TCP/IP最终被确立为互联网标准协议,但是不能不说后期它的发展思想来自于起码是部分来自于OSI模型。TCP/IP止步于IP,对下层的链路和物理设施不加过问,它纯粹是逻辑意义上的网络模型,而OSI因其目的,对逻辑网络影响不是很大,它解决了大多数的链路层以及物理层的互联问题。可以说链路层和物理层是OSI的用武之地,而OSI的网络层以上因其过于抽象而没有得到广泛推广,TCP/IP正是在这些层次以期简单,灵活赢得了支持!
       实际上,OSI模型并不是凭空提出的,和TCP/IP从一个大融合的单一协议在实践中不断分离,改进不同,OSI模型更多的是对既有协议的一种标准化过程,比如X.25等,而这些协议在OSI模型的指导下,统统实现了分层,然而正如上述原因,这些协议强调物理层和链路层,最终在网络层以上和TCP/IP实现了无缝对接,使得这些协议退化成了TCP/IP的链路层。

2.原生OverlayNetwork的TCP/IP

TCP/IP本身就是一个OverlayNetwork,它的分层模型使得每一层负责单一的职责,下图是从wiki上摘录的:

我们可以立体地感受一下分层模型,然而原生的分层TCP/IP是不同层的重封装,由于分层模型可以递归,相同的层次也可以重新封装,一个典型的例子就是LISP。

3.以主机为中心的TCP/IP

由于TCP/IP将复杂的传输控制功能在端系统实现,中间节点的IP仅仅负责最简单的分组交换,也就造就了TCP/IP网路以主机为中心的观念,它仅仅旨在将诸多主机进行互联。和大多数抨击这个观念的人想法不同,我认为分层模型和端到端原则允许我们将“主机”这个概念进行任意抽象。本质上,以主机为中心的网络将网络本身看成是一些稍微带有一些智能的线缆而已,所谓的智能仅限于寻址,因此加上了稍微二字。

主机的概念抽象出来以后,我们可以构建一个同协议分层的“端到端”模型,类比上面的标准TCP/IP分层图示,以下的图表示多层次IP的模型:

注意,这个图是拓扑寻址图,和上述的协议封装图是反过来的,协议封装图的最下层是位于协议的最外层,而寻址图的最下层位于协议的最内层,两张图是基于不同的视角来解释的。上图中,其中最下面的两个层次其实就是LISP,上面的两个层次可以是SDN构建的,也可以是任意的类似VPN网关的东西硬配置的。可以看出这个模型可以完美支持以数据为中心的所谓下一代互联网!我们只需要分清数据平面和控制平面即可。数据平面依然是最简单的IP思想,所有复杂性都是在控制平面引入的,猪血!
       在以数据为中心的网络时代,寻址要素不再是主机而是数据本身,因此可以使用主机抽象的思想纵向的堆叠多个IP网络,最下层寻址数据,上面一层寻址位置,再往上控制寻址路径的下一跳或者实现安全策略。多个层次的IP寻址彼此是独立进行的,实现不同的目的,即寻址不同的要素。这就把以往的横向铺开的单一IP网络重构成了一个立体的IP网络,IP协议依然保持其最初的特性,TCP/IP依然是一个以主机为中心的模型,只是主机的概念抽象化了!

4.IP网和物联网(个人观点,不喜勿入)

以前,说实话我挺看不起IT的,因为我更看得起实体工业,比如制造业。然而实体工业一直都和IT关系不大,它更多的关于传感器,工业控制领域的发展。然而物联网模型的提出使我抹去了最初的偏见。IP以其简单灵活可扩展的特征直接切入到智能物件,大到搅拌机,铣床,小到温度传感器,使用IP都可以将它们互联起来,互联网发展到物联网阶段,互联的已经不再仅仅是计算机了,而是几乎所有东西!我知道,计算机其实干不了什么真实的事情的,别跟我提数据,数据还是数据,我只对看得见模得着得东西感兴趣!虽然计算机网络在通讯领域已经可以帮人们处理掉几乎所有的商业逻辑,但是除了看不惯IT之外,我对商业更不感冒!相反,我对那些挖煤的工人倒是很崇敬!因为他们挖出来的是人们冬天可以烧来取暖的东西,是能源!虽说计算机也能控制挖煤机,但是我总觉得那是万恶的计算机对实体工业的一种入侵。地铁上看到一群群搬着两个箱子(主机+显示器)的家伙们已经让我窒息了,为什么计算机这玩意能俘获那么多人的心?!网络应该直接控制物件,而不要通俗套又庞大的计算机!!计算机本来就应该是它原本的样子,一个控制终端而已,就像20世纪50,60年代那样,后来的个人计算机就是一个过渡产品,当计算机通过互联网彼此连接起来以后,它就应该归回到它的本位了。
       玩游戏可以有专业的接入互联网的游戏机,商业操作可以使用PDA,充其量使用一个PAD,大个儿的双机式计算机真的很恶心啊,怎么也得是个一体机吧!当然我并不针对痴迷的程序员工作者,就像我舅舅是一个痴迷的机修工和汽修工,这都什么年代了,他家里的家伙什么都有,大到切割床,小到零部件,什么都有...总之,传统计算机这种大家伙正在慢慢被PAD,嵌入式小型终端,电子玩具...所取代,不管怎样,躺在沙滩上,拿着pad浏览网页,或者躺在床上听着Sony限量版的音乐盒子,要比坐在电脑前爽多了。
       普适计算将计算机缩小并隐藏在背后的时间要到了!历史上,曾经发生过多次这样的事件,汽车驾驶和维修曾经多么紧密在耦合在一起,以至于司机曾经是一个技术活儿,薪水可观,如今,汽车真的成了代步工具了...

TCP/IP模型背后的内涵相关推荐

  1. 一分钟了解 TCP/IP 模型

    原文讲的不是特别细,为了便于理解,我颠倒了顺序. 写在开始 我们需要知道协议到底是什么. 在网络上,一个协议对应于管理系统之间如何相互通信的规则. 然后我们需要知道什么是协议族. 一个协议族是一系列协 ...

  2. OSI模型和TCP/IP模型

    OSI模型 开放式系统互联通信参考模型(英语:Open System Interconnection Reference Model,缩写为 OSI),简称为OSI模型(OSI model),一种概念 ...

  3. TCP/IP模型各层的作用和设备

    TCP/IP模型 功能 对应的TCP/IP协议 设备 应用层 文件传输.电子邮件.文件服务等 HTTP.FTP.TFTP(简单文件传输协议).SNMP(简单邮件传送协议).DNS 服务器.计算机 传输 ...

  4. 以太网数据帧的报尾封装字段是什么_利用TCP/IP模型理解数据通信过程

    回顾TCP/IP模型 TCP/IP模型是当今IP网络的基础(由OSI七层参考模型发展而来,也称为DoD模型). 分层参考模型的设计是非常经典的理念: 层次化的模型设计将网络的通信过程划分为更小.更简单 ...

  5. 在TCP/IP模型中,( )处理关于可靠性、流量控制和错误校正等问题。

    在TCP/IP模型中,( C )处理关于可靠性.流量控制和错误校正等问题. A. 网络接口层 B. 网际层 C. 传输层 D. 应用层 TCP/IP模型的传输层提供端到端的通信,并负责差错控制和流量控 ...

  6. 【计算机网络】TCP/IP 模型与OSI参考模型的比较

    文章目录 共同点 不同点 使用通信协议栈进行通信的结点的数据传输过程 共同点 采取分层的体系结构 将庞大且复杂的问题划分为若干较容易处理的.范围较小的问题,而且分层的功能也大体相似 基于独立的协议栈的 ...

  7. 【计算机网络】TCP/IP模型

    文章目录 网络接口层 网际层 传输层 应用层 TCP/IP模型从低到高依次为网络接口层(对应OSI参考模型中的物理层和数据链路层). 网际层. 传输层和 应用层(对应OSI参考模型中的会话层,表示层和 ...

  8. TCP/IP模型的各层的作用

    第一种总结: TCP/IP模型:以无缝方式实现各种网络之间互连的网络体系结构. TCP/IP模型共分四层,分别为应用层.传输层.互联网层和主机到网络层. 各层实现特定的功能,提供特定的服务和访问接口, ...

  9. 计算机网络中对等层,【计算机网络】两个网络模型——OSI参考模型和TCP/IP模型...

    计算机网络 两个网络模型 计算机网络模型 分层机制----规划通讯细节 层与层之间之间是独立的.屏蔽的,下层为上层提供服务. 一些概念 实体: 任何发送/接收信息的软件/硬件进程. 对等层: 两个不同 ...

  10. TCP/IP模型的简单解释

    TCP/IP模型是互联网的基础.想要理解互联网,就必须理解这个模型.但是,它不好懂,我就从来没有搞懂过. 前几天,BetterExplained上有一篇文章,很通俗地解释了这个模型.我读后有一种恍然大 ...

最新文章

  1. (转)字符型指针变量与字符数组的区别
  2. 常见的上传绕过以及解析漏洞
  3. linux 自动连接无限,hotplug应用实例:自动连接无线网
  4. python缺点这么多、为什么还流行_Python这么火,为什么说它不是未来的编程语言?...
  5. Silverlight Issue , Operation named 'CreateUser' does not conform to the required signature.
  6. 2019 vs 安装odt_河南2019二级造价师考试教材出版信息,免费送考试大纲
  7. Java开发入门教程!java垃圾回收机制描述正确
  8. 通过wifi无法连接手机调试
  9. JSP的九大内置对象
  10. MacBook如何设置双面打印
  11. java解析axure原型rp文件_AxureRP原型制作中在线文件的存储方案
  12. 【大宝的犀牛】飞利浦RQ370剃须刀建模教程
  13. ips 代理模式_IPS的完整形式是什么?
  14. 高职计算机应用与信息检索,信息检索论文,关于高职院校图书馆对学生信息检索的教育相关参考文献资料-免费论文范文...
  15. 微信小程序如何引入直播组件?
  16. 泰坦尼克号生存者预测(细节篇)
  17. Glide加载webp动画及监听动画播放结束
  18. Latex矩阵和表达式组的绘制
  19. git 创建本地分支及远程分支并且关联分支
  20. 新手:linux环境配置以及linux下的pycharm安装

热门文章

  1. java观察者模式举例_写个观察者模式(Observer Pattern)的例子
  2. 为什么要面向对象编程?
  3. 前端 | 表格(table)的合并
  4. DRAM基本单元最为通俗易懂的图文解说
  5. Python 网络爬虫及数据可视化
  6. 瑞尔森大学计算机网络专业怎么样,瑞尔森大学怎么样?
  7. 吃鸡账号显示连接不了服务器,《绝地求生》“与Steam服务器连接时出现了一个问题”怎么解决...
  8. Python(28)---模块和包的基本概念
  9. Presenting view controllers on detached view controllers 警告根由
  10. 新旧版MATLAB中的希尔伯特-黄变换(HHT)及其边际谱的求取问题