§0.1怎么才能实现网络?

网络的设计

首先,了解了什么是通信网之后,我们就需要去了解。这个东西是怎么实现的?前人们如何将这个概念从概念变成现实。

设想一下,我怎么去实现?

少侠,你要面对的问题

        准备动手参与网络方面的事情,我们要考虑我们需要什么?

  • 我个人考虑的第一件事就是连接的问题。网络之中的连接服务是什么样的?如果让你规划连接服务,你认为连接服务是什么样的?庆幸的是现实中已经给了我们启示。
  • 我们有了连接之后,传输的数据是怎样的?我们如何使得网络变得可靠?
  • 网络可靠了之后,就像是路有了,路标也有了,但是堵车了怎么办?我如何保证我的安全?
  • 我们为数据包在网络世界里传输修了路(建立了连接),并且使得数据包们的通行变得可靠。看似我们已经构建出来了网络。但是随着时代的进步,网络是一成不变的吗?我们如何让网络能随着技术的进步而进步?

        前人在这里建立了两种连接服务:面向连接的服务以及无连接的服务。

解决连接问题

无连接的服务

什么是无连接的服务呢?无连接的服务参考了邮政系统。A给B写一封信,会封上信封,信封上会有详细的收信人联系方式,同时收信人并不需要知道关与这封信的任何事情,甚至不知道这封信已经发出。整个工作过程只有A在工作就行了,B无需在线。收到信之后才会根据信的内容进行工作。每封信都由邮政系统的节点选择路由,并且这封信的路由与前后的信没有直接关系。

无连接的服务调用时:两个实体之间不需要一条建立好的连接;不需要两方同时活跃;即用即发,十分方便;传输服务不可靠

现在给出无连接服务的描述:每个报文都携带完整的地址,每个报文都由中间节点进行选择路由。 同时根据中间节点的操作,又详细分了两类:1、中间节点收到完整的报文之后,才会将报文转发出去——存储转发交换;2、中间节点在接受完毕之前就将报文发往下一个节点——直通式交换。

无连接服务的种类:

  1. 数据报服务:举个例子,我群发垃圾邮件。垃圾邮件又极高的概率会被正确送到目的收信者手中。如果没有送到,我也并不关心,也不会因为个别没有送到的邮件有什么损失。
    描述一下:发送数据时并不建立连接,直接发送报文,接收方并不会给发送方任何形式的回复。

  2. 有确认的数据报服务:在数据报服务的基础上,如果说我想要连接变得可靠,那么我就会增加一个回执功能。就像很多大学学生会一样,发完消息之后总是带一句收到请回复。如果你回复了确认,我就知道了你收到了。你一直不回复,超过了我的等待耐心,我就认为你没收到,再给你发一次消息。

  3. 请求应答服务:所谓请求应答服务就是,接收方顺道回复一下你的消息。并不会专门的回复一句“收到”。比如说,A给B发信息:今天下雨了吗? B回复说:今天没下雨。 这样A看到了B说今天没下雨,A也就知道了,B肯定是收到了那一句今天下雨了吗的问句。、

面向连接的服务

面向连接的服务其实就是参考电话系统创建而成的,你想给对方信息,你就得拿起手机,给对方拨号,经过嘀嘀嘀几声之后,对方接听了。你们说完了话,挂机。这个连接就结束了。像是一个管道,有一个专门的链路连接双方。发送者从管道这一端把数据放入队列(参考数据结构里的队列),在接收方,是先进先出的一个情况。顺序基本不会发送变化。

面向连接的服务:有建立连接、数据传输(维持连接)、释放连接的三个阶段;数据交换之前必须有建立连接;数据交换结束后必须终止连接;传输数据时是按顺序的

面向连接的服务的种类:

  1. 可靠的报文流服务:首先肯定是要建立连接。建立连接的详细情况这里不叙述。放在后文中进行描述。在报文流中,网络保持对报文边界的跟踪。一个进程向一条连接写了1024字节,稍后又写了另外1024字节。那么接收方共读了2048字节。对于报文流,接收方将得到两个报文,每个报文1024字节。

  2. 可靠的字节流服务:不对报文边界进行识别,在上述的情况下,接收方把2048字节作为一个整体,并不进行区分。

  3. 接下来就是较为奇特的一个情况。面向连接的无连接服务:IP语音。 IP语音在使用时,会建立一套虚电路,逻辑上来看它确实是有连接的。但是在调用传输层的协议时,选择的是无连接发UDP协议。因为TCP协议导致的延迟在实时服务中是不可接受的。IP语音时,我可以部分字听不清,但是我无法接受对方的延迟。(注:类似的还有无连接的面向连接:http协议,改协议虽然建立连接,但是每次只处理一个请求,处理完毕后释放连接,有新的请求再建立新的连接)

解决可靠性的问题

在网络可靠性问题中,我们又需要面对两个问题。一方面是如何使得我发送出去的数据能“送过去”,另一方面是送过去的数据得符合我们的期望,不能出现错误。这就是网络中需要面对是两个部分,路由和检错/纠错

路由问题

这里就简单的介绍下路由如何分类:

静态路由:静态路由就是人为的在路由器里为数据包指路,比如,你要去10.0.3.0/24网段,我明确的告诉你,你走路由器的13号口出去就可以了。或者你看下一跳(这里不需要理解)。按照我告诉你的吓一跳走。

这种方案乍一看感觉很正常啊,但是因为人为指定了路由,导致失去了灵活性,如果你的指的路堵塞了,去罗马你只指定了一条路,恰好这条路在修路或者发生了交通事故。那只能很不幸的告诉你,你去不了罗马了。同时对于大型网络,几乎不可能有人能够面面俱到的考虑的每一条路如何走。

动态路由:相对于静态路由,动态路由就方便很多。由网络设备运行特定的网络协议或者软件。软件根据网络设备收集到的信息自行筛选出去往某个网段的路径(不一定是最优的,有的软件认为网络能通就行了)

这种方案也有好有坏,如果是你硬件设备很强大,运行的软件很牛逼,算法很完美。那么网络会很流畅。但是这就会涉及到成本问题。同时软件进行指路,在一定情况下对于小型网络来说,网络的管理人员失去了对路径的把控。遇事之前得先看看路由表再做抉择。

检错纠错问题

连接建立了,就相当于路已经修好了。有了路由指路,网络上的行人们(数据报)就能够根据路由指路的信息前往自己的目的地了。但是此时你不得不想到另一件事,你怎么知道A发给B的数据包是不是正确的?显然如果有些数据包发生了变化,对于用户来说是不可接受的。比如:A给B发了一句:我们结婚吧。数据包过去的路上发生了损坏,恰好变成了:我们分手吧。岂不大大的罪过?

怎么避免这种错误呢?我们由两种想法要么有检错方案——错误发生时我能知道发生了错误。要么有纠错方案——错误发生时,我能精准的推测出它原本正确的情况是什么。

检错方案:在数据包里面添加特定的字符,这些字符是根据数据包里面的数据严格计算出来的。如果说数据包发出去后数据发生了变化那么接收方根据数据包的里数据计算出来的冗余字符和发送发一开始添加的冗余字符是不一样的。

当然,有极小极小到可以忽略不计的概率,冗余字符和数据字段都错了,恰恰好错误后的数据和错误后的冗余字符是匹配的。这种情况小的几乎不可能发生。建议遇到这种情况的人立刻买彩票,瞬间能实现财富自由。

纠错方案:有一些更加强大的冗余码不仅能够检错,而且其是穿插放在数据字段中间的,因此它也实现了对冗余码的检错。根据这种强大的冗余码的结果。我们可以根据多个冗余码确定某一位在出错之前的情况。进而实现纠错。

网络中堵车了怎么办?

这个其实学术点说起来就是资源的分配问题。

首先我们考虑,如何资源分配,最优解显然是动态的分配。如果说固定的给某个人固定的资源,那么某人不需要的时候,资源岂不是浪费了?这就推出了网络中的统计复用的概念。

另一个情况就是如果A太能扯了,说的太多,B反应没那么快,听不懂了怎么办?A一次性短时间和B说了10件事,B并不一定能记住并很好的处理这10件事。网络中需要调度算法,使得B不会被A一次说的那么多事情淹没,使得B能跟A说一声,我反应不过来了。

对于搞要求的应用程序来说,又需要提供服务质量这个参数。这个参数去调和那些一起竞争资源的程序或者是主机。

最最后面,堵车了还是小事,安全是最最重要的。当然因为网络中跑的是数据,所以我们只要对数据进行加密就好了。

网络的发展演进——分而治之的思想

技术在进步,注定了网络不能是一个整体。因为技术的进步有很多种。比如一种新的编码方式的发明、一种算法的优化、一种新的网络传输介质的发现。他们并不是同时发生的,我们又不能因为一个技术的变化,为了使用新技术,就将以前建立起来的网络推到重建。我们的想法其实就是能够使用新的技术,只用新技术替换网络中对应的旧技术。

因为有着这种思想,我们需要对网络进行分而治之。我们可以把网络按照我们的需要,分成多个层次,每个层次仅仅实现自己的功能,接受下层的服务但是并不关心下层是如何实现的,对上层负责。这样新的技术出现了之后我们只在特定的层进行修改。不必每次有技术革新,就把网络进行推到重建。于是乎我们的前人建立了网络模型。将网络的复杂功能肢解,逐步将功能分散到各个层去。

主流的有两种模型,OSI模型和TCP/IP模型

OSI模型:
在这里插入图片描述

OSI模型就和上面一样是7层。现在是基础阶段。大家认得这个货就行了。知道有个东西叫做OSI七层模型即可

TCP/IP模型
在这里插入图片描述
这个货就是TCP/IP模型。

根据之前的情况我们了解了,通信需要有一定的规范。这也在层与层(同级)之间的通信体现了出来,于是协议横空出世。规范了同级的层与层如何通信。那么同时上层与下层之间如何通信呢?另一种操作出现了。服务。服务用于上层和下层之间的通信。

服务和协议的关系

服务是垂直起作用的,定义了我这一层为上层提供了什么服务,向上层提供一组原语(操作)。比如参考下现实中的服务,比如清洁服务、接送孩子上学服务等。这些服务其实只是说明了我能干什么,我能代表我的客户执行哪些操作,但是我不会告诉你我是如何实现这些操作的。比如你看到清洁服务,但是你不知道我是如何打扫卫生的。服务仅仅存在于服务的提供者和服务的用户两者之间。相应的网络里也是一样的,低层是服务的提供者,高层是服务的用户。服务仅仅与两层之间的接口有关

与服务不一样的东西是协议,协议其作用在同等的层次。其实就是一组规则,定义了对等实体的交换帧、数据包、数据报文的格式和意义。同样可以参考现实中的规则:中文规定了这个字怎么写,这句话怎么说。使用中文的都是同一级别的生物。比如都是人。各位没见过人和细胞进行说话的吧?A同学和B同学脸上的某一个细胞说中文,问:你还能活多久?网络中也是一样的,使用协议的是网络中的对等实体。对等的实体又通过协议实现他们的服务定义的操作。比如心肌细胞通过细胞之间的交流,完成了相对于人来说心脏的功能。对等的实体们可以自由的改变协议,但是对等实体们不能改变服务的定义。即:实现心脏的功能,我可以使用心肌细胞组成的肉做的心脏,也可以再来个心脏起搏器。我实现心脏跳动进而对全身供血的方式有多种。但是我提供的服务只有一种——心脏跳动,为全身供血。网络中服务和协议其实是完全分离开的。

over。完成了上述的要求,网络就差不多快建成了。但是我们如何实现那些要求呢?会在以后一一描述。
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值