TCP/IP的比喻[转贴]
2015年08月19日 来源: 作者:佚名 浏览次数:1992

  最近正在讲TCP/IP,我从中得到了启发,突发奇想做了一个关于TCP/IP分层示意图。我用实际生活中的事物来比喻TCP/IP不同层的工作原理。

应用层(FTP协议):

  首先我们说说应用层,应用层就像在特定城市特定大厦特定房间内的某一个用户,应用层之间的通讯就像两个不同用户之间发送的信,这个信是点对点的,从一个用户(某一主机内特定应用程序)到另外一个特定用户(另一主机内特定应用程序)。一个主机(大厦)内可能有很多应用程序(客户),我们如何区分它们呢,实际生活中我们用房间号,在电脑内部区分不同应用程序我们用端口号。

    传输层(TCP):

用户写好了信,需要给信套上信封,并且写好发件人所在大厦,和收件人所在大厦,实际生活中的大厦完全可以类比为我们的计算机和服务器。传输层(TCP)就是在两个不同主机之间传输信息的协议。

网络层(IP):

  邮件准备好了,他首先会被送到本城市的快递公司,并且被打包,包裹上会写着源是重庆快递公司,目的是沈阳快递公司,但是重庆快递公司发现它不能直接发货到沈阳,需要通过北京快递公司进行中转。所以虽然目的是沈阳,但是他首先把这个包裹发给了北京。某个城市的快递公司就像IP协议,要抵达目的IP,需要查询路由表,如果发现目的地址不是直连就需要找下一跳。通过了解快递公司的工作,我们了解到IP协议是逐跳工作的。每一跳(路由器)根据目的IP地址查询下一跳,并且最终转发到目的地。

     链路层(以太网):

  重庆快递公司已经知道他需要把包裹发给北京快递公司了,现在他就把包裹送到重庆火车站,搭上去往北京的火车,然后在北京火车站卸货。然后送到北京快递公司,北京快递公司再判断下一跳为沈阳快递公司,并且选择适当的传输方式,例如:汽车,最后通过这种传输方式送到目的地沈阳快递公司。链路层协议就像包裹的运输方式,我们可以选择以太网(火车),也可以选择令牌环(汽车)。并且链路层协议是逐介质的,从一个网卡(重庆火车站)到另外一个网卡(北京火车站)。  所以你会发现一个数据包从源到目的,IP地址总是不变的(源是重庆快递公司,目的是沈阳快递公司),但是链路层协议却在不断变化,第一跳源是重庆火车站,目的是北京火车站,第二跳源是北京汽车站,目的是沈阳汽车站。

   

 

 

顺丰快递

如今网购很是风靡,互联网几乎摧毁了大多数的零售店,这些零售店的员工丢了工作后都去送快递了,互联网在损失一些岗位的同时增加了更多的岗位,上班时出去抽烟,一根烟的工夫能看到不下五个快递员,它们也真辛苦,扛着大包小包上上下下,因此建议各位,在电梯里遇到他们时,问问他们到几楼,帮他们按下电梯,他们在辛苦之中会很温暖的。
    
整个快递网络真的就是互联网在现实中的实体模型,每个订单就是一个数据报,它们也有路由规则,也有集散中心,有时路由策略也会不合理从而遭到用户的抱怨,更有意思的,快递业务也会有最后一公里问题...在国内所有公司里,我觉得顺丰很不错,速度快,效率高,可以跟踪包裹的行踪,除了偏远地区,一般都是第二天直到,比国管的邮政体系好多了,价格还便宜,这真的就像是当初的TCP/IP风靡时一样,然而快递业务是可以被大众体验的,而TCP/IP的细节估计没几个人懂。
    
在顺丰的官网上,你可以通过运单号码查询详细的包裹路由信息,这个在TCP/IP网络上几乎是不可能的,因为TCP/IP目前是所谓的分组交换网络的核心协议族,而分组交换网络并不直接对应用负责,而只是对分层协议的IP数据报负责,因此一个应用的一个业务被拆成了N个传输层PDU,然而有被封装成了MIP数据报,考虑到MTU的影响,传输层的PDU可能在IP层会被分片,因此单独跟踪IP数据报是没有意义的,你也不可能通过单独的IP数据报信息得到整个应用逻辑业务的详细信息。举个例子,你发一封EMail,然而该EMali被分成了3TCP段,其中一个又被分解成了6IP片,那么一共8IP数据报,你跟踪其中一个有意义吗?非头分片中甚至不能获取应用端口信息,使用TCP的业务又涉及到丢失和重传,这使得整个跟踪过程复杂了起来。
    
对于快递包裹,它的协议是不分层的,从收到包裹的单子上可以看出,那个单子不是罗列的好几层,而只有两份,上面的信息每到一站由该站填写,它是一个平坦的协议而不是一个分层的协议,如果用TCP/IP或者OSI的理念发送快递包裹,那么你收到包裹的时候,就不是一个单子了,而是一大叠单子,这个当初的邮政业务很相似,当初的邮政业务协议无疑是分层,和TCP/IP很类似。因此当前风靡全球的快递业务是一种有别于分层协议的平坦协议。
     TCP/IP
为何可以快速实现分层,那是因为数据的可分割性,我们知道二进制信息只有01,各层的协议可以单靠数据边界和协议头来在任意位置拆分和重组数据,而对于快递业务则不是这样,它的载荷不是由单一的简单实体组成的,比如你不能把一份蛋糕切成两份然后再组合起来,也不能将一条裤子裁成两节再缝在一起,重组的代价太高,用TCP/IP的术语讲,载荷频繁置位DF位,导致不能发送从而回返ICMP信息。
    
因此TCP/IP由于二进制数据的原子特性可以轻易实现分层协议,当初的邮政系统由于载荷的单一-只有平信或者特快专递信件,也可以使用分层协议,可是面对如今鱼龙混杂琳琅满目的快递业务,只能用一种平坦的协议来实现所有这一切。这并不是什么坏事,正因为快递协议是平坦的,我们才可以实时查询到包裹的当前位置,从而影响我们对行程的安排,比如如果下午重要快件就会到,那我可能就不外出了。
    
总之,网络购物使得快递业务大大影响了我们的生活,这种影响还将继续下去,至于说这是好是坏,还待历史评说。任何理论家都是事后诸葛,他们不可能在一件新生事物刚起步时就知道它的目的,就连牛顿当时也不知道自己会带来什么影响,因此后事如何,我们拭目以待。