计算机网络你还懵逼吗?第二弹biubiubiu

第一次写这种总结性的博客,最后的结果还挺出乎我的预料的,短短几个小时,阅读量就达到了90+。我有点受宠若惊,感觉写的不是很好,最初只是抱着总结知识点的心态,便于提醒记忆力逐渐减退的我。哈哈哈哈,既然看到了你们热情的双手,那我便信心满满,接下来我将好好将计算机网络整理一下,力图做到结构化,融会贯通【/翻白眼】,总之,我会努力的。我像大家保证========第一遍肯定不会很清晰,我会持续修改,希望大家多多支持,用好的内容给大家、我自己一个改变,偶也!

当然咯,内容的来源有三处,计算机网络(潘爱民译)、互联网、我的大脑,债赤蟹蟹。

 

如何理解协议栈(层次栈)?//知乎体

为了降低网络设计的复杂性,将网络组织成一个分级栈,每一层都建立在下一层的基础上(例如数据链路层建立在网络层之上)。每一层的目的是向上一层提供特定的服务,而把如何实现这些服务的细节对上一层加以屏蔽。可以这样说,每一层都是一种虚拟机,他向上一层提供特定的服务。

这种分层设计是面向对象思想的一种体现,是一个特定的软件向其用户(上一层)提供服务,但是将内部状态和算法的细节隐蔽起来。

 

那么什么是协议呢?

         协议是指通信双方就如何进行通信的一种约定。一台机器上的第n层与另一台机器上的第n层进行对话,该对话中要遵循的规定和原则。一个很有趣的比喻,一个女生和一个男生第一次约会,这个女生选择伸出她的手,那么这个男生要对这个握手申请进行回应,他选择以什么样的礼仪握这个手,取决于她们约会的地点是街边公园,还是一次家庭的聚会……

         而只有对等体才可以这样通信(握手),对等体:不同机器上的构成相应层次的实体。

有了协议,我们就可以写主机的代码了,只要它遵循协议,使用下层接口,并为上一层提供接口服务。

 

一个好的层次设计需要考虑什么问题呢?

可靠性

检错、纠错机制。在需要被传的比特序列中添加冗余信息。

找到合适的路径。在源和目的地之间存在多条路径,有长有短,也有存在故障的链路,网络应该有一套算法,自动做出这种路径的决策,叫做路由。

网络演进

随着网络的扩大,不断有新的网络加进来。协议分层能够保证原有的机制不变,但是需要一种标识发送方和接收方的机制,在下层成为寻址,上层成为命名。如今,便验证了这个道理,尽管IPv4已经不满足当今的寻址命名需要,将32位IP地址改为128位,变化的命名机制,不变的是整个网络体系结构。

由于不同的网络可能规定了不同的消息长度,因此,分段机制也很重要。有些信道可能不能维持其原有的发送顺序,因此编号机制也很重要。

 

最后一个问题就是如何做好资源分配工作。

其中一种是统计复用的方法,根据主机的短期需求变化动态共享网络带宽,而不是给每个主机分配可能用也可能不会用的带宽。

还有一种是流量控制,要保持发送方不会用数据把慢速接收方淹没。这个问题常常需要一个反馈机制来支持。

当网络出现超载现象,网络没有能力传递所有的数据包这种现象成为拥塞。此时,需要适当地减少每台计算机网络带宽需求。

其次需要权衡的还有实时性、服务质量、保密性、完整性。

 

在讲TCP/UDP之前,这里先简要的整理一下面向连接与无连接服务的特点,有一个总体的感知。

面向连接的服务是按照电话系统建模的。当要和某人对话时,首先拿起电话机,拨通对方的号码,然后说话、挂机。对于网络而言,服务用户首先要建立一个连接,然后使用该连接传输数据。这种连接最形象的比喻是在通话之前,发送方把数据装入一个管道的一端,接收方在另一端取出数据,这个管道只能供这一对发送方接收方使用。这种服务数据包会顺序到达。

无连接服务是按照邮政系统建模的。每个报文都携带了完整的目标地址,报文在网络层被称为数据包。如果中间节点只能在收到报文的全部内容后才能转发给下一个节点,那么我们称这种处理方式为存储-转发交换。如果未收完便可以转发,这种处理方式叫做直通式交换。无连接的服务不能保证数据包到达的顺序正确。

 

什么是可靠的服务?

不丢失数据的服务,接收方向发送方确认收到的每个报文,因而发送方可以据此保证报文已经到达接收方。

 

最适合可靠的面向连接服务的一种典型是文件传输。可以传输报文序列和字节流。当发送报文序列时,接收方收到规定大小的报文,而字节流传输方式,无法感知发送的规格。而IP语音这种应用无法忍受确认机制引发的传输延迟,通常采用面向连接的不可靠服务。

也并不是所有的应用都要求面向连接的服务,比如垃圾邮件发送者只是希望报文以极高的概率到达接收方,不需要为了100%的到达目的地而付额外的费用。这种不可靠的无连接服务称为数据报服务。手机上的文本消息采用的是可靠的无连接服务也就是又确认的数据报服务。请求-应答服务也是一种无连接的服务。接收方以一个包含了请求结果的应答数据报作为反馈。

 

这里需要注意的是以太网并不能提供可靠的通信服务,许多可靠的服务都是在上层协议中处理的。对于那些一次性基于客户机-服务器类型的应用,及时交付比精确交付更重要的应用。

一个服务由一组原语正式说明,用户进程通过这些原语来访问该服务。源于告诉服务要执行的操作,或者将对等实体所执行的动作报告给用户。通常协议栈位于操作系统内,这些服务原语通常是一些系统调用,这些系统调用会陷入内核模式,然后在内核模式中取代操作系统来控制机器发送必要的数据包。

服务是指某一层向他上一层提供的一组原语操作,服务定义了该层准备代表其用户执行哪些操作,但是他不涉及如何实现这些操作。协议是一组规则,规定了同一层上对等实体之间交换数据包或者报文的格式和含义。服务涉及层与层之间的接口,协议涉及不同机器上对等实体之间发送数据包。

服务好比面向对象语言中的抽象数据类型或者对象,它定义了对象上可以执行的操作,但没有说明如何实现。协议与实现有关,是一些实际的代码。接口是一些参数传递,定义了如何访问这些操作。一个层如同一个对象,由一组操作供对象之外的过程调用。这些方法的语义定义了该对象所提供的服务的集合。方法的参数和结果构成了对象的接口。对象的内部代码是它的协议。

OSI参考模型是全称是ISO的开放系统互连参考模型。

物理层关注在一条通信信道上传输原始比特。这里的经典问题是包括用什么电子信号来表示1和0、一个bite持续多少纳秒,传输是否可以在两个方向上同时进行、初始连接如何建立、当双方结束之后如何撤销连接,网络连接器有多少针,以及每一针的用途。

数据链路层的主要任务是讲一个原始的传输设施变成一条没有漏检传输错误的线路。数据链路层完成这项任务的做法是将真实的错误掩盖起来,使得网络层看不到。为此发送方将输入的数据拆分成数据帧,然后顺序发送这些数据帧。一个数据帧通常为几百个或者几千个字节长。如果服务可靠,则接收方必须确认正确收到的每一帧,即给发送方发回一个确认帧。数据链路层(和大多数高层都存在)的另一个问题是如何避免一个快速发送方用数据淹没慢速接收方。所以需要流量调节机制,一边让发送方知道接收方何时可以接受更多的数据。广播式网络的数据链路层还有另一个问题:如何控制对共享信道的访问,数据链路层的一个特殊子层,就是专门处理这个问题的。

网络层

网络层的主要功能是控制子网的运行。一个关键问题是如何将数据包从源端路由到接收方。路由可以建立在静态表的基础上,这些表相当于网络内部的布线,而且很少会改变;或者可以自动更新,以此来避免网络中的鼓掌组件。路由也可以在每次会话开始时就确认下来,比如登录到一台远程机器上。如果有太多数据包同时出现在一个子网中,那么这些数据包彼此之间会相互阻碍,从而形成传输瓶颈。处理拥塞也是网络层的负载。更普遍的是网络所提供的服务质量(延迟、传输时间、抖动)。

当一个数据包必须从一个网络传输到另一个网络才能到达他的目的地时,可能会发生很多问题。比如,第二个网络所使用的寻址方案可能与第一个网络不通;第二个网络由于数据包太大无法接受,两个网络的协议不同等等,网络层要解决这些问题,从而允许异构网络相互连接成为互联网络。

在广播式网络中,路由问题比较简单,所以网络层汪汪比较单薄,甚至根本不存在。

传输层

传输层的基本功能是接收来自上一层数据,在必要时把这些数据分割成更小的单元,然后传递给网络层,并且确保这些数据单元正确地到达另一端。

传输层还决定了向最终网络用户提供哪种类型的服务。服务的类型在建立连接时就确定下来。传输层是真正的端到端的层,原机器上的一个程序利用报文头和控制信息与目标机器上的一个类似程序进行会话。在其下的每一层,每个协议涉及一台机器和他的直接邻居,可能中间有几个路由。1~3层是链式连接的,而第4~7层是端到端的。

会话层

会话层允许不同机器上的用户建立会话。会话层提供的服务有:对话控制(记录由谁来传递数据),令牌管理(禁止双方同时执行同一个关键操作),以及同步功能(在一个长传输过程中设置一些断点,以便在系统崩溃之后还能恢复到崩溃前的状态继续运行)。

表示层关注的是所传递信息的语法和语义。不同的计算机可能有不同的内部数据表示法,它们所交换的数据结构以一种抽象的方式定义,表示层管理这些抽象的数据结构,并允许定义和交换更高层的数据结构。

应用层包含了用户的各种协议。

TCP/IP参考模型

链路层:主机与传输线路之间的接口。链路完成什么功能才能满足无连接的网络层需求。

互联网层:允许主机将数据包注入任何网络,将IP分组投递到该去的地方。包括IP协议

传输层:包括TCP/UDP协议。

应用层:包括HTTP(超文本协议)、SMATP(电子邮件协议)、FTP(文件传输协议)、TELNET(虚拟终端协议)、DNS(域名系统)、RTP(语音电影实时媒体)。

 

OSI网络层同时支持面向连接和无连接的服务。TCP/IP网络层只支持无连接,但是传输层支持这两种通信模式。

posted @ 2016-08-23 20:48  vegetable_vegetable  阅读(821)  评论(5编辑  收藏  举报