网络层

十年热恋 提交于 2019-12-15 18:10:38

学习自Andrew《计算机网络》和Wiki在这里插入图片描述

网络层

数据链路层帧从线路一边传送到另一边

网络层将源端数据包一路送到接收端

  1. 网络层要求知道网络拓扑结构(所有路由器和链路的集合),然后选择适当的路径
  2. 同样还要仔细的选择路由器,避免某些线路和路由器负载过重,而有些线路和路由器空闲
  3. 处理处于不同网络间的通信

向上提供的两种服务两种服务

① 数据报网络:无连接服务的实现

在这里插入图片描述
这个例子消息长度为最大数据包长度的4倍,所以分为4个数据包,然后用某种点到点的协议(比如PPP)讲这些数据包依次发送给路由器A。从此ISP把传输任务接过来了。每一台路由都有一个内部表指明目标地址和出境线路(B或C)
一开始数据包123到达后经过A验证校验和之后,被路由器暂时保存起来。然后根据A上的表,每个数据包被放在一个新帧中,并且被转发到通往C的出境线路中,然后E,F…
然后4不同可能因为A了解到ACE流量堵塞,因而更新路由表,所以数据包4被暂时存储后转发给B

② 虚电路网络:面向连接服务的实现

为了建立一个虚电路网络,当建立一个连接时,从源机器到目标机器之间的一条路径就被当做这个连接的一部分确定下来,并保存在这些路由器的表中,所以在面向连接服务中,每个数据包包含一个连接标识符,指明了它属于哪一条虚电路
在这里插入图片描述

主机H1已经与H2建立了连接1,如图比如A路由表表示了连接标识符为1的数据包来自H1,那么将被发送到路由器C,并且赋予连接标识符1;类似的C路由表表示了连接标识符为1的数据包来自A,那么将被发送到路由器E,并且赋予连接标识符1

那么主机H3也要与H2建立连接,我们需要做的就是分配一个不同的连接标识符来区分


第一点:网络层要求知道网络拓扑结构(所有路由器和链路的集合),然后选择适当的路径,这里我们就需要路由算法

一丶 路由算法

路由:对使用哪一条路径做出决策,负责生产和更新路由表,这正是路由算法发挥作用的地方
转发:当一个数据包到达采取什么动作,查看该数据包所对应的出境线路

如果采用数据报网络:每一个数据报都要可能要重新选择路径
如果使用虚电路网络:只有当需要建立一条新的虚电路时,才需要做路由决策

非适应性算法:不根据测量或者估计的流量和拓扑结构,调整路由决策
自适应算法:根据测量或者估计的流量和拓扑结构,调整路由决策,所以对于路由选择很清楚的情况非常有用,比如虚电路

从所有的源到一个指定目标的最优路径集合构成了一颗以目标为根节点的树,我们成为汇集树,所有的路由算法就是找到这样一棵树
在这里插入图片描述

动态路由

距离矢量

工作流程

在这里插入图片描述

这算法算法中每个路由器维护一张表(如第五个表New routing table for j):到达目标路由器的距离(比如延迟)估计与出境线路
每隔Tms,然后每个路由器根据邻居发来的矢量测量得到的邻居的延迟(最底下的JA delay,JI delay…)

我们尝试对J维护的表进行修改(第五个表),依据就是邻居发来的矢量测量得到的邻居的延迟更新。比如重新计算对路由器G的新路径
J->A->G:AG+JA delay=18+8=26
J-> I ->G:IG+JI delay=31+10=41
J->H->G:HG+JH delay=6+12=18 √
J->K->G:KG+JK delay=31+6=37
所以更新为18

对于其余所有目标地址进行上述操作,得到New routing table for j

这里问题:
对于度量单位是“跳”的话,测得到邻居跳数肯定是最短距离,然后执行上面的步骤一定正确
但是这里度量单位是“延迟”的话,测得到邻居延迟一定是最短距离吗?难道没有经过其他结点再到该邻居的延迟比直接到邻居的延迟短吗?假如有,那上面的执行步骤也就错了,假如没有那上面的执行步骤也就对了

无穷计数问题
对于此算法好消息传播十分快(a),坏消息传播十分慢(b)
(a):A启动(这里假设大家一起交换矢量),假设最长路径跳数为那么N轮之后,每个路由器都能更新完成

(b):比如A瘫痪了,在第一轮交换中B发现A断了,但是C却告诉B“我有一条通向A长度为2的路径”,B就高兴的采纳了他的就是3
第二轮C发现他旁边的邻居都是3,于是他就改变为4,如此反复,最后BCDE都趋于无穷大
在这里插入图片描述

链路状态路由

工作流程
  1. 发现邻居
  2. 设置链路成本(延迟,跳数…)
  3. 构造LSP(链路状态包)
    在这里插入图片描述
  4. 分发LSP(正常情况)
    基本思路使用翻红法将LSP分发给所有路由器
    LSP中Seq为了控制泛洪规模,Seq随着每一个新数据包发来而逐一递增。路由器记录它所看到的所有(源路由器,Seq)对到列表中。当一个新的LSP到达,路由器检查列表对应路由器Seq,
    1. 如果大于原Seq,记录并转发给除入境之外的所有其他线路。
    2. 如果等于原Seq,重发包丢弃
    3. 如果小于原Seq,过时包拒收
小问题
①序号绕回:32位Seq,137年才绕回
②路由器崩溃后重新发送从0开始,会被其他路由器当重复包丢弃
③如果Seq被破坏,比如变很大了,那么后续的很多都会被丢弃
上述问题的解决都是:设置Age,每秒-1,为0就丢弃
  1. 计算新路由

附:层次路由

网络规模的增大,路由器的路由表越来越大,小号路由器内存等等,所以我们使用层次路由对路由表瘦身
在这里插入图片描述

本区域不变,但其他区域变为一个整体
比如(b)为不分层的,而(c)是分层之后的

代价:有一部分不是最优的


二丶拥塞控制

在这里插入图片描述

拥塞控制途径

在这里插入图片描述


三丶网络互联

上面所说的都是假设网络都是同一个网络,假如不同的网络用不同的协议我们怎么办?路由器+IP 实现,如下图

在这里插入图片描述

IP协议

IPv4头部分

在这里插入图片描述

IP地址

IPv4的一个明显特征就是它的32位地址,Internet的每台主机和路由器都有IP地址(IP地址其实只想的是网络接口),可以用在Source address 和 Destimate address字段

IP地址分为网络部分和主机部分
在这里插入图片描述

前缀
一块连续的IP地址空间,比如同一个网络的所有主机,其地址网络值是相同的

按照惯例,网络地址的书写格式为前缀IP地址+斜杠+网络部分长度比如128.208.0.0/24
还有就是配合子网掩码,只要将IP地址和子网掩码AND操作,就可以提取该IP地址的网络部分

IP地址使用

子网

分割一个大型网络得到一系列子网,如
一所大学将128.208.0.0/16需要划分几片,1/2给计算机,1/4给电机,1/8给艺术系,发现划分不均匀,但每片必须对其一边将较低的任何位用作地址的主机部分
计算机 /17,电机/18,艺术系/19,所以分配如下
在这里插入图片描述
当数据包到达时,路由器查看该数据包的目标地址,并检查它属于哪个子网(路由器把数据包的目标地址与每个子网的掩码进行AND操作,看结果是否对应某个前缀)

可以看出外部对于子网的划分是不可见的,因为再分配一个新网络也只要更新校园内部路由器上的所有子网掩码

无类域间路由(CIDR)

路由聚合
把多个小地址的前缀地址合并成一个大前缀的地址块,由此而产生的较大前缀地址称为超网

一个组织(比如大学)中位于网络边缘的路由器必须为每个子集的子网建立一个表项,该表项告诉路由器使用那条线路到达该子网

有了路由聚合,IP地址可包含大小不等的前缀。同样一个IP地址,一台路由器把它当作/22的一部分对待,而另一台路由器把它当作更大的/20部分对待(因为每个路由器有相应的前缀信息),这个设计和子网划分一起协同工作,统称为无类间域路由

有一块194.24.0.0开始8192个地址,被划分为下图所示

在这里插入图片描述

London路由器将三个大学+未分配地址合成一个聚合前缀:194.24.0.0/19
在这里插入图片描述
New York 路由器加入没有聚合前缀的话需要记住三个大学的前缀,但现在有了聚合前缀 New York 只需要记住一个

分类寻址

为了帮助更好理解CIDR如此有用,我们可以介绍以前的分类寻址的地址设计方案,1993年以前,IP地址被划分成A,B,C,D,E五类,还有几个特殊地址
在这里插入图片描述
在这里插入图片描述
这个与CIDR不同的是,地址块大小是固定的,但是ABCDE划分方式并不合理,为了处理这个问题,引入子网这个概念,以便在组织内部灵活的分配地址块。后来有引入了CIDR来减小全局路由表的大小(聚合路由)。今天IP地址的ABC类的标志位不再使用。

网络地址转换(NAT)

IP地址匮乏问题已经发生,对于整个Internet而言,长期的解决方案是迁移IPv6(128位地址)。但这个迁移正在缓慢的进行着,可能需要很多年。为了解决现在的IP地址匮乏问题,需要一个速战速决的方案,就是网络地址转换(NAT)

NAT基本思想
ISP为每个家庭或每个公司分配一个(或者少量)IP地址对和外部Internet通信,而在内部每个计算机有唯一的IP地址来通信,可供内部使用的IP如下,所有不允许这些含这些地址的数据包在Internet上
在这里插入图片描述
当数据包离开客户网络,发给其他ISP,它必须执行一个地址转换,把唯一的内部IP地址转换为共享的公共IP地址

在这里插入图片描述


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!