网络层
1.网络层的主要功能
主要功能就是:将源端数据包一路送到接收方。
无连接服务的实现:数据报子网
对于无连接服务来说每个数据包都独立地被注入到网络中,并且每个数据包独立路由,不需要建立任何设置(X.25, ATM)
- 每个数据报携带目的地址
-
每个报文独立寻径
面向连接服务的实现:虚电路子网
面向连接的服务,需要一个虚电路网络,虚电路的目的是避免为每个数据包选择一条新路径,当建立一个连接时,从源机器到目标机器之间的一条路径就被当做这个连接的一部分被确定下来。(IP)
- 在连接建立的时候选路(Select a path)
- 每个分组携带一个连接号(connection-number)
-
当通信完成后,连接拆除
2.理解路由算法原理
- 静态路由选择算法
Dijkstra
flooding - 动态路由选择算法
距离矢量路由(DV):RIP
链路状态路由(LS): OSPF
最优化原则:如果一个路由器 J 处在路由器I到路由器K的最优路径上,那么,从路由器J到路由器K的最优路径也在同样的这条路径上。
沉落树( sink tree )、汇集树:从所有的源到一个给定的目的的最优路径形成的一棵树,树根是目的结点。汇集树不必是唯一的
什么时候使用静态/动态路由?
静态路由:管理员手工配置的路由
适合小型的、静态的网络,开销小
动态路由:由路由选择协议动态地建立、更新和维护的路由
适合大型的、经常变动的网络,需要维护开销
减少了网络管理员的负担
2.1Dijkstra
2.2距离矢量路由(DV)
距离矢量路由选择:每个路由器维护一张表,表中列出了当前已知的到每个目标的最佳距离,以及为了到达那个目标,应该从哪个目标转发的线路(端口)。这些表通过邻居之间相互交换信息而不断更新,最终每个路由器都了解到达每个目的地的最佳链路。
DV的工作原理
- 每个路由器(节点)维护两个向量,Di和Si ,分别表示从该路由器到所有其它路由器的距离及相应的下一跳(next hop)
- 在邻居路由器之间交换路由信息(矢量)
- 每个路由器(节点)根据收到的矢量信息,更新自己的路由表
- di1:从节点i到节点1的度量(代价)
- si1 :沿着从节点i到节点1的最优路径上的下一跳
- n :网络中的节点数
当邻居间交换了矢量信息之后:
- 更新距离: dij= Min[dix+ dxj] ( x ∈A ) 【A—节点i的邻居集合】
- 更新下一跳: Sij= x
- 例子:
一个网络拓扑如下,某个时刻,路由器C接收到三个邻居发过来的矢量如下:
A B C D E F
From router B:(5, 0, 8, 12, 6, 2)
From router D:(16, 12, 6, 0, 9, 10)
From router E:(7,6, 3, 9, 0, 4)
现在,路由器C到 B、 D 和 E 的代价分别是 6、3 和 5,试回答路由器C更新后的路由表
解答:
分析:通过路由器 B、 D 和 E进行转发的话,路由器C的矢量分别是:
Via router B:( 11, 6, 14, 18, 12 , 8)
Via router D: ( 19, 15, 9, 3, 12, 13)
Via router E: ( 12 , 11, 8, 14, 5, 9)
所以,路由器C更新后的路由表如下:
( 11, 6, 0, 3, 5, 8)
( B, B, -, D, E, B)
D-V算法的特点
优点
- 简单
缺点
- 交换的信息太大了
路由信息传播慢,可能导致路径信息不一致
收敛慢,度量计数到无穷
不适合大型的网络
2.2.1 RIP 路由选择信息协议
RIP的主要特点
- RIP是一种典型的D-V路由选择协议
- RIP采用了跳数(hop)作为量度(metric)
- 当量度超过 15 跳,目的被认为不可达
- 默认地,每30秒钟交换一次矢量/向量信息(全部路由表)
RIP的主要缺陷
- 不能到达量度超过15跳的目标网络
- RIP的度量(代价)是跳数,即沿途经过的路由器的个数,有时候,并不合理,不能真正反映网络的状况
- 实际运行中,会遇到度量计数到无穷、收敛慢等问题
DV路由可能遇到的问题
问题表现
- 路由环路(routing loop)
- 计数到无穷问题(Count toinfinite)
- 收敛慢的问题(slowConvergence)
原因 - 相信错误的路由信息导致
解决方法: - 定义路径度量(代价)的最大值
- 提高收敛速度:
水平分割
毒性逆转
抑制定时器
触发更新
2.3 链路状态路由算法(LS)及LS的实例OSPF
链路状态路由的主要思想包括如下5个部分:
1.发现它的邻居节点们,了解它们的网络地址
2.设置到它的每个邻居的成本度量
3.构造一个分组,包含它所了解到的所有信息
4.发送这个分组给所有其他的路由器
5.计算到每个路由器的最短路径
LS的工作原理:
1. 发现邻居节点
当一个路由器启动的时候,在每个点到点的线路发送一个特别的HELLO分组
收到HELLO分组的路由器应该回送一个应答,应答中有它自己的名字
(当两个或更多的路由器被一个LAN连接起来,这个LAN被看作一个节点)
2. 设置链路成本
为了决定线路的开销,路由器发送一个特别的** ECHO 分组,另一端立刻回送一个应答
通过测量往返时间(round-trip time)** ,发送路由器可以获得一个合理的延迟估计值
3. 构造链路状态分组
链路状态分组构造后被发送给其他的路由器,分组中包含这些信息:
- 发送方的标识(ID of the sender)
- 序列号(sequence number )
- 年龄(age )
- 邻居列表(list of neighbors )
- 到邻居的成本/量度(delay to eachneighbor )
4. 发布链路状态分组
基本算法:
每个分组都包含一个序列号,序列号随着新分组产生而递增
路由器记录下他看见的所有 (源路由器,序列号)对
当一个的新的分组到达时,路由器根据它的记录:
如果该分组是新的,就被从除了来线路外的所有其他线路转发出去 ( flooding,泛洪)
如果是重复分组,即被丢弃(喜新厌旧)
如果该分组的序列号比对应的源路由器发送的到过此地的分组的最大序列号还小,则该分组被当作过时的信息而被拒
5. 计算新的路由路径
一旦一个路由器获得了全部的链路状态分组就可以构造出全网络图来了(Graph)
现在,可以使用 最短路径算法来计算路由器之间的最短路径了
计算结果是一棵树,会形成相应的路由,安装在路由表中,引导数据分组的转发
发布链路状态分组基本算法遇到的问题:
- 序列号回转,引起新老分组识别混淆
解决办法:使用 32-bit 的序列号,即使每秒产生一个分组,也需要137年才发生号码回转 - 如果一台路由器崩溃,那么他将丢失自己的序列号记录,如果他再从0开始,新分组将被当作旧分组被拒绝
- 如果一个序列号被破坏了,比如发送方的序列号是4,但是由于产生了1位错误,序列号被看作65540,那么,序列号为 5 – 65540的分组都被当作过时分组而被拒绝
解决上述的路由器崩溃和序列号损坏的方法是:每个分组的序列号之后是年龄(age) ,并且每秒钟年龄减1
当年龄为零 ( zero )时,来自该路由器的信息被丢弃
通常地,每隔一段时间,比如10秒钟,一个新分组就会到来,所以,只有路由器down机才可能导致超时(或者,连续6个间隔因为丢失,没有收到新的分组)
L-S 路由算法的特点
优点:
每个路由器的认识一致
收敛快
适合在大型网络里使用缺点:
每个路由器需要较大的存储空间
计算负担很大
2.3.1 OSPF开放的路径优先(Open shortest path first)
OSPF开放的路径优先(Open shortest path first)
- 使用图(graph)来表述真实的网络
每个路由器/Lan都是一个节点
测量代价/量度( metric) - 计算最短路径
OSPF分组(packet)类型:
OSPF的运行步骤:
OSPF状态:
3 其他路由
3.1 无类别域间路由—CIDR
- 缓解了地址枯竭的趋势;控制甚至缩减了路由表的开销
- 分配IP地址的时候不再以类别来分,而是按照可变长的地址块来分配
- 路由表必须扩展,增加一个 32-bit 的子网掩码
- 每个路由表有一个三元组 (IP address, subnet mask, outgoing line)
- 当一个分组到来到的时候
分组中的目标IP地址(Destination IP)被检查
目标IP和子网掩码进行与操作,获得目标网络地址,以查找路由表.
如果路由表中有多个表项匹配 (这些表项有不同的子网掩码) ,使用子网掩码最长的那个表项
3.2 掌握NAT/PAT基本原理
NAT:net address translate NAT
私有IP地址和公有IP地址之间的转换。PAT:port address translate(超载)
将多个私有IP地址影射到同一个公有IP地址的不同端口
NAT--一个IP地址耗尽的快速修补方案
- 内部网络使用私人地址,当内网需要和外网通信的时候,私人地址转换成合法的global 的地址
- 由NAT转换器(盒子)完成这种转换
NAT转换器能够转换并且维护一个地址转换表,以便回来的分组找到它的去处 - 当回来的分组到达NAT转换器的时候,它查找地址转换表(以源端口作索引),获得目标机的私人地址,并转换地之后发往目标机
NAT 带来的问题
- NAT违背了IP的结构模型 –每个IP地址唯一地标识了一台机器
- NAT将互联网改变成了“面向连接”的网络,NAT转换器维护着连接的状态,一旦它崩溃,连接也没有了
- NAT违背了最基本的协议分层原则
- 如果传输层不是采用TCP或UDP,而是采用了其它的协议,NAT将不再工作
- 有些应用会在payload中插入IP地址,然后接收方会提取出该IP地址并使用,但是NAT转换器对此一无所知,导致该类应用不再有效
- NAT让一个IP地址可以承载61,440(65536-4096)个私人地址(超载,PAT)
NAT/PAT的评价:
- 优点
节省了公有IP地址;
提供了内部网访问外网的灵活性;
有一定的保密性。 - 缺点
影响了部分协议和应用的通信;
增加了网络延时;
NAT转换设备的性能可能成为网络的瓶颈;
影响了路由追踪工具的使用。
3.3 理解ICMP及其应用
用来报告意外的事件或测试互联网
3.3.1 ping的工作原理
使用ping命令(即调用ping过程)时,将向目的站点发送一个ICMP回声请求报文(包括一些任选的数据),
如目的站点接收到该报文,必须向源站点发回一个ICMP回声应答报文,源站点收到应答报文(且其中的任选数据与所发送的相同),则认为目的站点是可达的,否则为不可达。
3.3.2 tracert命令
- tracert过程是通过ICMP数据报超时报文来得到一张途经的路由器列表
- 源主机向目的主机发一个IP报文,并置TTL为1,到达第一个路由器时,TTL减1,为0,则该路由器回发一个ICMP数据报超时报文,源主机取出路由器的IP地址即为途经的第一个路由端口地址
- 接着源主机再向目的主机发第二个IP报文,并置TTL为2,然后再发第三个、第四个IP数据报,……直至到达目的主机
- 但互联网的运行环境状态是动态的,每次路径的选择有可能不一致,所以,只有在相对较稳定(相对变化缓慢)的网络中,tracert才有意义
3.4 地址解析协议(ARP/RARP)
ARP (地址解析协议): IP 地址-> MAC 地址
RARP (逆向地址解析协议):MAC 地址 -> IP 地址
ARP的工作原理:
为了让ARP的工作更加高效,下面是几种优化措施:
- 缓存 ARP 结果
- 在ARP请求中包括源机的 IP-to-MAC 地址的映射
- 每台机器在启动的时候,广播它的IP-MAC地址对
缺省网关(代理 ARP)
- 当源设备需要的目的地址与自己不在同一个网络时,如果源不知道目的MAC地址,它必须使用路由器的服务使它的数据达到目的,当路由器在这种方式下使用时,称为缺省网关。
- 缺省网关是与源设备所处的网段相连的路由器接口上的IP地址
ARP表:
- IP地址到MAC地址的映射表,储存在存储器(RAM)中,自动维护。(掉电消失)
- 为了减少ARP请求的次数,每个设备拥有自己的ARP表,包括路由器。
自动维护ARP表
- 通过广播ARP请求中的源设备信息添加更新表;
- 利用自己的ARP请求之应答信息来添加、更新表;
- 删除超过一定时限的信息(有时戳)
3.5 IP地址的分配方式
IP地址的分配方式:
- 静态分配
- 动态分配
IP地址的动态分配方式(RARP\Boot\pDHCP)
DHCP:动态主机配置协议
- 可以灵活分配IP地址,节约IP地址的使用
- 使一台主机迅速并动态地获取一个IP地址
- 通过DHCP获取的 IP是租来的,可能会过期
4 拥塞控制
拥塞:当一个子网或子网的一部分出现太多分组的时候,网络的性能急剧下降,这就是拥塞(Congestion )
导致拥塞的因素(拥塞根源:负载 > 资源)
- 输入流量速度大于输出线路的容量
- 慢速的处理器也可能引起拥塞,如线路容量充足,但处理器来不及处理
- 线路容量和处理器能力需要平衡
4.1 拥塞控制的通用原则
怎么知道拥塞了? --拥塞量度
- 因为缺乏缓存空间而丢弃的分组百分比
- 平均队列长度
- 超时和重传的分组数
- 平均分组延迟
- 分组延迟的标准方差(standard deviation)
上述这些度量,数值越大表示拥塞的程度越重
4.2 怎样解决拥塞问题
- 增加资源
在某些点之间使用更多的通道增加带宽(比如:广深)
把流量分散到多条路径
启用空闲或备份的路由器 - 降低负载
拒绝为某些用户提供服务(比如:春节车票提价,限行)
给某些用户的服务降低等级(比如:黄金周旅游)
让用户更有预见性地安排他们的需求(比如:年假制)
4.3 拥塞控制算法:
4.3.1. 流量感知路由
在计算路由时考虑链路负载,把热点地区的流量转移出去。最直接的方法是吧链路权重设置成一个链路带宽、传输延迟、平均排队延迟的函数。
缺点:可能导致路由摇摆
4.3.2. 准入控制:
- 防止拥塞进一步恶化和加剧
- 基本思想:一旦出现拥塞信号,则不再创建任何虚电路,直到问题得到解决
准入控制可以与流量感知相结合,允许建立新的虚电路,但是仔细选择线路,绕开问题区域
4.3.3. 流量调节
拥堵路由器通告源机发送慢下来(抑制包)
4.3.4. 负载丢弃/载荷脱落
- 这是处理拥塞的最极端的方法
- 当路由器收到的分组超载了,一些分组会被丢掉
- 丢掉哪些分组呢?
- 随机丢弃(random)
- 丢弃新到达的 (葡萄酒策略,适合文件传输类)
- 丢弃早到达的分组 (牛奶策略,适合多媒体类)
- 丢弃不太重要的(less important )分组(需要发送方在它们的分组中标明优先级)
4.3.5. 随机早期检测RED(防患于未然)
- 当情况变得恶化无可救药之前就开始丢弃分组
- 为了确定什么时候开始丢弃分组,路由器维护着最近的队列平均长度
- 当某条线上的队列平均长度超过了某阈值时,该线路被认定是拥塞的,可以采取相应的措施
- 告诉源机关于拥塞的情况有两种可能
- 发送抑制分组
- 仅仅丢弃,不做任何报告
4.4 抖动控制
分组到达时间的变化量(标准方差 standard deviation)叫做抖动(jitter)
如何做抖动控制(续)
- 通过计算出沿途每一跳的期望传输时间,就可以控制抖动。
- 当一个分组到达路由器,路由器检查这个分组,看它是来晚了还是来早了
- 如果分组来早了,那么它可能多停留一些时间,以便回到预定的时间点上
- 如果分组来晚了,路由器应该尽可能快地将他转发出去
- 当几个分组都要使用同一根输出线路转发出去,哪一个分组优先呢?
- 路由器总是让偏离预定时间最远的那个分组优先转发
5 流量整形
- 调节数据传输的平均速率(和突发数据流)
算法
- 漏桶( leaky bucket)
- 令牌桶( token bucket)
- 其它:资源预留、准入控制、分组调度等
可以减少拥塞
5.1 漏桶算法
算法效果:
主机内用户进程产生的分组流往往是一个不稳定的流,漏桶可以让它输出到网络时变成一个稳定流,抹平了突发尖峰,极大地减少了发生拥塞的机会
漏桶的缺点
- 当漏桶满了之后,数据将被丢弃
- 不能大量地突发数据
改进:令牌桶
5.2 令牌桶算法
算法描述:
- 当大量数据突发的时候,令牌桶算法允许输出加快到某种程度
- 令牌桶拥有令牌(tokens),且以每△T秒产生一个令牌的速度往桶中输入令牌
- 一个分组要发送的时候,它必要从桶中取出和获取到一个令牌
- 令牌桶算法允许累积令牌,但最多可以累积n(令牌桶的容量)个令牌
和漏桶算法相比:
- 令牌桶允许突发,但是最大突发受制于令牌桶容量的限制
- 当桶满的时候,令牌桶算法丢掉的是令牌(不是分组)
6 互联网路由
- 互联网路由类似于单个子网内部的路由,但是,前者比后者更加复杂一些
两级路由算法
- 每个网络内部采用内部网关协议( IGP, interior gateway protocol )
- 网络之间使用外部网关协议( BGP, exterior gateway protocol )
互联网上的每个网络都是独立于所有其他的网络,所以每个网络通常称作一个自治系统(Autonomous System ,AS)
互联网路由和网络内部路由的差别是:
互联网路由可能需要跨越国际边界,不同的法律可能会介入进来
IP协议
IP地址:网络号和主机号
- 唯一的
- 每个主机至少有一个
- 表示方法:点分十进制表示
IP的任务是提供一种尽力传送( Best-Efforts )的方法,将数据报从源传送到目的
IP地址的分类:
掌握IPv4的保留地址空间
网络地址:主机部分全为“0”的 IP 地址
广播地址:主机部分全为“1”的 IP 地址
例子:
- 分析地址172.16.20.200
分析:
B类地址
子网部分:172.16
主机部分:20.200
网络地址:172.16.0.0
广播地址:172.16.255.255
保留的IP地址:
- 32位全为0,0.0.0.0
这个主机、这个网络
Cisco路由器指定的默认路由 - 32位全为1,255.255.255.255 Flood Broadcast(泛洪,本地)(受限的广播,路由器并不转发该地址的数据包)
- 主机部分全为0,如172.16.0.0 网络地址
- 主机部分全为1,如172.16.255.255 广播地址
- 127.0.0.0 Lookback Network
- 127.0.0.1 Lookback test
- 169.254.x.x 非正常地址,例如DHCP未正常开启时候会被分配
掌握子网及子网划分
- 局域网不断增长,越来越难于管理,必须将它分割成子网
- 一个网络被分隔成几个部分(子网),但是在外界看来,该网络仍被看成一个整体 (体现在路由表例上,就是外部的路由器只对应一条路由)
- 这也允许不同的子网在一个组织内部连接起来
子网掩码
- 路由器使用子网掩码决定分组往哪个子网转发
- 子网掩码可用点分十进制表示( 1表示网络位, 0表示主机位),也可用“ /网络位数+子网位数” 表示
255.255.255.224
202.10.23.102/27 - 路由器采用“ AND ”操作(目的IP和子网掩码),得到目的网络地址
- 使用这种机制,路由器不必记录全部主机的IP地址,缩减了路由器的规模
子网规划
- 将大网络分割成小网络
- 划分子网实际上建立了一个由网络、子网和主机构成的三级层次结构,从而降低了路由器的表空间
- 构建子网是通过从网络地址的主机部分借位来进行
- 子网规划将导致IP地址空间的损失
确定可用主机数量的公式 2n-2
借位规则:
从主机域的高位开始借位;
主机域至少保留 2 位。
可变长子网掩码 (VLSM)
- VLSM允许将网络空间分为大小不等的部分。
- 子网掩码将依据为特定子网所借用的位数而变化。
- 先对网络划分子网,然后再将子网进一步划分子网。
- 根据需要重复此过程,以创建不同大小的子网
理解IP分组格式
IP分组格式:
所以IP数据报报头的最小长度为20个字节
固定部分(前20字节):
(8)生存时间 占8位,生存时间字段常用的的英文缩写是TTL(Time To Live),表明是数据报在网络中的寿命。由发出数据报的源点设置这个字段。其目的是防止无法交付的数据报无限制地在 因特网 中兜圈子,因而白白消耗网络资源。最初的设计是以秒作为TTL的单位。每经过一个 路由器 时,就把TTL减去数据报在路由器消耗掉的一段时间。若数据报在路由器消耗的时间小于1秒,就把TTL值减1。当TTL值为0时,就丢弃这个数据报。后来把TTL字段的功能改为“跳数限制”(但名称不变)。路由器在转发数据报之前就把TTL值减1.若TTL值减少到零,就丢弃这个数据报,不再转发。因此,现在TTL的单位不再是秒,而是跳数。TTL的意义是指明数据报在网络中至多可经过多少个路由器。显然,数据报在网络上经过的路由器的最大数值是255.若把TTL的初始值设为1,就表示这个数据报只能在本局域网中传送。
(9)用户协议 占8位,协议字段指出此数据报携带的数据是使用何种协议,以便使目的主机的IP层知道应将数据部分上交给哪个处理过程。
(10)首部检验和 占16位。这个字段只检验数据报的首部,但不包括数据部分。这是因为数据报每经过一个路由器,路由器都要重新计算一下首部检验和(一些字段,如生存时间、标志、片偏移等都可能发生变化)。不检验数据部分可减少计算的工作量。
(11)源地址 占32位。
(12)目的地址 占32位。
IPV6
IPv6地址首选格式:冒分十六进制
在一个ipv6地址中,双冒号只能出现一次
斜杠128代表 128位固定不变,“/8”代表高位8位固定不变
链路本地地址
把48位的mac地址写成二进制,中间切开,填充16位。(FF:FE)