前情回顾:

我是一个explorer的线程

我是一个杀毒软件线程

我是一个IE浏览器线程

比特宇宙创世不久,宇宙中开始出现文明。

文明不断碰撞、融合、进化,逐渐分化为几大派系:

施行Unix体制的帝国,出现时间最早,在宇宙中最有威望。

施行Windows体制的帝国,数以十亿计,成为宇宙中最庞大的军团。

施行Linux体制的帝国,后起之秀,曾和Windows帝国军团爆发多次战争,后握手言和,割据一方。

随着文明的发展,宇宙之间的各帝国逐渐意识到需要发展经贸合作,互通有无。终于有一天,几大派系的帝国派了代表聚在一起,商讨比特宇宙的经贸合作框架协议。

☆ 第一天 ☆

会议第一天的议题,商讨经贸合作的最重要的基础:制定比特宇宙通信标准。

Unix代表首先发言:我们需要制定一套普世的宇宙标准,让全宇宙的帝国都能互相通信,大家有什么想法,请畅所欲言。

Linux:最简单有效的办法,帝国之间都建一条专有线路,就像这样,构成一张巨大的网络,我们就能和任何帝国通信了。

Windows:你想的也太简单了,你知道咱们Windows星系有多少帝国吗?建专有线路,这得花多少钱?就算你有钱,帝国要建这么多线路,那也不堪重负。
Linux:别着急,我还有办法。咱们找一个帝国作为网络中心节点,专门负责数据转发,其他帝国只需和中心建一条专线就可以,这一下能省很多线路的钱。诺,就像这样:

Windows:确实省了不少,但你有没有想过,这个中心节点得多么重要,工作负担巨大倒是其次,一旦中心帝国覆灭,全宇宙的通信全部中断,这是多么严重的后果?Linux皱了眉头,不再说话。

Unix:其实这个方法挺不错的,不过需要一点改进会更好。就像你说的,一个中心节点不够,咱们可以弄多个啊,然后这多个中心节点之间再互相连接,把一个中心变成多个中心。嗯,其实这里就不再存在中心了,就是一个去中心的分布式网络了,你们觉得怎么样?

Linux:唉,这个好!我还想到了一招,既然咱们宇宙中帝国众多,就把你说的中间这些节点再进一步划分层级,也就是划分为一个个子网络,然后子网之间连接组成大的网络,然后大的网络之间再连接构成更大的网络!我是不是个天才!

Windows:嗯,听起来挺不错的,不过有一个问题还没解决,就是非常遥远的两个帝国之间要通信,网络通道该怎么建立呢?中间节点要如何给这两个帝国搭建出一条专线,让他们通信呢?

·······一阵沉默·····

·Unix:为什么非得建立专线呢?这样效率太低了,如果一条线路给你们占用了,别人要经过这条线的是不是得一直等着?

Linux:说的有道理,那你有什么好主意?

Unix:我们可以把数据拆分为一个个的单元,分组传输,每个单元写好发件人、收件人,中间的节点负责存储转发就可以了嘛,这样大家都可以用这个网络,效率大大提升。

Windows代表拍案而起,“这简直是划时代的想法!大佬果然是大佬!”

Linux:非常棒的想法,我们给这种技术取个名字吧,既然是分组,然后存储转发,要不然叫”分组交换技术“怎么样?

Unix:嗯,这名字很贴切,就叫它!

Linux:我们给这个巨大的网络也取一个名字吧,叫Internet怎么样?

Unix:Internet,因特网,听起来还不错

Windows:大佬,既然要通信,接下来咱们需要要讨论下通信协议了吧。

Unix:通信协议?

Windows:对啊,咱们得制定一套规范标准,所有帝国按照这套规范来收发信息,才能互相理解对方在说什么。

Unix:嗯,确实需要这么一套标准协议。既然网络叫Internet,那咱这套标准协议就叫Internet Protocol,那具体协议内容怎么制定呢?

Linux:等下,给我个表现机会,让我先说说。

Windows:洗耳恭听。

Linux:咱们给所有帝国编一个号,用4个字节的整数来表示,嗯,我想想,从0x00000000到0xFFFFFFFF,差不多能表示42亿多个帝国了,绰绰有余了。这个编号,就叫Internet Protocol Address,也就是IP地址。

Windows:嗯,用是够用了,不过我建议不要用16进制表示,不太好书写,人类那智商肯定记不住。既然是4个字节整数,要不就用人类熟悉的4个十进制整数来写,用点来隔开,像这样:0.0.0.0~255.255.255.255,把这种写法叫做IP地址的点分十进制表示法,怎么样?

Linux:嗯,这个建议好,可以采纳。我刚才还没讲完,通信的时候,数据前面加一个头部,头部里面写上发件人的IP地址、收件人的IP地址,这样发送出去,然后交给网络中的中间节点,让他们转发出去...

Windows:等一下,有一个问题,中间节点该如何知道转发给谁呢?·······又是一阵沉默······

Linux:有了,人类收发快递的时候,他们的地址是分了省,市,县到街道,一层层分级了,逐级进入就能找到收件人的地方。咱们的网络也可以这样效仿,把网络分不同大区,大区里面分子网。然后负责转发的这些中间节点,记录一张表,表里面记录不同地区的地址该交给谁,如此,不同层级负责不同的地区,整个网络就能运转起来,收发信息了。

Unix:这个办法好,咱就把这种技术叫路由技术,这个表叫做路由表。

Windows:确实很有头脑嘛,不过我想到有一种情况可能可能比较难办。

Linux:什么情况,别卖关子了。
Windows:如果写了一个不存在的收件人,或者是中间节点的路由表里面都没有记录这个帝国,甚至有些中间节点之间踢皮球,谁都不知道交给谁,互相推诿,那发出去的数据包裹岂不是要在网络里面转圈圈,没完没了浪费资源了?
Linux:额,好像确实是有这么个麻烦问题,你解决问题没啥能力,挑刺倒是一把好手嘛!

Unix:有了!咱们在在这个头部里面除了写上收发地址外,再加一个计数器,表示这个包裹的生命周期,发件人初始设置一个数字,表示允许最多在网络中传递几次。中间节点收到后,就把数字减1,如果某个节点拿到后发现减1后变成0,那就丢掉它不再传输了

Linux:嗯,这个办法好,这个计数器也取一个名字,叫Time to Live吧,就是生存时间的意思,简写成TTL

Windows:大佬,果然有经验,佩服佩服。不过原谅我还要继续提问题哦。

Linux:你的问题怎么这么多,快说!
Windows:帝国之内有许多的公司都需要经贸合作,如何能进一步区分是哪家公司的信息呢?

Linux:这样看来,4个字节整数不够用啊,再加一点怎么样,给每个公司都弄一个编号。

Windows:这恐怕不太现实,帝国的公司经常在变化,每天诞生消亡不计其数,还有些公司根本不做国际化贸易,不需要网络通信,这种办法不好操作。

Linux:这,,,

Unix:今天时间也不早了,要不明天继续讨论这个议题如何,今天的收获已经不少了。

Linux:好的,我回去再琢磨琢磨。

☆ 第二天 ☆

Unix:两位昨晚休息的如何?

Windows:还不错。

Linux:还行吧,对了,昨天最后那个问题我有新的解决方案了。

Windows:哦,是吗,我也想到了一个办法,要不你先说。

Linux:昨天的IP地址技术方案还是不变,IP地址只用来在网络中标识一个帝国,至于帝国内部的公司,由帝国内部自己管理。帝国内部再给自己的公司编个码,既然你说到公司会不断消亡和诞生,那这个号码就动态生成。

Windows:跟我想的差不多,帝国负责网络通信的部门给需要通信的公司分配一个号码,我取名叫端口号,用2个字节来表示,总共65535个端口号,公司要通信的时候,向帝国网络通信部门申请,用完就回收。通信过程中,把这个端口号也带上,帝国网络通信部门收到来自网络的信息包裹后,根据上面收件人的端口号,就能交给具体业务的公司了!

Linux:对对对,跟我想的简直一摸一样!

Unix:嗯,不错不错,其实我也想到了这个办法。好了现在怎么通信的问题解决了,大家觉得我们的标准还差什么不?

Linux:我觉得整体框架已经很完善了,有一个可以再优化一点的地方。

Unix:额哦,是什么呢?

Linux:目前的方案通信是没有问题了,但因为咱们的包裹都是拆开了一个个发,由于中间网络的路况变化,可能后发的先到,有些还可能丢掉了,需要补发,还有可能发重复了,还有可能后面发的优先级更高,需要加快处理等等各种复杂的情况其实还挺多的,咱们可能还得想一套办法来解决这个问题。

Unix:呀,听你这么一说,我瞬间觉得问题还挺大的啊

Windows:看来简单的分组转发还不行,得有一套传输控制协议,来专门来解决上面的问题。

Linux:是的,你继续说下去。

Windows:我们来改造下原来的IP协议,除了把刚才说到的端口号也加进去,同时再设置一些标记,对包裹编号,这样收到后才好排序,去重。

Linux:嗯,想法不错,不过我不建议改造原来的IP协议,IP协议只负责帝国之间的传送,负责网络路由送达,至于数据的问题,不应该他来负责。我建议在IP协议后面再扩展一层出来,单独来做传输控制。

Unix:嗯, 我同意,不要把所有事情都搅合在一起,分层处理,每层只负责自己的职责。

Windows:也好,我也同意。

Linux:不过如何知道包裹丢失呢?

Windows:要不然这样,收到包裹后,得给一个答复,告诉发件人我收到了。

Linux:那其他问题呢?

Windows:额,暂时还没想好。

Unix:让我也出出注意,我们给这些数据包裹再加一些标志字段,用来对数据包裹进行编号,发送速度调节,优先级标识等等。

Windows:看起来可行,不过这双方可能在传输数据之前得先做些初始化工作。

Linux:嗯,要不在通信之前,双方先建立一个连接Unix:连接,怎么又要建立连接,不是分组转发吗?

Windows:是啊,你要开倒车吗?

Linux:两位先别急,此连接非彼连接,这是一个逻辑上的虚拟连接。正式通信之前先确认网络通达性,彼此做好初始化操作,可以理解为通过网络远程握手。通信完成后,再断开连接。

Windows:这样啊,倒是一个好办法。不过感觉这一套工作下来挺复杂的,有些公司业务比较简单,数据量小,信息包裹丢失大不了一会儿重发,弄这些感觉成本高,不一定所有公司会买账。

Unix:你说的这种情况也确实存在,要不这些比较简单的业务就不要走这套流程了,不用这套控制传输协议,单独弄一个简单版本的。

Linux:老大说的在理,刚才这套复杂的协议咱们取名叫TCP协议,就是传输控制协议的意思,老大说的简单版本的要不叫UDP,用户数据报协议,只记录收发公司的端口号就行,非常简单。

Unix:非常好,就这么愉快的决定了!
Linux:老大,咱们这套标准改个名吧,叫TCP/IP协议如何?

Windows:这是两个协议,加上其他协议,这是一个家族了,应该叫TCP/IP协议族。

Unix:同意!应该叫协议族才对!

第三天,Unix、Linux、Windows三大帝国集团代表发布《关于比特宇宙推进经贸合作的联合声明》,比特宇宙迎来全新的历史时期!

会议达成的网络通信标准TCP/IP协议族很快在比特宇宙中流行开来,无数的帝国纷纷拥抱因特网,没过多久,各种各样的网络业务便发展起来,因特网一片欣欣向荣。这其中发展最为迅速的要数Web业务,无数的帝国通过因特网相连,传输网页供人类浏览,后来人类又给他们取了一个新名字:互联网。

未完待续·······

彩蛋

彩蛋:随着Web业务的不断发展,虽然我们提供了点分十进制的书写方法,不过记忆力低下的人类仍然觉得过IP地址来标记一个提供网页服务的帝国还是太难了。比特宇宙中一些精明的帝国公司发现了新的商机......

欢迎扫码关注, 获取最新更新

比特宇宙-TCP/IP的诞生的更多相关文章

  1. 【原创】技术往事:改变世界的TCP/IP协议(珍贵多图、手机慎点)

    1.前言 作为应用层开发人员,接触最多的网络协议通常都是传输层的TCP(与之同处一层的另一个重要协议是UDP协议),但对于IP协议,对于应用程序员来说更多的印象还是IP地址这个东西,再往深一点也就很难 ...

  2. 技术往事:改变世界的TCP/IP协议(珍贵多图、手机慎点)

    1.前言 作为应用层开发人员,接触最多的网络协议通常都是传输层的TCP(与之同处一层的另一个重要协议是UDP协议),但对于IP协议,对于应用程序员来说更多的印象还是IP地址这个东西,再往深一点也就很难 ...

  3. TCP/IP笔记(二)TCP/IP简介

    上回,主要介绍了下协议和OSI参考模型,并简单了解下网络构成要素,这回该说说TCP/IP了 互联网与TCP/IP的关系   互联网进行通信时,需要相应的网络协议,TCP/IP原本就是为使用互联网而开发 ...

  4. [心平气和读经典]The TCP/IP Guide(001)

    The TCP/IP Guide[Page 40,41] Introduction To the TCP/IP Guide | TCP/IP指南概述 As I sit here writing thi ...

  5. tcp/ip (网络通讯协议)

    介绍 TCP: 传输控制协议, IP: 网际协议, TCP/IP: 供已连接互联网的计算机之间进行通信的通信协议 在tcp/ip内部 , 包含一系列处理数据通信的协议: tcp.udp.icmp.dh ...

  6. 图解TCP/IP第五版 -- 文件夹

    非常多年前买过<TCP/IP具体解释>3卷,当时可能根本没看,也可能是看了又忘了,没有留下什么印象,当时的书也当做废品卖了. 卖书时的感觉貌似是.买了太多的书,基本都没看,搬家搬来搬去的麻 ...

  7. OSI、TCP/IP

    计算机网络分层的目的:支持异构网络系统的互联互通 7层OSI参考模型是法定标准(国际标准化组织ISO提出) 4层TCP/IP参考模型是事实标准 OSI参考模型 应用层.表示层.会话层.传输层.网络层. ...

  8. [转]技术往事:改变世界的TCP/IP协议

    原文链接 : http://www.52im.net/thread-520-1-1.html 1.前言 作为应用层开发人员,接触最多的网络协议通常都是传输层的TCP(与之同处一层的另一个重要协议是UD ...

  9. TCP/IP协议(一)网络基础知识

    参考书籍为<图解tcp/ip>-第五版.这篇随笔,主要内容还是TCP/IP所必备的基础知识,包括计算机与网络发展的历史及标准化过程(简述).OSI参考模型.网络概念的本质.网络构建的设备等 ...

随机推荐

  1. Linux下基本操作

    强行转Linux,开始以为会很不适应,其实还好,换汤不换药 本文只讲基本操作,足够让你愉快的打代码,想飞上天的自行百度,或找其他大神(友链) Update 6/20:由于写得太烂被学长爆踩了一顿 直接 ...

  2. JavaScript 域名学习及对象的继承实现

    1.定义命名空间 var Namespace = new Object();   Namespace.register = function(path){     var arr = path.spl ...

  3. Asp.net Core 系列之--3.领域、仓储、服务简单实现

    ChuanGoing 2019-11-11  距离上篇近两个月时间,一方面时因为其他事情耽搁,另一方面也是之前准备不足,关于领域驱动有几个地方没有想通透,也就没有继续码字.目前网络包括园子里大多领域驱 ...

  4. 「Luogu 3792」由乃与大母神原型和偶像崇拜

    更好的阅读体验 Portal Portal1: Luogu Description 给你一个序列\(a\) 每次两个操作: 修改\(x\)位置的值为\(y\): 查询区间\([l, r]\)是否可以重 ...

  5. 你知道MySQL中的主从延迟吗?

    前言 在一个MySQL主备关系中,每个备库接受主库的binlog并执行. 正常情况下,只要主库执行更新生成所有的binlog,都可以传到备库并被正常的执行,这样备库就能够达到跟主库一样的状态,这就是最 ...

  6. javascript采用Broadway实现安卓视频自动播放的方法(这种坑比较多 不建议使用)

    javascript采用Broadway实现安卓视频自动播放的方法Broadway 是一个 H.264 解码器, 比jsmpge清晰度要高 使用 Emscripten 工具从 Android 的 H. ...

  7. go中的数据结构字典-map

    1. map的使用 golang中的map是一种数据类型,将键与值绑定到一起,底层是用哈希表实现的,可以快速的通过键找到对应的值. 类型表示:map[keyType][valueType] key一定 ...

  8. spring 是如何注入对象的和bean 创建过程分析

    文章目录: beanFactory 及 bean 生命周期起步 BeanFactory refresh 全过程 BeanFactoryPostProcessor 和 BeanPostProcessor ...

  9. [.NET] 常用的reusable library

    1. NAudio NAudio is an open source .NET audio and MIDI library, containing dozens of useful audio re ...

  10. nyoj 349 (poj 1094) (拓扑排序)

    Sorting It All Out 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 An ascending sorted sequence of distinct ...