三、网络层
1.介绍
发送端:封装成数据报。网络层是接收数据报向上交互,解封装形成分段,向上交互。路由器要检查所有IP数据报的报头。
1.功能:
1.转发forwarding:路由器本地操作,路由器把数据报packet从入口在合适的出口输出。
2.路由routing:确定源节点到目的节点的路径。
转发表:路由器查询首部的值,寻找对应接口(取决于协议)
2.虚电路和数据报网络
数据报datagram网络:网络层的无连接的服务。收到数据报找到合适出口,不管是否能准确到达。
虚电路virtual circuit网络:面向连接的网络。都要在这条路径上传送。
1.虚电路VC
有明确的性能保证。路径上的所有元素都要行动起来。需要建立连接,每一次结束连接都需要拆除。每个数据报都要携带VC标识(虚电路标识)。路径上所有路由器要保持状态(随时提供服务)。**链路、路由器的资源(带宽、缓存)**可以被分配给虚电路。
组成:源节点到目的节点的路径。虚电路号,经过路由器后虚电路号是改变的。路径上的路由器有相应的表项记录。
每条链路的虚电路号不同。
新的虚电路号从表中来。
转发表:
信令signaling报文,指示虚电路的建立和启动、终止。
信令协议:交换信令报文,按照一定规则。
过程:首先发起呼叫,到达接收节点,会有进来的呼叫,同意就接收呼叫(反向),然后数据传输。
![](https://gitee.com/cai-bohan/cloudimage/raw/master/img/VCSP.png)
2.数据报网络
不需要建立连接。路由器不用维持状态。靠数据报的报头的目的主机的IP地址。即使在相同的节点和目的节点之间传输数据报也可能不在同一条路径。
过程:发送方发送数据,目的节点收数据。
转发表:
最长前缀匹配原则:通过一部分地址匹配就行。选匹配越多的接口。
数据报传送:路由器IP地址不记录,路由器根据IP地址网络号进行选择。
3.对比
虚电路 | 数据报 | |
---|---|---|
思路 | 可靠通信通过网络保证 | 可靠通信通过用户主机保证 |
连接的建立 | 必需 | 不需要 |
终点地址 | 建立连接使用,每个分组使用虚电路号 | 每个分组都有终点的完整地址 |
分组的转发 | 同一虚电路分组按照同一路由转发 | 独立选择路由转发 |
节点出故障 | 不能工作 | 故障节点可能丢失分组,路由会发生变化 |
分组的顺序 | 发送顺序 | 不一定 |
端到端的差错处理和流量控制 | 网络、主机负责 | 主机负责 |
3.路由器内部结构
1.结构
两个主要功能:路由(路由表,路由算法OSPF、路由协议RIP、BGP)、转发(来的链路转发到出去的链路)
选路处理器routing processor(CPU):执行选路协议
2.输入端口功能实现
线路端接(物理层):比特接收
数据链路层处理:协议,解封装
网络层:查找转发表,转发,排队
分布式decentralized的交换:
每个输入端口都有一个转发表的拷贝,给定了数据报的目的地址后,使用输入端口内存中的转发表进行查找输出端口。
目标:高于线路速度转发(处理速度>来的速度),否则处理速度低于输入速度形成排队。
排队形成线路前部阻塞HOL blocking:队列最前边排队的数据报阻止后边数据报的正常转发。
![](https://gitee.com/cai-bohan/cloudimage/raw/master/img/%5D0AJ%7DWPN@PPX%5D1R2%7D%5B3%5DH9.png)
3.交换结构
三种交换结构:经内存交换memory(CPU直接控制,提取目的地址),经总线交换bus(总线共享,一次只能有一个分组)、纵横制crossbar的(经互联网络进行交换)可以同时有数据
a.内存交换
传统计算机直接将数据放入内存,受内存性能(带宽)限制,经过两次系统总线。
b.总线交换
输入到输出经过一条总线。
总线竞争bus contention:受限于总线的处理能力
c.互联网络交换
可以同时进行多个数据报转发。
可以克服总线带宽限制。有多种网络形式。
高级的设计:数据报分割成固定长度的信源cell。
4.输出端口
与输入正好相反。
![](https://gitee.com/cai-bohan/cloudimage/raw/master/img/otp.png)
缓存buffering:到达速率超过传输速率。
调度策略scheduling discipline:从排队的数据报里选出数据报(先来先服、设定优先级、加权)
排队情形:
![](https://gitee.com/cai-bohan/cloudimage/raw/master/img/swcfbr.png)
输出端口缓存造成延迟,溢出造成丢失。
4.IP:Internet Protocol
1.网际协议IP
为数据报提供路由的功能(找路)。每个数据报都要有源节点和目的节点的地址。IP协议节点能确定数据报到节点或被转发出去。如果是应该转发出去,就会确定从哪个输出端口转发出去。IP协议不提供可靠性,不保证一定能到目的节点。
IP协议负责数据报分片,当数据报在网络总传送时,不能超过最大限制(取决于当前链路)。数据报太大需要分片,每个分片必须是合法数据报(包含节点地址、让接收方按正确顺序重组等相关信息)。重组信息能标记处数据报长度、偏移量等。
网络层:
路由协议选路。IP协议制定编址规则、制定数据报格式、分组处理(转发、收下、丢弃)。ICMP因特网控制报文进行出错上报、路由器信令下达。转发表是为了选合适的转发端口。
TCP/IP协议栈的协议分层:
ARP:地址解析协议,IP转MAC RARP:MAC转IP
IGMP组管理协议。
2.IPv4
点分10进制。32比特。
数据报结构:
![](https://gitee.com/cai-bohan/cloudimage/raw/master/img/IPpacket.png)
ver:版本号4bit。options可有可没有(写的内容不同长度不同,可以加时间戳)。服务类型(特殊数据报的处理方式)
第二行:数据报分片重组。16bit标识字段indentifier(同一个数据包的片段有同一个标识字段)。标志字段flag(是否为最后一个分段)。片偏移fragment offset(谁在前谁在后)。
TTL最大允许跳数(寻找目的节点的上限,每经过一个节点-1,0就结束)。
upper layer向上交互上层对应哪个协议。checksum校验和。
IPv6:128bits,1111:1111:1111:1111:1111:0000:0000:0000
3.IP数据报分片和重组
链路有最大传输单元MTU,受限于链路本身。大IP数据报要分成小IP数据报(进入小MTU链路)。不同链路层协议MTU也不一样。大数据报可以被分成几个数据报(报头都需要保留)。拆分在网络的任何一个地点都行。但是重组只能在终端进行。IP头部的比特要能让目的节点重组(能重组、顺序)。
![](https://gitee.com/cai-bohan/cloudimage/raw/master/img/IPFR.png)
分片例子:
20字节报头+数据部分。ID标识(与原数据报相同)。fragflat标志位,不是1就是0。1:不是最后一个分片。0:最后一个分片。偏移量offset 8字节一块,=数据报长度/8。
![](https://gitee.com/cai-bohan/cloudimage/raw/master/img/road.png)
4.IP地址介绍:
接口:连接主机与路由器的链路。主机一般只有一个接口。
![](https://gitee.com/cai-bohan/cloudimage/raw/master/img/ipint.png)
1.分类:
![](https://gitee.com/cai-bohan/cloudimage/raw/master/img/IPCLASS.png)
![](https://gitee.com/cai-bohan/cloudimage/raw/master/img/IPCLASS2.png)
A类地址:大量主机的大型网络
D类地址:多波和组波
E类地址:留着以后用
全0:网络地址 全1:广播地址,全要接收
2.IP地址使用范围:
![](https://gitee.com/cai-bohan/cloudimage/raw/master/img/IPRANGE.png)
3.分配
每个接口都有一个IP地址,全球机构负责IP地址分配,网络信息中心InterNIC分配。只分配网段。
4.特性
是分级的结构。管理机构只需要分配网络号。路由器只根据目的主机连接的网络号进行分组。
IP地址标志一个主机和一条链路的接口。连接到两个网络,有两个网络号的主机,就是多归属主机multihomed host。路由器至少连到两个网络上。
转发器或网桥连接的局域网仍是一个网络(网络号相同)。
局域网小,地理可以大。
![](https://gitee.com/cai-bohan/cloudimage/raw/master/img/IPITN.png)
同一局域网主机或路由器IP地址的网络号必须一致。
路由器至少两个以上接口(两个以上IP地址),每个接口都有不同网络号的IP地址。
两个路由器相连的位置可分IP也可以不分。·
5.IP层(网络层)转发分组流程
按照主机所在的网络地址制作路由表。
![](https://gitee.com/cai-bohan/cloudimage/raw/master/img/IPFZ.png)
路由表最主要包含目的网络地址、下一跳地址。
根据目的网络地址确定下一跳路由器,一定能找到所在目的网络的路由器,最后一个路由器进行主机交互。
1.特定主机路由
为特定的目的主机指明路径。
2.默认路由
当网络对外连接少时使用。主机连接在小网络上,只有一个路由器,合适。
不太清楚目的主机时使用默认路由。
![](https://gitee.com/cai-bohan/cloudimage/raw/master/img/DFRT.png)
路由器收到数据后,向下解析到数据链路层,网络接口软件使用ARP将下一跳IP地址转换成硬件地址,并将硬件地址放到MAC帧的首部,然后找下一跳路由器。
6.路由器分组转发算法
1.拿到数据报,提取目的主机IP地址,根据子网掩码等信息,得到目的网络地址N1
2.查看是否与路由器直接相连(同一网络),就直接交付给目的主机。不在同一网络,间接交付。
3.首先路由器判断是否是特定主机路由,是就直接跳到对应路由,不是就进行常规路由查找,如果还没有就默认路由,如果没有默认路由,就报告转发分组出错。
7.IP子网寻址
三层IP地址:网络ID、子网ID、主机ID
未划分子网(广播的形式):
![](https://gitee.com/cai-bohan/cloudimage/raw/master/img/WHFZW.png)
划分为3个子网:
![](https://gitee.com/cai-bohan/cloudimage/raw/master/img/3subnet.png)
8.子网
IP分为2部分:子网部分,主机部分
由一些设备和物理链路互联构成的网络。
一个子网里所有子网IP地址都一样。
同一个子网里的设备可以不经过路由器的转发通信。
确定子网的方法:找到所有设备的接口,断开与主机和路由器的连接,形成分离的网络孤岛,每一个网络孤岛就是一个子网。
6个子网(分配IP就算,即使只有一条链路):
1.子网和子网掩码
确定借多少作为子网ID(从主机id中)。
子网掩码:区分IP地址里有多少bit作为网络部分和主机部分。1对应网络部分,0对应主机部分。可以隐藏网络内部细节。
一般用IP地址和子网掩码进行与操作得到子网ID。
想要确定两个IP地址是否在同一个网段时,就需要通过与运算得到网络地址进行比较。
![](https://gitee.com/cai-bohan/cloudimage/raw/master/img/ANDNET.png)
默认子网掩码:
路由器通过子网掩码获取目的子网路径,与相邻路由器交换信息时必须将自己的子网掩码告诉对方。
路由表中除了目的地址还要保存子网掩码。连接几个子网就有几个目的地址和子网掩码。
例:
不同子网掩码得出相同的网络地址,但效果不同。
![](https://gitee.com/cai-bohan/cloudimage/raw/master/img/LTSE.png)
2.子网划分subnetting
网络部分为1,主机部分为0。
子网掩码通常也写成点分十进制(同IP)。
缩写:直接写数字就行(多少个1):/ + 1的数量
步骤:1.借多少比特(借至少2bit,留至少2bit)。取决于设备类型不同(A/B/C:8/16/24)。主机bit = 借Bit Borrow+留Bit Left。需要x子网:2BB-2>=x。需要x主机:2BL-2>=x
**例:**C类IP是210.93.45.0,要求至少有5个子网,需要借多少位?主机有多少bit?
解:主机HB一共8bit。HB=BB+BL。23-2=6subnet。剩余数BL = 8-3=5。所以我们有25-2=30台主机。
2.子网掩码是什么。确定子网掩码的方法就是把借的bit对应值加上。
子网掩码就是把对应子网数变成1。
3.幻数magic number:快速确定子网中各个网络的子网地址。用256-最后一个非0八位组Last Non-Zero Octet。(256-224)然后对于后面网络地址直接再加上一个自己就行。
表:
例:假设C类地址210.93.45.0(同上例),子网:210.93.45.32、210.93.45.64、210.93.45.96。其中主机数只有30个,对于.32来说,32和63都不能作为主机,所以主机只能从33~62一共30台。
例:假设一个网络192.168.0.0/24(C类,24个1的掩码),需要两个子网。于是就变成/26.子网192.168.0.64、192.168.0.128.
4.逻辑与操作:设备用来计算每个IP地址的子网标识符subnet identifier。如果子网标识符与当地IP地址一致,就直接送给当地子网。如果与当地不同,就发送给默认网关或当地路由器传到远程remote子网。
例:目的地址是128.30.33.138。首先将目的IP与本地子网掩码进行与操作,得出的结果是128.30.33.128与本地网络地址128.30.33.0不同。所以将IP地址分给路由器R1,路由器逐项查找路由表。第一项不匹配、第二项匹配。于是通过接口1送到子网2.
![](https://gitee.com/cai-bohan/cloudimage/raw/master/img/IPRTFIND.png)
算法:1.从分组首部提取目的IP地址D
2.用本地网络的子网掩码与D进行“与”,看是否与相应的网络地址匹配。匹配就直接交付,不匹配就间接交付,执行3
3.若路由表中有目的地址为D的特定主机路由,就将分组传送给指明的下一跳路由器。否则执行4
4.对路由表中每一行子网掩码和D进行“与”,如果匹配就传送给指定路由器,否则执行5
5.若路由表中有一个默认路由,就讲分组传给默认路由,否则执行6
6.报告转发分组出错
5.减少slowing IP地址损耗depletion
1.可变长度子网掩码VLSM
![](https://gitee.com/cai-bohan/cloudimage/raw/master/img/CVSLM.png)
就是在子网的基础上再进行划分。
2.无类别的域间路由CIDR
地址的网络部分是任意长度的
格式:a.b.c.d/x,x就是所有网络位数
IP地址获取:1.系统管理员硬编码 2.动态主机配置协议DHCP:从服务器中获取闲置IP
DCHP获取:发现discover(找服务器)、提供offer(提供IP地址)、请求request、确认ACK
IP地址子网部分获取:通过ISP分的地址块(网段),地址不能随意
![](https://gitee.com/cai-bohan/cloudimage/raw/master/img/getip.png)
路由聚合route aggregation:可能一个CIDR中有多种地址的集合,可以有很多个,也称为构成超网(supernetting)
CIDR的掩码:/x就是x个1。
其他形式:10.0.0.0/10 = 10/10(低位连续的0可以省略)
网络前缀:00001010 00*,前面是网络地址
前缀长度不超过23位的CIDR地址都包含多个C类地址
C类地址合起来就构成超网
![](https://gitee.com/cai-bohan/cloudimage/raw/master/img/CIDAEXP.png)
层次编址允许高效的信息通告:使用单个网络前缀通告多个网络的能力称为地址聚合routing aggregation或路由聚合或路由摘要。
![](https://gitee.com/cai-bohan/cloudimage/raw/master/img/hara.png)
转发分组时会选择最长前缀匹配法则
例:目的地址:206.0.71.128,路由表中有206.0.68.0/22、206.0.71.128/25。
对于第一个项目掩码就是M = 11111111 11111111 11111100 00000000,与操作后匹配。同理第二个也匹配。但第二个的掩码1的数量更长,所以选择第二个。
ICNAA:分配IP地址、管理DNS(域名系统)、分配域名、解决域名冲突的争端
3.网络地址转换NAT
![](https://gitee.com/cai-bohan/cloudimage/raw/master/img/NIA.png)
本地网络所有主机对外只使用一个IP地址。
好处:不需要从ISP获取地址。可以改变设备的地址。更换ISP而不需要改变本地网络设备地址。
实现:
对于发出去的数据报:
替换replace。源IP地址和端口号要转换成新的IP地址和端口号。服务器应答的时候用替换的IP地址和新端口号作为目的地址。
记忆remember:网络地址转发表,记录每一对(原IP地址、端口号)和(IP、端口号)的替换关系
对于进来的数据:
替换replace:将新的IP和新端口号用表来替换源IP和源端口
![](https://gitee.com/cai-bohan/cloudimage/raw/master/img/NIA2.png)
16bit端口号:要对主机的子网进行区分
6.ICMP因特网控制报文协议
通常实现网络层信息的交互,应用于主机和路由器间。
报错,请求问答的回显。
ICMP报文:类型字段type、编码字段code、引起ICMP报文首次生成的IP数据报首部和前8个字节的数据部分
![](https://gitee.com/cai-bohan/cloudimage/raw/master/img/ICMPTC.png)
格式:
实用程序:
1.Ping:测试两个主机是否连通,使用了回送请求和回送应答。使用于应用层。
2.traceroute:查找路径。发送一系列UDP分段,TTL从1开始递增,每跳一次-1。当第n个数据报到达第n个路由器,不会转发,但是要给源节点发送一个ICMP报文,类型字段11,编码字段0。报文中还要包含路由器和IP地址。当ICMP到达时,源节点计算出RTT。发三次,计算平均值。
终止条件:1.UDP到达目的主机 2.返回ICMP报文,’主机不可达‘(type3,code3) 3.源节点得到ICMP
7.路由算法
找到满足最低代价的路径
1.分类
1.掌握全局信息Global:所有路由器都要了解全网拓扑和链路代价信息(基于链路状态)。
分布式信息Decentralized:知道物理相连的路由器和相连的链路代价。邻居之间会互相交换信息。基于距离向量的算法。
2.静态:路由器信息改变的慢
动态:改变的非常频繁,动态改变,路由器信息进行周期性更新(时间触发、事件触发)。
2.Dijkstra算法
所有节点都知道网络拓扑和链路代价,通过链路状态广播,所有信息都是一样的。
每个节点要计算从自身到其他所有节点的最低代价路径,将信息存放于转发表中。
迭代:第k次迭代,知道第k个节点的最短路径。
c(x,y):从x到y的链路代价,如果不直连,就为∞
D(v):从源节点到目的节点v的当前代价值
p(v):从源节点到v的当前得到最低代价路径上,v的前一个节点
N’:最低代价路径的集合
![](https://gitee.com/cai-bohan/cloudimage/raw/master/img/dijexp.png)
可能出现震荡:对C:2e+1>1所以选择换路,B同理
![](https://gitee.com/cai-bohan/cloudimage/raw/master/img/OSC.png)
3.距离向量算法 distance vector
贝尔曼福特方程:
dx(y)从x到y的最低代价路径的代价
dx(y) = min( c(x,v) + dv(y) )
Dx(y):从x到y最低代价的估计值(不是最终值)
Dx:距离向量,包含x到N中所有节点的代价估计值
节点要保存邻居向量的距离向量。
邻居节点主动告诉距离向量值,节点获知后更新自己的距离向量。
![](https://gitee.com/cai-bohan/cloudimage/raw/master/img/BFEXP.png)
迭代iterative是异步的asynchronous,引起迭代原因:链路代价改变,邻居节点发来更新值
分布式Distributed:每个节点在DV更改时要通知邻居
当最小成本不变时,不需要发送给别的节点
![](https://gitee.com/cai-bohan/cloudimage/raw/master/img/DV5.png)
![](https://gitee.com/cai-bohan/cloudimage/raw/master/img/DVEXP.png)
毒性逆转Poissoned reverse:解决一部分环路。z如果走z-y-x的路径,就要告诉y,到x的代价是无穷大。
好消息走得快,坏消息走得慢(计数到无穷问题,迭代次数太多)
4.对比
报文复杂性:LS:n个节点E条链路,O(nE) DV:只在邻节点交换
收敛速度:LS:O(n2)复杂性,可能出现震荡 DV:时间不断变化(选路的环路,计数到无穷)
健壮性(路由器故障):LS:广播错误的链路代价,节点只计算自己的转发表,一定程度的健壮性
DV:通告错误,错误会在网络中传播
8.层次路由Hierarchical Routing
网络规模scale:2亿主机,信息太多
管理自治administrative autonomy:每个网络都自己控制内部路由
AS自治系统:由一组路由器构成(在相同管理控制下)
相同AS内部使用的是同一个路由协议(自治系统内部的路由协议)。
网关gateway路由器:与另外一个自治系统有直连链路的路由器,主要向外部目的地进行转发分组
![](https://gitee.com/cai-bohan/cloudimage/raw/master/img/intases.png)
转发表由AS内部和AS间的算法进行配置完成
如果要向外发送,需要转发给网关路由器,需要了解通过AS2和AS3能到哪,在AS1内部可以了解怎么到AS2和3。
1d的配置:假设自治系统知道x可以通过AS3到达,自治系统间的路由协议告诉所有路由,路由器1d确定接口I转发出去的路径就是代价最低的路径。然后将(x,I)存到表项里。
如何在多个AS中选择:假设AS1知道x子网AS2、3都能到,1d确定哪个网关能转发到AS2/3,通过内部路由算法获取内部信息找到各个网关的最低代价路径,然后用热土豆路由计算最低代价的网关。
热土豆hot potato路由:发给最近的网关路由器
![](https://gitee.com/cai-bohan/cloudimage/raw/master/img/CAMAEXP.png)
9.层次路由中路由算法
内部网关协议IGP:RIP、OSPF、IGRP内部网关路由协议
1.RIP路由信息协议
UDP作为传输协议
基于距离向量的算法。向量限制是15跳。链路代价为1(可以修改)。
![](https://gitee.com/cai-bohan/cloudimage/raw/master/img/RIP.png)
RIP通告:包含距离向量(邻居节点之间交换,每30s交换一次,通过响应报文)
每个通告最多包含25个目的子网的信息
![](https://gitee.com/cai-bohan/cloudimage/raw/master/img/RIPEXP.png)
链路失效和恢复:通告超过3min未收到,会将对应所有表项都变成16(失效),邻居轮流更新(不变就不发),失效信息很快传播(避免无限循环)。
路由表处理:受应用层进程管理,通告放到UDP分段中传送,在标准套接字上传输。
![](https://gitee.com/cai-bohan/cloudimage/raw/master/img/RIPTB.png)
RIP格式:
路由部分由若干个路由信息组成。地址族标识符字段用来标志所使用的地址协议。路由标记填入自治系统的号码。
2.OSPF开放最短路径优先
承载于IP协议之上
链路状态的路由算法
洪泛:
收到更新之后进行确认
优点:安全(所有OSPF报文都是经过鉴别的,被信任的路由器才能发送,阻止恶意入侵),允许使用多条相同代价路径,综合支持单波和多波的路由MOSPF
![](https://gitee.com/cai-bohan/cloudimage/raw/master/img/OSPF.png)
两层:本地local区域、主干backbone区域
区域边界Area border路由器:汇总到本区域各网络的距离,通告给其余的区域边界路由器,
主干backbone路由器:主干区域里运行路由协议
边界boundary路由器:连接其他自治系统的路由器
3.BGP边界网关路由协议
TCP协议传输
从邻居获得可达性信息,分发给自治系统内部的路由器,找到到达各个子网的最好路径。
允许每个子网通告自身的存在。
BGP的basics:两个相互的网关构成,半永久的TCP连接(没有物理连线直连)来交换路由信息。
承诺会转发所有前缀。
![](https://gitee.com/cai-bohan/cloudimage/raw/master/img/BGP.png)
路由器获得新的可达性信息,就会在转发表中保存。
BGP消息类型:面向连接(TCP)的。
打开open(在你和对方打开TCP连接,并认证发送方)、更新update(通告新的路径,撤销旧路径信息,就是修改成具体的路径)、保持活跃keepalive(没有信息时保持连接活跃,打开信息应答)、通知notification(告诉对方信息出错,关闭连接)。
BGP路由策略:
x不想转发B和C之间的流量。x不会向C通告B的路径。A向B通告AW,B向x通告BAW,B不会向C通告BAW(B没有收入、B只想为它的客户提供服务)
比较:
策略:AS间:控制流量如何传输和谁经过自己传输 AS内部:自己管自己不需要什么策略
范围:层次路由节省路由表大小,减少信息更新产生的流量
性能:内部:集中考虑性能 间:满足策略,性能次要
10.广播Broadcast和多播Multicast路由
多播组:使用1个IP数据地址接收IP数据报的所有主机
特点:使用组地址(D类多播地址,只能当目的地址,不能是原地址),有永久组地址(由IANA指派),允许动态组成员(随时加入和退出),可以同时存在多个多播组里,靠硬件实现多播
IGMP网际组管理协议:使路由器知道多播组成员的信息
连接在局域网上的多播路由器需要和其他种路由器交互,涉及多播路由选择协议。
IGMP本地使用范围:让多播路由器知道本局域网中是否有主机要参加或退出多播组