网络-网络层

Posted by Young Ken on 2017-09-27

网络层

数据链路层是如何将数据发送到另一端,但是网络要进行很多跳(hop)中间路由,因此网络层才数据传输的最底层。

网络层的设计问题

存储转发数据包交换

网络中最重要的组件是网络服务提供商(ISP)设备和客户端设备。

提供给传输层的服务

同数据链路层一样的,他的职责也是给上层提供服务。

提供服务的目标:

  • 向上提供的服务应该独立于路由技术
  • 传输层的网络地址应该统一
  • 传输层不应知道路由信息

无连接服务的实现

什么是无连接服务,就是你发送的所有的包都是独立的,单独在网络中传输,数据包叫做数据报(datagram),对应的网络被称为数据报网络(datagram network)。相对的就是虚电路网络(virtual-cicuit network)就是对应的,子通讯之前要进行连接,比如电话。

现在我门想把进程P1的数据传输到P2中,现在我要发送一个数据,数据被分成了4个包,分别是1-4, 1-3选择了ACE的路线,到4的时候可能路由发现ACE比较堵塞,选择了A-B的路线。管理这些路由表并做出路由选择的算法被叫做路由算法

面向连接服务的实现

对应连接服务我们需要一个虚电路网络。

现在我们想JH3机器上的线程P3的数据传输到H2机器上的线程P2上,建立虚拟连接,ACEF。

路由算法

在大部分网络中,数据都是经过多跳(hop)才能到达目的地的,负责将一个入境数据包应该发送到哪条输出线路上的算法被叫做路由算法

路由和转发的区别在于路由是使用那一条路径做出决策而转发是一个动作。

路由算法大概分成两类:

  • 非自适应算法

不会根据当测量或者评估的流量和拓扑结构调整他的路由决策。路由线路在网络启动的时候就被下载好了的的方式叫做静态路由

  • 自适应算法

这个流弊了,会改变路由策略已便反应出拓扑关系和流量的变化。

优化原则

现在考虑网络拓扑结构和流量情况,最优化原则指的是把一个任务分成多个任务,每个任务是最优化的,结果才是。

最短路径算法

最短路径(shortest path)就是Dijkstra关于图的最短路径算法,这个不做更多的解释,但是路径的长度可能是距离,带宽,通讯成本等等因素和每个因素的权重决定的。

泛洪算法

泛洪就每个路由器把数据发给他链接的全部节点(除了入境包的那条线路),太疯了。这样一个数据包能到达世界上的每个角落,这样的算法有用吗?当然了,在战争的时候,一个地区的网络被毁掉,这个时候可能就有用了。

距离矢量算法

距离矢量路由每个路由维护一张表,这个表中记录着当前到达每个目的地的最佳路径,表通过和邻居路由通讯更改。

如果现在想把J发送到G,那么J知道到A的时间是8,A到G是18,J到G就是8+18,已经过I,K,H的时间都能知道,就能算出J到G的时间了。

无穷计算问题

整个网络最佳路径的寻找过程称为收敛。最短路径算法总是能找到正确的答案,但是有的时候非常慢。

A停机的时候,B没有接收到A的交换表,但是这个时候B知道C可以到达A,长度是2,这个时候B更新了B到A的长度是B到C的距离加上B到A的距离是3。第二次交换,C发现他的邻居到A的距离都是3,他更改成4,依次更新。

如正常情况下都会非常不错的,但是当其中一个路由停机的时候回引起无穷计算

链路状态路由

因为距离矢量算法有局限(无穷计算问题),有了链路状态路由算法

每个路由必须具备几个特点:

  • 发现邻居路由,了解网络地址
  • 设置每个邻居节点的距离和成本
  • 将这个包发送给其他路由,接收其他所有路由的信息包
  • 计算到其他路由的最短路径

#####发现邻居路由

当一个路由启动的时候会给每个链接的节点发送一个HELLO的包,当其他路由接收到这个包的时候回复一个自己是谁。

设置链路成本

链路成本和带宽成反比,也包括延时等。

构造链路状态包

接收到交换信息后,开始构造一个包含信息的数据包。数据包的内容包括发送方的标识,序号年龄等。还要就是每个路由器交换的延时。

数据包交换的时机有两种方式,一个是定时交换,另一个就是其中一个路由停机。

分发链路状态包

链路状态路由算法在于分发链路状态的数据包。所有路由必须快速并可靠的获得全部状态的数据包。最近简单的方法就是用泛洪模型。

层次路由

随着路由的增长,路由表的条数也在增长,增长的路由表跟加消耗内存和CPU。如果一个路由维护了通往全世界路由的表,可想而知,很难做到。这个的问题的解决方案就是把一个地区的路由分在一起,叫做簇,将簇分成组织区,将组织区叫做群。

拥塞控制算法

网络中存在太多的数据包导致数据包延时或者丢失,从而降低了传输性能,这样的情况叫做拥塞。也就是发送到的数据量大于带宽。

拥塞控制的途径

避免拥塞的方法有避免拥塞出现和一但发生拥塞可以做出反应。避免拥塞可以提高硬件的投入,避免数据从热点路段通过等。如果已经发生拥塞,那么就要降低负载,减少数据包的发送。最后就只有负载脱了

流量感知路由

这方案就是把堵塞的地区流量分流出去,比如现在A和B两条线路都可以到达目的地,拥堵程度是个选择这条线路的一个权重,A堵塞的时候,权重增加,选择了B,这个时候B有拥堵了,又选择A。

准入控制

这是被用在虚电路网络中的,防止阻塞的手段。从A到B中间有两条路,分别是a,b。当建立虚电路的时候,a线路阻塞,就在b线路上建。

流量调节

当发现网络拥挤的时候,路由发送抑制包(发给源路由,告诉网络拥挤数据包),告诉发送发送减少数据的发送量。

负载脱落

当上面的方法用尽了还是不能解决拥堵,那么路由的杀手锏是丢弃来不及处理的数据包,这样的方式叫做负载脱落

那么面临一个问题,丢弃那些数据包,对应文件传输,那么丢弃部分数据包只能带来更多的数据包从传,对应视频来说,新的数据包的价值更高。

网络互连

不用网络之间,存在很大的差异,每个网络的数据包尺寸大小不一样,时序也不同,等等问题导致不同网络之间很难链接。解决方案有两个,一个是制造一个设备,把一个网络包翻译成其他类型的包。第二个就是尝试在网络之间加一层,通过这个公共层来解决问题。第二种方案的典型代表是TCP和IP协议。

现在我们想把数据从802.11发送到MPLS上,我们知道这两个是完全不同的协议。802.11的源端接受来自传输层的数据,生成一个公共的网络头,也就是IP地址协议头。在传输到802.11的末端的时候,把802.11的头去掉,只留下IP的头。在MPLS接受到数据的时候,再在数据上添加一个MPLS头,当数据传输到MPLS的尾端的时候再去掉MPLS的头。