Tech

网络基础笔记(持续更新中)

交换基础

以太网二层交换机的主要功能:

  • 使得终端用户能够接入网络
  • 维护MAC地址表
  • 数据帧的转发及过滤
  • 二层环路避免及链路冗余性

MAC地址:

  • MAC地址有48bit,通常被表示为十六进制格式。
  • MAC地址分为单播、组播及广播MAC地址三类。
  • 单播MAC地址全球唯一,由 IEEE对这些地址进行管理和分配。
  • 每个单播MAC地址由两部分组成,其中前24bit代表OUI(组织唯一标识),剩下的24位由厂商自己分配。

以太网交换机的工作机制:

  1. 初始情况下,交换机的MAC地址表是空的。
  2. PC1发送数据帧给PC2(假设PC1已经知道了PC2的MAC地址),交换机在接口收帧后,在MAC地址表中查询该帧的目的MAC地址。
  3. MAC地址表中没有任何表项匹配该目的MAC地址,于是交换机将这个数据帧进行泛洪(将数据帧的拷贝从所有接口发送出去,除了接收该帧的接口)。 同时,交换机学习该帧的源MAC地址并创建MAC地址表项,将该MAC地址与接收该帧的接口进行关联。
  4. 连接在交换机其他接口的PC都会收到这个数据帧,但是它们会丢弃该数据帧,因为这并不是发送给它们的,PC2接收并处理这个帧。 PC2向PC1回复数据,数据帧发往交换机。
  5. 交换机收到数据帧后,首先在MAC地址表中查询该帧的目的MAC地址,发现有一个匹配的表项,于是将数据帧从对应的接口转发出去。

VLAN(Virtual Local Area Network)即虚拟局域网,是将一个物理的LAN在逻辑上划分成多个广播域的通信技术。VLAN内的主机间可以直接通信,而VLAN间不能直接互通,从而将广播报文限制在一个VLAN内。实现VLAN间的三层互通,需借助三层设备(具备路由功能的设备),例如路由器,或者三层交换机等。

  • 一个VLAN中所有设备都是在同一广播域内,不同的VLAN为不同的广播域。
  • VLAN之间互相隔离,广播不能跨越VLAN传播,因此不同VLAN之间的设备一般无法直接互访(二层互访),不同VLAN间需通过三层设备实现相互通信。
  • 一个VLAN一般为一个逻辑子网。
  • VLAN中成员多基于交换机的端口分配,所谓的VLAN划分,通常指的是将交换机的接口添加到特定的VLAN中,从而该接口所连接的设备也即加入到了该VLAN。
  • VLAN是二层交换机的一个非常基本的工作机制。可根据业务需求灵活的进行VLAN的规划。

交换机接口类型(Link-type):

  • Access接口

    • 只能加入一个VLAN,该VLAN又被称为Access接口的缺省VLAN。
    • 常用于连接PC、服务器或其他终端,或路由器等设备。
    • 接收帧:若数据帧不带tag,则接收帧并打上端口的PVID。若数据帧携带tag,则当VLAN-ID与PVID相同时,接收该报文,否则丢弃。
    • 发送帧:剥离Tag,发出的帧为普通以太网帧(也即无标记帧)。
  • Trunk接口

    • 当一条链路需要承载多VLAN数据的时候,可将该链路配置为Trunk链路。
    • Trunk链路两端的接口是Trunk类型的接口。两端交换机需采用相同的干道协议。
    • Trunk链路一般见于交换机之间或交换机与路由器之间。
    • 接收帧:若数据帧不带tag,则打上接口PVID,此时若PVID在允许通过的VLAN列表里,则接收该帧,否则丢弃。若数据帧带tag,且其VLAN-ID在接口允许通过的VLAN-ID列表里,则接收该帧,否则丢弃。
    • 发送帧:若VLAN-ID与接口PVID相同,且该VLAN-ID在allow-pass VLAN列表中,则去掉Tag,发送数据帧。若VLAN-ID与接口PVID不同,且该VLAN-ID在allow-pass VLAN列表中,则保持原有Tag,发送该带tag的数据帧(标记帧)。
  • Hybrid接口

    • 可以收发多个VLAN的报文,而且可以指定该接口在发送特定VLAN的报文时是否携带Tag。
    • 接收帧:若数据帧不带tag,打上接口PVID,若PVID在允许通过的VLAN列表里,则接收该帧,否则丢弃。若数据帧带tag,且VLAN-ID在接口允许通过的VLAN列表里,则接收该报文。否则丢弃该报文。
    • 发送帧:若VLAN-ID在接口允许通过的VLAN列表里,则发送该帧。可以通过命令设置发送时是否携带Tag。

端口的缺省ID(PVID):

  • 每个Access、Trunk及Hybrid的接口都有一个接口缺省VLAN-ID,称为PVID(Port Default VLAN ID),当接口接收到无标记帧时,为数据帧打上PVID。
  • 对于Access类型的接口,PVID缺省为1,由于Access接口只能加入一个VLAN,因此PVID也即该接口所属的VLAN。
  • 对于Trunk及Hybrid类型端口,PVID缺省也为1,这两种接口都允许多个VLAN数据帧通过,当接口收到无标记帧时,为数据帧打上PVID。

STP生成树协议

背景:交换机单线路上联,存在单点故障,上行线路及设备都不具备冗余性,一旦链路或上行设备发生故障,业务将会中断。冗余拓扑能够解决单点故障问题,但是同时也带来了二层环路。另外在实际网络环境中,由于人为的疏忽也可能引发二层环路。网络中如若存在二层环路,一旦出现广播数据帧,这些数据帧帧将被交换机不断进行泛洪,从而在网络中造成广播风暴。这将严重消耗设备资源及网络带宽,最终导致网络瘫痪。

通过在交换网络中部署生成树(Spanning-tree)技术,能够防止网络中出现二层环路。STP运行后,如果网络中存在环路,那么STP通过阻塞(Block)特定的接口从而打破环路,并且在网络出现拓扑变更时及时收敛,以保证网络的冗余性。可实现:

  • 消除环路:通过阻塞冗余链路消除网络中可能存在的网络通信环路。
  • 链路备份:当前活动的路径发生故障时,激活冗余备份链路,恢复网络连通性。

STP需要网络设备相互交换消息来检测桥接环路,该消息称为网桥协议数据单元BPDU(Bridge Protocol Data Unit,网桥协议数据单元)。STP之所以能够良好的工作并构建一个无环的网络,是依赖于BPDU报文的泛洪,并根据报文中相关字段计算的结果。配置BPDU中的重要参数:

  • Root Identifier根ID: 发送此配置BPDU的交换机所认为的根交换机的交换机标识
  • Root Path Cost到根的路径开销:从发送此配置BPDU的交换机到达根交换机的最短路径总开销,含交换机根端口的开销,不含发送此配置BPDU的端口的开销。
  • Bridge Identifier桥ID:发送此配置BPDU的交换机的STP交换机标识
  • Port Identifier端口ID:发送此配置BPDU的交换机端口的STP端口标识

STP采用四个步骤来解决二层环路问题,这里的桥Bridge,就是指的交换机。由于交换机是由网桥发展而来,因此STP在叫法上沿用了网桥的叫法。

  1. 在一个交换网络中选举一个根桥(Root Bridge)。根桥的选举是先比较优先级,优选优先级最小的(默认为32768),如果优先级都相等,则再比较MAC地址,也是优选最小的。这个MAC地址为交换机的背板MAC。
  2. 根桥持续发送BPDU,在每个非根交换机上选举一个根端口(Root Port)。根端口是每台交换机上距离根桥“最近”的端口,在网络收敛后,根端口将不断的收到来自根桥的BPDU。
  3. 每个Segment选举一个指定端口(Designated Port),指定端口用于向这个网段中发送BPDU。
  4. 阻塞非指定端口(Non-Designated Port)。

路由基础

参考资料:网络路由技术白皮书IP路由概述

路由器的工作内容:

  • 发现到达网络中各个网段的路径
  • 选择最佳路径
  • 维护路由表及路由信息
  • 转发数据报文

根据路由目的地的不同,路由可划分为:

  • 网段路由:目的地为网段,IPv4地址子网掩码长度小于32位或IPv6地址前缀长度小于128位。
  • 主机路由:目的地为主机,IPv4地址子网掩码长度为32位或IPv6地址前缀长度为128位。使用主机路由会导致路由表膨大,路由负荷增加,进而造成网络性能下降。
  • 默认路由(Default route):也被称为缺省路由,即0.0.0.0/0 ,也就是0网络地址及掩码都为0的路由。这是一条特殊的路由,可匹配任何目的IP地址。默认路由的下一跳可视为该设备的网关。如果没有匹配的表项(而且没有默认路由),则丢弃该数据包。路由器的行为是逐跳的,数据包从源到目的地沿路径每个路由器都必须有关于目标网段的路由,否则就会造成丢包。

根据目的地与该路由器是否直接相连,路由又可划分为:

  • 直连路由:目的地所在网络与路由器直接相连。
  • 间接路由:目的地所在网络与路由器非直接相连。

根据目的地址类型的不同,路由还可以分为:

  • 单播路由:表示将报文转发的目的地址是一个单播地址。
  • 组播路由:表示将报文转发的目的地址是一个组播地址。

每台路由器都会在本地维护一个路由表,路由表中装载着路由器通过各种途径获知的路由条目(Routes)。每个路由条目至少包括下面几个信息元素:

  • 路由前缀(Destination/Mask):这是路由条目所关联的目的网络号。一条完整的路由前缀由:网络号+前缀长度构成,两者缺一不可,例如192.168.1.0/24与192.168.1.0/25,虽然网络号相同,都是192.168.1.0,但是两者绝对是两条不同的路由。
  • 协议类型(Protocal):取决于通过什么途径学习到的,例如是直连的(直连接口所在网段的路由),或是静态的(由网络管理员手工配置的路由条目),或者是通过OSPF、IS-IS、EIGRP、BGP等动态路由学习到的。
  • 优先级(Preference):与协议类型对应,路由表中路由的获取来源有多种,每种协议类型对应不同的优先级,优先级值越小越优先。
  • 开销(Cost):或者叫度量值。指的是本地到达该路由所关联的目的网络所需的开销。当到达同一目的地的多条路由具有相同的路由优先级时,路由开销最小的将成为当前的最优路由。直连及静态路由的cost为0。通过动态路由协议学习到的Cost则根据实际环境。
  • 下一跳路由器IP(NextHop):表示此路由的下一跳地址。指明数据转发的下一个设备。
  • 出接口(interface):表示此路由的出接口。指明数据将从本地路由器哪个接口转发出去。

最佳路由的选取与发现此路由的路由协议的优先级、路由的度量有关。当多条路由的协议优先级与路由度量都相同时,可以实现负载分担,缓解网络压力;当多条路由的协议优先级与路由度量不同时,可以构成路由备份,提高网络的可靠性。

路由的度量标示出了这条路由到达指定的目的地址的代价,通常以下因素会影响到路由的度量。

  • 路径长度

路径长度是最常见的影响路由度量的因素。链路状态路由协议可以为每一条链路设置一个链路开销来标示此链路的路径长度。在这种情况下,路径长度是指经过的所有链路的链路开销的总和。距离矢量路由协议使用跳数来标示路径长度。跳数是指数据从源端到目的端所经过的设备数量。例如,路由器到与它直接相连网络的跳数为0,通过一台路由器可达的网络的跳数为1,其余以此类推。

  • 网络带宽

网络带宽是一个链路实际的传输能力。例如,一个10千兆的链路要比1千兆的链路更优越。虽然带宽是指一个链路能达到的最大传输速率,但这不能说明在高带宽链路上路由要比低带宽链路上更优越。比如说,一个高带宽的链路正处于拥塞的状态下,那报文在这条链路上转发时将会花费更多的时间。

  • 负载

负载是一个网络资源的使用程度。计算负载方法包括CPU的利用率和它每秒处理数据包的数量。持续监测这些参数可以及时了解网络的使用情况。

  • 通信开销

通信开销衡量了一条链路的运营成本。尤其是只注重运营成本而不在乎网络性能的时候,通信开销则就成了一个重要的指标。

路由汇总,又被称为路由聚合(Route Aggregation,或route summary),即是将一组有规律的路由汇聚成一条路由,从而达到减小路由表规模以及优化设备资源利用率的目的。

路由协议

路由协议是路由器之间维护路由表的规则,用于发现路由,生成路由表,并指导报文转发。依据来源的不同,路由可以分为三类:

  • 通过链路层协议发现的路由称为直连路由:路由器直连接口所在的网段,当接口物理状态及协议状态都UP时自动学习该直连路由到路由表。
  • 通过网络管理员手动配置的路由称为静态路由:不能自动适应网络拓扑的变化,需要人工干预。
  • 通过动态路由协议发现的路由称为动态路由:路由器可以自动进行路由信息的更新和同步,并且当网络拓扑变更时,能够自动收敛。

对动态路由协议的分类可以采用以下不同标准:

根据作用范围不同可分为:

  • 内部网关协议IGP(Interior Gateway Protocol):在一个自治系统内部运行。常见的IGP协议包括RIP、OSPF和IS-IS。
  • 外部网关协议EGP(Exterior Gateway Protocol):运行于不同自治系统之间。BGP是目前最常用的EGP协议。

根据使用算法不同可分为:

  • 距离矢量协议(Distance-Vector Protocol):包括RIP(Routing Information Protocol)。
    • 路由器周期性的泛洪自己的路由表。
    • 路由器并不了解网络的拓扑,只知道自身与目的网络之间的距离和应该往哪个方向或使用哪个接口转发数据包。
    • 无法检测出环路,可能发生无限计数的问题。
  • 链路状态协议(Link-State Protocol):包括OSPF和IS-IS。
    • LSAs的泛洪:运行链路状态路由协议的路由器,彼此之间交互的就不是路由信息了,而是LSA(链路状态通告)。
    • LSDB的维护:每台路由器将搜集到的LSAs放入自己的LSDB(链路状态数据库)存储起来。有了LSDB,路由器相当于掌握了全网的拓扑。
    • SPF计算:每台路由器基于LSDB,使用SPF(最短路径算法)进行计算,得到一个以自己为根、覆盖全网的一棵无环的树。
    • 维护路由表:每台路由器根据SPF的计算结果,将路由加载进路由表。
  • 路径矢量协议(Path-Vector Protocol):包括BGP(能够测出环路)

RIP

RIP(Routing Information Protocols,路由信息协议)的工作机制:

  1. 路由器初始启动:直连网络写入路由表,路由器能够自动学习直连路由并写入路由表。
  2. 路由信息交换:所有路由器将自己的路由表通过定期(30秒一次)广播(RIP版本1是广播发送,版本2是组播发送)的方式从所有激活了RIP的接口上更新出去。当所有的路由器,都拥有到达全网各个角落的路由。即路由收敛完成,网络(路由)进入一个稳态。

路由器通过多种不同的路由协议发现去往同一个目的网络的路由时,会选择路由优先级(Preference)值最小的路由;如果这些路由学习自相同的路由协议,则优选度量值(Metric)最优的。RIP以跳数(Hops)作为度量值(指所经过的路由器的个数),不关心带宽的问题。

为了防止RIP路由在网络中被无限泛洪从而跳数累加到无穷大,可以使用以下几种环路避免机制:

  • 定义最大度量以防止计数至无穷大。RIP规定:路由的最大跳数为15跳,也就是如果度量值大于等于16跳则被视为不可达。最大跳数的设定虽然解决了度量值技术到无穷大的问题,但是却也极大地限制了RIP所能支持的网络的规模。
  • 水平分割(Split Horizon):RIP从某个接口学到的路由,不会从该接口再发回给邻居路由器(发送端)。这样不但减少了带宽消耗,还可以防止路由环路。然而在网络本身有环路情况下,反向的回路会成为迂回的通道,路由信息会不断地被循环反复的转发。
  • 毒性逆转(Poison Reverse):RIP从某个接口学到路由后,从原接口发回邻居路由器,并将该路由的开销设置为16(即指明该路由不可达)。利用这种方式,可以清除对方路由表中的无用路由。
  • 触发更新(Triggered Update):当路由信息发生变化时,不用等待30秒而是立即发送出去的一种方法。使路由信息尽快收敛,有效避免错误路由信息被不断发送。

OSPF

开放式最短路径优先OSPF(Open Shortest Path First)是IETF组织开发的一个基于链路状态的内部网关协议(Interior Gateway Protocol)。与距离矢量路由协议直接交互路由器的路由表不同,OSPF作为链路状态路由协议,路由器之间交互的是LSA(链路状态通告),路由器将网络中泛洪的LSA搜集到自己的LSDB(链路状态数据库)中,这有助于OSPF理解整张网络拓扑,并在此基础上通过SPF最短路径算法计算出以自己为根的、到达网络各个角落的、无环的树,最终,路由器将计算出来的路由装载进路由表中。

OSPF作为基于链路状态的协议,能够解决RIP所面临的诸多问题。此外,OSPF还有以下优点:

  • 采用组播形式收发协议报文,这样可以减少对其它不运行OSPF路由器的影响。
  • 支持无类型域间选路(CIDR)。
  • 支持对等价路由进行负载分担。
  • 支持报文认证。

OSPF基本概念:

  • Router-ID:表示一台OSPF路由器。在全OSPF域内,禁止出现两台路由器拥有相同的OSPF Router-ID。可以通过手工配置的方式,或者通过协议自动选取的方式。
  • Cost:每一个激活OSPF的接口都有一个cost值,作为路由度量值。OSPF接口cost=100M /接口带宽,其中100M为OSPF的参考带宽(reference-bandwidth),可以修改。一条OSPF路由的cost由该路由从起源一路到达本地的所有入接口cost值的总和。
  • 报文类型:
    • Hello报文:周期性发送,用来发现和维持OSPF邻居关系。
    • DD报文(Database Description packet):描述本地LSDB的摘要信息,用于两台设备进行数据库同步。
    • LSR报文(Link State Request packet):用于向对方请求所需的LSA。设备只有在OSPF邻居双方成功交换DD报文后才会向对方发出LSR报文。
    • LSU报文(Link State Update packet):用于向对方发送其所需要的LSA。
    • LSAck报文(Link State Acknowledgment packet):用来对收到的LSA进行确认。
  • 邻居表(Peer table):OSPF是一种可靠的路由协议,要求在路由器之间传递链路状态通告之前,需先建立OSPF邻居关系,hello报文用于发现直连链路上的其他OSPF路由器,再经过一系列的OSPF消息交互最终建立起全毗邻的邻居关系,OSPF路由器的邻居信息显示在邻居表中。
  • 链路状态数据库(Link-state database,简称LSDB):OSPF用LSA(link state Advertisement,链路状态通告)来描述网络拓扑信息,然后OSPF路由器用LSDB来存储网络的这些LSA。OSPF将自己产生的以及邻居通告的LSA搜集并存储在LSDB中。掌握LSDB的查看以及对LSA的深入分析才能够深入理解OSPF。
  • OSPF路由表(Routing table):基于LSDB进行SPF(Dijkstra算法)计算,而得出的OSPF路由表。
  • 指定路由器 (DR):DR 负责使用该变化信息更新其它所有 OSPF 路由器(DRother)。最高OSPF接口优先级拥有者被选作DR,如果优先级相等(默认为1),具有最高的OSPF Router-ID的路由器被选举成DR,并且DR具有非抢占性。
  • 备用指定路由器 (BDR):BDR 会监控 DR 的状态,并在当前 DR 发生故障时接替其角色。

OSPF 区域(area)的概念:

  • 单区域存在的问题
    • LSA泛洪严重,OSPF路由器的负担很大。
    • 区域内部动荡会引起全网路由器的SPF计算。
    • LSDB庞大,资源消耗过多,设备性能下降,影响数据转发。
    • 每台路由器都需要维护的路由表越来越大,单区域内路由无法汇总。
  • OSPF多区域
    • 减少了LSA洪泛的范围,有效地把拓扑变化控制在区域内,达到网络优化的目的。
    • 在区域边界可以做路由汇总,减小了路由表。
    • 充分利用OSPF特殊区域的特性,进一步减少LSA泛洪,从而优化路由。
    • 多区域提高了网络的扩展性,有利于组建大规模的网络。
  • 骨干区域area0
    • 负责在非骨干区域之间中转由区域边界路由器归纳的链路状态通告信息。
    • 为了防止出现环路,OSPF要求所有的非骨干区域之间不能直接进行LSA的交互,而必须通过Area0骨干区域进行中转,因此所有的非骨干区域必须都与Area0“直接相连”。
  • 路由器的角色
    • 区域内路由器(Internal Router)
    • 区域边界路由器(Area Border Router)
    • 骨干路由器 (Backbone Router)
    • AS边界路由器(AS Boundary Router)

BGP

comments powered by Disqus