基础命令
display
查看当前系统软件的版本
1 | display version |
?
命令补全和提示,输入?可以看到当前可用的命令集合
debugging
打开所有调试开关
1 | debugging |
关闭所有调试开关
1 | undo debugging |
数据链路层实验
冲突域
所有彼此竞争以太网带宽的机器在同一冲突域上
集线器工作在物理层,单纯转发信号,所有连在同一台集线器上的主机在同一个冲突域
交换机工作在链路层,冲突域只有一个端口,所以说交换机能隔离冲突域
广播域
广播报文会在同一网段上广播,路由器或者第三层交换机可以隔离广播域
MAC表和ARP表
ARP表
ARP表的作用
当一台主机要向同一链路层的另一台主机发送报文时,需要知道对方的mac地址作为目的mac地址
ARP表就是主机内部维护的表,记录着ip地址和mac地址的对应关系
ARP表的形成
当同一网段的主机A要发报文给B,A会:
1.查看自己的ARP表,看B的ip对应的是哪个mac地址
2.若查到,进6,否则进3
3.A发布ARP广播,询问谁的ip地址是B,并附带自己的ip地址,mac地址,进4
4.B收到广播,发送ARP回复报文单独回复A,告诉A自己的mac地址,进5
5.A收到报文,向自己的ARP表中添加表项,进6
6.A将目的mac地址填入报文,发送
查看arp表
arp -a
MAC表
MAC表是交换机内部的表,是决定交换机收到报文后向谁转发的
MAC表的作用
交换机收到报文后
1.查找MAC表里有没有该目的MAC地址的表项,有则进3,否则进2
2.交换机向除来源之外的所有口转发
3.查看该项是不是来源自己,若是,说明是来源内部的通信没必要转发;若不是,向该项转发
MAC表的学习
每当交换机收到报文,都会看自己的MAC表里有没有存储该来源端口和来源MAC地址之间的对应关系,若没存就存一个
每条记录都会有过期时间
查看mac表
dis mac-address
划分Vlan
三种不同属性的端口
Access连接不支持vlan技术的端口
Trunk连接支持vlan技术的端口
Hybrid是两种都可以连的
默认vlan:是指所有端口都带有的一个vlan属性,其值为pvid,当交换机从一个端口收到一个不带vlan标签的数据帧时,在内部将其看做带默认vlan标签(pvid)的数据帧
一般默认vlan是vlan1
untagged和tagged:端口的一个vlan属性,用来确定从该端口发出的数据帧带不带标签。Access是untagged,Trunk除了默认vlan之外所有都是是tagged,Hybrid可以对某个vlan指定它带不带tag
这里说的发出是指离开交换机,即使是交换机一个untagged口接收到报文,不出交换机给另外一个端口时,也是会打上tag的
转发帧
1.接到一个数据帧,检查
2.若带vlan标签,进3,不带进4
3.若带有的vlan标签和本端口的vlan标签一致,进5,否则,进8
4.为该帧打上默认pvid的vlan标签,进3
5.根据该帧的原mac地址更新mac表,之后查看目的mac地址,找mac表,交给相应的端口,进6
6.对应端口接到后,先决定允不允许转发带该vlan的帧(Access口会看vid是不是pvid,Trunk口会看vid在不在允许转发的列表里)若是进7,不是进8
7.Access口直接发不带tag的帧,Truck会根据vid是否等于pvid来决定去不去掉其tag,并转发
8.丢弃该帧
网络层实验
2,3层综合实验
把中间的g 0/0/13口配置成trunk,并且允许v2v3通过:
1 | port link-type trunk |
c向d发送ping报文
1.c发报文时,发现目的地址192.168.3.11和自己不在同一网段,于是给网关192.168.2.1
2.c并不知道网关的mac地址,所以,c先发送了arp报文,源ip为192.168.2.11,源mac为c的mac,目的ip为192.168.2.1,目的mac是广播地址全一
3.s2收到arp报文,先更新其mac地址表,记录e0/1口对应c的mac
4.s2向所有vlan 2的口转发arp报文,并添加其vlan id为2
5.s1接到报文,更新mac表,记录e0/13对应c的mac
6.s1发现报文的目的地址是自己vlan 2的ip,便准备一份回复,带有自己的mac地址,目的mac填c的mac,vlan id = 2
7.s1查找mac表,发现对应口e0/13,就发出
8.s2收到报文,更新mac表,记录e0/13对应的s1的mac
9.s2根据vlan标签和mac表,将该回复给c,去掉vlan标签
10.c写入自己的arp表,然后发出ping报文,目的mac为s1的mac,vlan id = 0
11.s2收到ping报文,根据e0/1口的vlan打上标签2,在mac表查找目的mac地址,知道该往e0/13发
12.s1收到ping报文,查看目的ip地址在自己的网段内,是去往vlan 3的,就准备转发,查找mac表,但找不到d
13.s1就发送arp广播,vlan id为3
14.s2接到arp广播,向所有vlan 3口转发该帧
15.d收到该帧,更新自己的arp表,即192.168.3.1对应的s1的mac
16.d发送回复,不带vlan id,目的为s1
17.s2收到回复,更新自己的mac表,e0/24对应d的mac
18.s2根据来的端口对应vlan,为此报文打上vlan id = 3,查找mac表知道该往e 0/13口转发
19.s1收到了回复,更新自己的mac表,知道d的mac地址对应端口e 0/13
20.s1把ping报文转发出去,目的mac为d的mac,vlan id = 3
21.s2收到ping报文,根据目的mac和vlan id查表,发现该往e 0/24口发
22.s2的e 0/24口是untagged,就去掉vlan id,发给d
23.d收到ping报文,回复,目的地址为网关的ip 192.168.3.1,查找arp表找到对应s1的mac为目的mac
24.d的reply发给s2,s2根据来源为其打上vlan 3,查找mac表知道该走e 0/13口
25.s1收到reply,目的ip是自己vlan 2的网段,便查找mac表,找到目的ip对应的目的mac地址,打上vlan 2的标签,转发,目的mac为c的mac
26.s2收到reply,此时的vlan id = 2,查找mac表知道c该往e 0/1发
27.e 0/1去掉vlan标签,发给c
28.c收到reply
OSPF
基本命令
1 | 重启ospf |
基本知识
router id
router id是ospf协议里识别一台路由器的标识,通常人为指定为某个loopback地址
若不指定,默认为最大的loopback地址,若无loopback,默认为最大的物理地址
新的router id要生效需要重启ospf
ospf多进程
同一台路由器上的ospf进程可以有多个,用进程号 区分,默认为1
五种报文类型
ospf要求工作在ip层上,要求可靠传输,是自己通过协议实现的
Hello
周期性发给邻居,包括定时器的数值,DR和BDR,以及已知的邻居
DD报文
交换邻居路由器之间的链路状态数据库摘要信息
在最开始,两个邻居路由器相互发送空的DD报文来确认主从关系
LSR报文
两台路由器交换了DD报文之后,通过对比发现自己的缺少的LSA和需要更新的LSR,这时就需要发送LSR报文,请求需要的LSA,此时报文的内容为缺少的LSA的摘要
LSU报文
用来向发送LSR报文的路由器发送其所需要的LSA,发送的报文是多条LSA的集合
LSAac报文
对收到的LSU报文的确认,内容是需要确认的LSA的首部
邻居状态机
Down
初始状态,过去的Dead-Interval内没有收到hello报文
Attempt
Attempt只适用于NBMA类型的接口,处于此状态,定期向那些手工配置的邻居发送hello
Init
收到邻居的hello,但该报文列出的邻居中没有本路由器的router id(对方未发现自己)
2-way
双方收到了彼此的hello,建立了邻居状态
ExStart
由2-way状态转变而来,在此状态下互相交换DD报文来确定主从关系
ExChang
确立主从关系后,互相发送带有本地路由摘要的DD报文
Loading
此状态下,请求对方的LSU报文
Full
相互信息共享完毕,建立邻接关系
状态转移图
报文交互过程
Hello发现邻居
1.一个路由器R1向邻居R2发送hello报文,此时它未发现任何邻居,所以hello报文里的Neighbor字段为空
2.邻居R2收到hello,创建邻居R1,将R1状态设为Init,回复hello,Neighbor里带上R1,表示收到了R1的hello
3.R1接到回复,创建邻居R2,将R2状态设为ExStart
主从关系协商
由于ospf要求可靠传输,但ip不可靠,因此,其主从机制就是为了解决这一问题。宣称为Master的路由器会定义一个序列号Seq,每次发送一个DD报文时,序列号都会加一。Slave路由器回复时,带有收到的最大序列号
4.R1发送只有首部的空DD报文,MS=1宣称自己是Master,规定初始序列号x
5.R2收到DD报文后,先将R1的状态设置为ExStart,并比较R1和自己的router id,如果自己的较大,则发送DD报文MS=1宣称自己是Master,并且重新给出序列号y
6.R1收到,比较后承认R2为Master,并将R2的状态设为Exchange
DD报文交换
7.R1用R2的序列号发送新的DD报文,MS=0表明自己是Slave,报文中携带R1内部LSDB中的LSA的摘要
8.R2收到,将R1状态改为ExChange,发送DD报文,MS=1,并且携带R2内部LSDB的LSA摘要
9.重复7,8,R2每发一个DD报文,Seq+1,R1的DD报文Seq号始终等于最新收到的R2报文Seq值,直到所有DD报文发完,R2最后一个DD报文的MS=0表示最后
10.R1收到R2最后一个报文,比较发现很多LSA自己没有,将R2的状态设置为Loading
11.R2收到R1最后一个报文,比较发现都有,之间把R1设为Full
LSA请求
12.R1向R2发送LSR报文请求LSA,内容是所需要的LSA摘要,并非所有
LSA更新
13.R2用LSU报文来回答R1的请求
LSA应答
14.R1收到LSU报文,将R2设为Full,发送LSAck报文来应答
链路状态描述
链路状态报文LSA,下面三种网络都使用第一类LSA报文描述
Stub net
指所连接的是一个末端网络,该网段中没有其它运行OSPF协议的网络设备,只有计算机这样的设备
1 | link id:10.0.0.0 //网络号 |
PPP
点到点的链路连接另一台运行ospf的路由器
1 | 相连网段 |
点到多点
彼此之间并非全联通,我到他们可以,他们之间不同
1 | 相连网段 |
第二类LSA和DR选举
对全连接网络(N个路由器的全连接广播或NBMA网络)用上述的第一类LSA会存在严重冗余和极大的流量消耗
为此,ospf自动选举一台DR和BDR,DR代表同一网段的所有路由器,所有路由器和DR互发信息,DR坏了就换BDR,并重新选BDR
DR选举
路由器的每个端口都有Priority,通过hello报文交换后,挑Priority最高的作为DR,若一样,则挑ip最大的
DR一旦选定,除非坏了否则不变,即使后来了ip更大的,也不再换DR了
全连接网络描述
普通路由器还是使用第一类LSA描述
1 | link id: 30.0.0.3 //DR的地址 |
DR路由器用第二类LSA描述
1 | Net mask: 255.0.0.0 //本网段掩码 |
区域划分
运行ospf的路由器多了,链路信息数据库lsdb会非常大,一条路坏了要通知所有路由器,负担很重
解决方法是划分区域,区域id是一个32位整数
区域内的网络用第一和第二类LSA来描述,并仅在区域内部传播
区域边界的路由器会将此区域的路由用第三类LSA发出去
路由器的类型
根据路由器在AS中的位置,分为
IAR,区域内路由器,只属于一个区域,只保存一个LSDB
ABR,区域边界路由器,必须有一个是连接区域是area 0,可以是物理连接也可以是虚连接,为每个区域保存一个LSDB
并根据需要生成,Network Summary LSA(type = 3),ASBR Summary LSA(type = 4)
BBR,骨干路由器,至少有一个接口处于area 0,所以ABR其实也是BBR
ASBR,自治系统边界路由器
学习AS外部路由
ASBR会为从外部引入的每一条路由生成一条type = 5的LSA,并在AS内部传播,计算路由时先找到ASBR的位置,其它节点都当作叶子挂在ASBR的外面
为了到防止ASBR的LSA被ABR过滤,规定区域内的ABR为该区域的ASBR单独生成一条type 4类型的LSA,内容主要包括这个ASBR的Router id和cost
骨干区域
如果各区域是平等的,那么按照上述由ABR通知其它区域的方式会产生自环
比如area 1的路由器A告诉area 2的B一条路由,B将其告诉了area 3的C
area 3的C恰巧也连着area 1,但C只知道这条路由是B告诉它的,不知道这是从area 1出来的,所有也会告诉aera 1网络里的路由器
area 1网络里的路由器也只知道这是C告诉的,就形成了环
解决方法是强制设定一个骨干区域area 0,规定所有区域都必须直接与area 0连接,并且area 0内部也是连通的。每个ASR连接的区域至少有一个是骨干区域,所有ASR将非骨干区域的LSA封装好并发给骨干区域,骨干区域将这些信息再发给非骨干区域
这样,每个三类LSA都知道其来源路由,也没传出两个区域,就避免了环
虚连接
虚连接是指实际上无法满足两个条件,即骨干区域无法连通,或者有非骨干区域无法与骨干区域直接连接时,可以配置虚连接使其视作直接连通
三类LSA
首部LS Type为3
Link State ID为目的网络
Advertising Router是发布者
描述只有子网掩码,和指定了tos的花费值
四类和五类
引入外部路由,使路由器变成ASBR的方法
1 | ip route-static 1.1.1.1 24 |
四类比较简单
Ls id为ASBR的id,adv id为发布者id,主体只有tos0metric
五类主体有
net mask外部路由的子网掩码
tos0metric外部路由的花费
e type引入的是一类还是二类外部路由
forwarding address 0.0.0.0表示去往引入路由目的地址的数据应该发给谁,类似下一跳地址,如果该项为0.0.0.0,则意思为下一跳是asbr
tag 1用来区分路由,是一个附加信息
ospf路由计算
每条链路都有cost值
所以每条路由都有cost
区域外的路由先由abr算出来,再发布
区域外的路由分为type 1和type 2,type 1是igp路由,type 2是egp路由
选择顺序
1.首选同区域的,即一二类lsa,再比cost
2.首选区域间的,同为区域间则优选骨干区域,还一样比cost
3.外部路由优选tpye 1的,在比cost
4.type 2路由比cost,相等则比asbr的cost
5.都相等就添加等值路由
为ospf赋值cost
进入端口/vlan
ospf cost 值
BGP
基本配置
1 | 将对方设置为对等体 |
报文种类
open
建立连接用于协商
update
通告bgp信息
notification
错误
keepalive
保持连接
连接建立过程
idle
初始状态,启动事件开始后,初始化资源,发起tcp连接
connect
发起tcp连接,如果超时则保持connect并继续发tcp连接
active
尝试tcp连接,不成功就退回connect
open-sent
tcp连接建立成功,发送open报文未收到回复,收到后,检查对等体的open,若可以接受,立刻发keepalive,否则退回idle
open-confirm
等待对方keepalive,若等到了,进入establish,超时回到idle
establish
建立成功,开始发undate
路由聚合
先network原本的路由
同时通告聚合路由和原本路由
1 | aggregate 聚合网段 聚合掩码 |
不通告原本路由
1 | aggregate 聚合网段 聚合掩码 detail-supperssed |
BGP路由基本属性
bgp属性分为:必遵/非必遵
过渡/非过渡
必遵是必须带有的属性
过渡是出了AS还起作用的,非过渡出去后会被还原为默认值
origin
必遵,过渡
定义路由信息的来源,IGP,EGP或者Incomplete,并按I,E,In的顺序选择路由
IGP指AS内部产生的,比如直接network的路由
通过其它IGP得到的路由为Incomplete
EGP是通过EGP得到的
as-path
必遵,过渡
列出到达所通告的网络之前经过的as清单
会选as-path少的路径
next-hop
必遵,过渡
本地bgp在通告ibgp对等体时,不会更改下一跳
通告ebgp对等体时,会将下一跳改为自己和它相连的口
多路访问……
路由策略
访问控制列表acl
1 | peer 对等体ip filter-policy 路由策略名字 方向(export|import) |
acl是由permit/deny语句组成的一系列有顺序的规则
分为基本列表和高级列表两种
基本列表是只能基于源ip
高级列表可以基于更多,如源ip,目的ip等等
1 | acl number acl号 |
使用列表时,要指定端口,并且指定方向
方向为入,说明这个口的报文进入时需要进访问控制
方向为出,说明这个口发报文时需要控制
访问列表中的deny会删掉所有符合的报文,permit会删掉不符合的
最后一句最好以permit any结尾,表明漏网的都放过
自治系统路径信息访问列表as-path list
1 | peer 对等体ip as-path-acl 路由策略名字 方向(export|import) |
1 | ip as-path-acl 序号 permit或deny as系统正则表达式 |
正则表达式符号:
^表示字符串的开始
$表示字符串的结束
.包含空格在内的任意字符
+前面字符的一次或多次
_一个符号,逗号,空格,连接号
*0次或多次
?只能匹配前面一个字符的0次或多次
-连接符
|逻辑或
\b是as号码间的分隔符
注意是倒着的,比如从200出发,到300,再到400的通告,as-path为400 300 200
路由策略
对等体路由策略
1 | peer 对等体ip route-policy 路由策略名字 方向(export|import) |
1 | route-policy 名字 permit node 10//节点号可以有很多 |
BGP同步
一个bgp不会将从内部BGP对等体得到的路由信息通知给外部对等体,除非该路由信息也能通过IGP得知(内部网关协议)
比如对等体告诉了到A的路由,但自己不知道去A该怎么走,就不会告诉别人这条路由存在
解决同步的方法很多,最简单的一种是asbr把外界路由都引入到igp
也可以取消同步,之后强制改变下一跳
ipv6
基本概念
节点:所有运行ipv6的设备
主机:只能接受以自己为目的地址报文的节点
路由器:可以接受并转发不以自己为目的地报文的节点
局域网段:以二层交换设备为边界(类似局域网广播冲突域)
链路:以路由器为边界的一系列局域网段
子网:使用相同的64位IP地址的一个或多个链路,子网可以被其内部子网路由器进一步划分
邻接点:同一个链路上的物理或逻辑节点
链路MTU:一个链路上可以发送的最大传输单元
ipv6地址
点分十六进制,::表示内部都是0
用”IPv6地址/前缀长度”来表示网段,如”FF01::/64”
地址类型
单播
可聚集全球单播地址——全球唯一的单播地址
站点本地地址:在同一站点使用,路由器不向外转发,类似于IPv4自己配的私网地址
链路本地地址:在同一链路使用,自动分配的,相当于本地地址192.168.x.x
环回地址:::1
任播
一般分给不同节点的多个口,发过来的包根据选路协议,找个最近的接收即可
组播
IPv6没有广播,只有组播,发给某个组播组的报文会交给所有属于该组播组的接口
一台主机的IPv6地址
必须有的:
全球IPv6地址
本地链路地址
回环地址::1
除此之外,主机还需要监听这些组播组
节点本地FF01::1
链路本地FF02::1
被请求节点的组播地址(?)
加入的组播组的组播地址
IPv6报文结构
长度,版本,长度限制之类的都知道
跳限制Hop Limit,每过一个路由器,其值减一
扩展报头:
逐跳选项,Hop by hop,要求在该报文路过的每个中间节点都要检查并处理该字段
对其填充:Pad1和PadN,Pad1就一个0,PadN包括类型,长度,和填充0
链路新接入主机
加入组播组
配置了或启用了IPv6地址的计算机和路由器接口,会自动加入组播特定的组播地址
1 | 查看组播组: |
通过地址自动配置,获得组播组地址
主机发送MLD侦听者报文给路由器,宣告自己加入的组播组
路由器受到报文,向组播转发表里添加相关的表项
邻居发现协议nd
该协议实现了无服务器自动配置,路由器发现,自动分配,地址解析,邻居不可达检测,重复地址检测等多种功能,ND定义了五种ICMPv6报文:
RS报文,路由器请求(Router Solicitation):节点希望路由器立刻发送路由器宣告多播包以得到链路上路由器配置参数,不再等待周期性的路由器宣告其源地址是分配给发送主机的地址,若没有分配,则为全0,目的地址是所有路由器的多播地址(FF02::2)
RS报文的跳数限制为255,这是为了防止主机用RS报文来干扰信息流(限制了255,就一定只能发255的报文,限制1则不行)
RA报文,路由器通告(Router Advertisement):路由器周期性发送,以通告其存在并让其它节点配置参数。若节点发送RS报文,路由器可以回复RA报文
参数:
cur hop limit 主机发报文默认跳数限制
lifetime 过期时间
reachable time 可达时间
retransmit time 重传NS报文的间隔
NS报文,邻居请求(Neighbor Solicitation):节点请求邻居的链路层地址,验证先前所获得并保存在缓存中的邻居链路层地址的可达性,或者验证其地址在本地链路上是否唯一源地址是发请求节点的单播地址,用作获取链路层地址时多播,可达性确认为单播
NA报文,邻居通告(Neighbor Notification):是NS报文的回应
router表示NA是否由路由器发送
solicited表示对NS报文的影响
overfide表示是否可以用该NA报文去覆盖之前的报文
重定向报文(Redirect):服务器通知主机,如果不是最佳的路由,则通知主机到达目的地的最佳下一跳
进行地址冲突检测
主机会加入组播组ff02::1:ffxx:xxxx,后24位是ipv6地址,进行地址冲突检测
邻居缓存表
pc中的邻居缓存表存在地址和mac地址的对应关系
一个表项中也存着邻居状态,不完整为不知道其mac,可到达为刚刚通信过,过一段时间会变为停滞
地址解析
需要知道某个地址的mac地址
首先在地址缓存表里建立表项,然后发ns报文
收到ns后回复na
收到na后添加到地址缓存表
目的缓存表
类似路由表,保存了到目标地址的下一跃点地址
配主机ipv6
1 | ipv6 install |
不是xp可以用图形界面配
配交换机和路由器
1 | 全局使能ipv6 |
ping命令
1 | ping ipv6 地址 |
ipv6静态路由
1 | ipv6 route-static 目的 掩码 下一跳 |
IPv6地址解析
on-link
on link表示解析在同一链路上的地址
首先在地址缓存表中建立表项,只有IPv6地址,没有Mac地址,状态设为不完整
向目的主机发NS报文
目的主机回复NA报文,带着自己的Mac地址
收到NA报文后,填入地址缓存表并将表项的状态设为可达(一段时间后会变成停滞)
类似于ARP表
1 | netsh interface ipv6>show neighbors interface=5 |
off-link
off link表示解析不在同一链路上的地址
相当于路由表
1 | netsh interface ipv6>show destinationcache |
ospfv3
同样有主干非主干区域,有相同的区域id和router id
同样的报文类型和邻接关系建立机制
基本相同的lsa和老化机制
相同的域内,域间和外部路由算法
不同的是ospfv3不再依赖具体的ip层协议
有专门配置的路由器id
网络地址相关内容在lsa的载荷中
下一跳使用链路本地地址,而非全局ip地址
lsa增加了组播,链路和域内前置三种新的lsa,为了以后增加了一种未定义的第七类lsa
link-lsa
为每个链路生成一个lsa,在本地链路范围内传播
intra-area-prefix-lsa
由于router和network lsa不再带网络地址相关内容,所以由Maximum OSPFv3 process limit reached (1000)该类型的lsa传递其它区域的网络信息
配置方法
1 | ospfv3 1 |
查看ospfv3的lsdb
1 | display ospfv3 lsdb |
更详细的可以在display ospfv3 lsdb 后面打?
BGP4+
配置方法
1 | //router-id |
查看方法
1 | dis bgp ipv6 peer |
MPLS
配置和查看命令
配置
1 | mpls lsr-id x.x.x.x |
查看
1 | dis mpls rou |
数据转发
转发数据包时,第一个路由器根据其FEC,为其加上指定标签,转发
之后的路由器根据标签转发表,去掉入标签,加入出标签转发
倒数第二跳的出标签为3,实际上会直接弹出,给最后一个路由器不带标签的包
MPLS VPN
太熟练了,不想看了