网络相关笔记

IPv4地址

IPv4地址通常以“点分十进制”形式书写,即四个0-255之间的十进制数,各数之间用英文句点(.)分隔,例如:192.0.2.1。总共32位的地址空间可以表示大约42亿个不同的地址。

IPv4地址结构包括:

网络部分:这部分地址标识设备所在的网络。

主机部分:这部分地址则用来区分同一网络中的不同设备

子网掩码

在IPv4中,子网掩码通过“1”和“0”的组合来标识IP地址中的网络部分,“1”对应的部分为网络位,“0”对应的部分为主机位。例如,子网掩码是255.255.255.0,这意味着IP地址的前24位被指定为网络部分,后8位用于标识该网络内的主机。配子网掩码的目的就是让计算机在和其他终端通信的时候,来确定两台机器是否在同一个网络内。

MAC地址

MAC地址是一种硬件地址,也称为物理地址或以太网地址。它是唯一的,由设备制造商在生产时写入到每个网络接口卡(NIC)中,用作识别局域网(LAN)中的每一台主机或设备。MAC地址长度为48位,通常表示为12个十六进制数,例如:`00:14:22:01:23:45`。主要作用是在数据链路层(第二层,Layer 2)进行帧的传输,同一局域网内的设备通过MAC地址直接通信。

MAC地址和IPv4是计算机网络中两种不同层次的地址标识,它们分别用于不同的网络通信目的。MAC地址与硬件相关联,主要用于本地网络内设备之间的直接通讯;而IPv4地址则用于全球范围的因特网上,它不受硬件限制,能够实现跨网络的数据包传输。在实际网络通信过程中,ARP协议负责将IP地址映射到MAC地址,以便在局域网内部署数据帧。

网关

对于一个本地网络而言,其内部设备通常通过交换机进行通信,但如果要访问外部网络(例如互联网上的Google、Baidu等服务器),就需要经过网关,这个网关通常是路由器的一个接口。

网关作用:在一个局域网中,路由器的一个接口被配置为该网络的默认网关,所有发往非本网络的目的地的数据包都会先被发送到这个网关。网关负责将这些数据包正确地转发到其他网络,同时也能接收来自外部网络的数据包,并将其转发给本网络内的目的主机。

寻址与路由:当本地网络中的主机尝试访问外部网络资源时,它会把数据包的目标IP地址设置为所需的外部网络地址,并通过默认网关(即路由器)发送出去。路由器则依据自身的路由表信息,将数据包转发至正确的下一跳设备,直到最终送达目标网络。

因此,可以将网关理解为不同网络间数据传输的重要枢纽,而路由器是实现这一功能的关键网络设备之一。

广播域,ARP协议、VLAN、冲突域

广播域

指一组能够接收并处理同一广播帧的设备集合。在一个广播域内,任何一台设备发送一个广播帧时,这个帧会被所有其他设备接收和处理,广播报文一般采用 ARP 协议进行广播。

一个 MAC 地址全为 1 的地址( FF-FF-FF-FF-FF-FF )就是广播地址,所有节点都会把目的地址处理为广播地址的数据帧,这个数据帧能到达的整个访问范围就称为二层广播域,也就是广播域。

正常来说,通过广播地址就可以访问到同一个网络中所有的设备,广播域的目的就是要让同一个网络中的所有设备都能收到报文。二层交换机做的就是把广播帧转发给除源端口之外的其他端口,所以二层交换机不能够隔离广播。

广播风暴: 广播风暴是指在一个广播域内,由于网络设备接收到一个广播帧后会将它转发给所有其他接口,导致广播信息在短时间内大量复制和传播,占用大量的网络带宽。当广播帧无限制地循环发送时,会形成一种“雪崩效应”,使得正常的业务数据传输无法进行,严重时甚至可以造成整个网络瘫痪。

ARP协议

ARP(Address Resolution Protocol,地址解析协议)是用来将 IP 地址解析为 MAC 地址的协议。 ARP 协议位于网络参考模型中的第二层,也就是数据链路层,要想准确无误的找到一台设备就必须要知道它的 MAC 地址,但是在实际的网络中,我们一般都是去通过 IP 地址去访问相应的设备,因为 IP 地址是一个逻辑地址,可以屏蔽物理地址的差异。

简单来说,就是两台 PC 之间需要通信,一般都只知道对方的 IP 地址,而不知道对方的 MAC 地址,所以想要去访问另外一台主机就需要通过 ARP 协议把 IP 地址转换为我们目标主机的 MAC 地址,这样就可以找到对应的目标主机了。

VLAN

VLAN是一种在逻辑上划分和隔离网络的方法。它不依赖于物理位置,而是根据管理策略对连接到同一交换机或跨越多个交换机的设备进行分组,每个组形成一个独立的逻辑子网。

想要解决广播风暴,就需要切割广播域。可以通过路由器来切割广播域,使得ARP广播请求不能广播到每一个主机。

如下图,两个交换机连接的主机从属同一个广播域。

在中间加一个路由器,从而切割了广播域。

路由器成本比较高,利用路由器进行隔离广播是不现实的,所以引入了虚拟局域网技术VLAN。

在这里,虚拟技术虚拟的是设备与物理位置,其实本质上就是划分资源、灵活调用资源的一种新逻辑。像OS中将进程运行划分时间片,CPU只运行时间片那么长的时间从而在多个进程间来回切换实现多进程并发执行,灵活利用CPU资源。我们将多个局域网统一成一个大的局域网,将这个大的局域网划分成不同的VLan,这个Vlan可以切割广播域。

如上图,1、2、3楼各分配一个交换机,各代表一个局域网,局域网内可实现各自的广播通信。现在将1、2、3楼的交换机统一连接到一个交换机上,那么这个时候广播通信可以在全部主机上执行,也就是网段1、2、3实现全广播了,这个时候我划分 VLAN1 和 VLAN2 ,VLAN1中的主机广播就不会发送到VLAN2的主机上了,实现了网段间的隔离,实现了广播域隔离。

冲突域

冲突域就是所有节点竞争同一带宽,从一个节点上发出的报文(无论是单播、组播、广播),除这个发送节点和接收节点会接收到相应的报文之外,和它同一个介质(也就是同一台物理设备)上其余所有的节点都会收到不应该出现在这些节点上的报文。

一般普遍认为一个 HUB(集线器)就是一个冲突域

二层交换机和三层交换机的区别

二层交换机:二层交换机属数据链路层设备,可以识别数据包中的MAC地址信息,根据MAC地址进行转发,并将这些MAC地址与对应的端口记录在自己内部的一个地址表中。二层交换机只能在同一广播域或VLAN内部实现设备间的通信。

具体如下:

(1)当交换机从某个端口收到一个数据包,它先读取包头中的源MAC地址,这样它就知道源MAC地址的机器是连在哪个端口上;

(2)再去读取包头中的目的MAC地址,并在地址表中查找相应的端口;

(3)如表中有与这目的MAC地址对应的端口,把数据包直接复制到这端口上。

三层交换机: 当一个数据包到达三层交换机的一个端口时,首先会由二层交换处理。如果数据包是未封装的以太网帧(即在VLAN内通信),则直接根据MAC地址表进行转发。如果这是新的源MAC地址,三层交换机会学习该MAC地址,并记录其与进入端口的对应关系,以便后续的数据帧可以直接通过MAC地址表转发。若数据包需要跨VLAN或网络转发(例如目标IP地址不在同一子网中),三层交换机会将数据包提交给三层路由引擎。三层路由引擎根据数据包的目标IP地址查找路由表,确定下一跳IP地址(路由器接口或者直连网络)。如果下一跳是本地接口,则可能需要通过ARP协议获取对应的MAC地址。若已经知道下一跳MAC地址,则可直接进行下一步。对于第一个到达的数据包,三层交换机会生成一条硬件转发表项,将目的IP和相应的出站端口关联起来。这个表项通常被称为快速转发表(FIB)。针对同一个数据流的后续数据包,三层交换机不再需要执行完整的三层路由计算,而是直接从硬件转发表中找到匹配项,按照第二层信息(MAC地址)进行快速转发。(一次路由,多次转发)

主要区别:二层交换机通过学习和维护MAC地址表,仅在同一个广播域或VLAN内转发数据帧。三层交换机能够跨不同子网、VLAN间转发数据包,它可以根据目标IP地址执行路由选择,并具有动态或静态路由功能。

三层交换机和路由器的区别

三层交换机和路由器在计算机网络中都承担着数据包转发的任务,但它们各自的设计、性能和功能定位存在明显差异:

三层交换机:主要功能是基于硬件实现高速的二层数据交换(MAC地址级别),同时具备基本的三层路由功能(IP地址级别)。它主要用于大型局域网内部的数据交换,通过硬件ASIC芯片进行快速转发,并且可以进行简单的路由决策,如VLAN间路由。

路由器:主要功能是复杂的三层数据包处理与转发,包括路径选择、路由表维护、路由协议支持等。路由器更适用于不同网络之间或者广域网环境下的连接,能够提供多种网络接口类型以适应各种链路需求,同时也具有防火墙、策略控制、VPN等功能。

三层交换机以数据交换为主,路由器以路由和转发为主。

路由器数据转发规则

网络内通信:

在没有路由器或其他路由设备的情况下,如果PC1和PC2处于同一局域网(LAN)内,PC1可以直接通过交换机(Switch1)以广播或学习到的MAC地址表的方式找到PC2,并将PC2的MAC地址作为目的MAC地址封装数据帧进行通信。

源IP地址:PC1的IP地址。

目的IP地址:PC2的IP地址。

源MAC地址:PC1的MAC地址。

目的MAC地址:PC2的MAC地址

网络间通信:

然而,当处于网络1的PC2和处于网络2的PC3通信时,仅使用PC3的MAC地址是无法实现直接通信的。因为:

当PC2发送一个带有PC3 MAC地址的数据帧到交换机时,交换机会根据其二层mac地址尝试转发给该MAC地址对应的设备,但由于PC3不在同一网络内,交换机无法直接找到目标主机。

即使进行了泛洪,交换机接收到这个数据帧后,会查看帧的目的MAC地址,并发现它并非指向自己的接口,因此不会处理并丢弃该帧。

正确的跨网络通信方式:

对于跨越不同网络的通信,PC2需要将其数据包的目的IP地址设置为PC3的IP地址,并且在封装数据帧时,将目的MAC地址设为路由器(作为网关)连接PC2的那个接口的MAC地址。路由器2接收到数据包后,检查三层IP报头,确定数据包是要发给本网络,然后根据自身的路由表信息,将数据包转发至PC3。最终,数据包会在网络2内部被正确地传递给PC3。

源IP地址:PC2的IP地址。

目的IP地址:PC3的IP地址。

源MAC地址: PC2的MAC地址 。

目的MAC地址:连接PC2接口的路由器MAC地址。

端到端的数据通信规则

1. IP地址:发送方主机构造的数据包中,目的IP地址将是接收方主机的IP地址。这是因为IP层负责寻址网络间的主机,所以发送方会将接受方的IP地址作为最终目的地,并且在数据传输的过程中,源ip和目的ip地址一直不变。

2. MAC地址:在实际传输过程中,如果发送方主机和接收方主机不在同一局域网内,发送方主机首先需要将数据帧的目的MAC地址设置为它所在路由器接口的MAC地址,源MAC地址为它本身,数据帧到达路由器后,源MAC地址改为路由器本身,目的MAC地址为下一跳MAC地址。如果发送方主机和接收方主机在同一局域网内,则目的MAC地址为目标本身的MAC地址。

接收方主机的路由器接收到信息后会查看自身的路由表或者ARP表(Address Resolution Protocol 表),以确定目的IP地址对应的主机的MAC地址,最终将信息发送给接收方主机。

总结路由器数据转发工作原理:

1.源目3层地址(ip)在传输过程中不变

2.源目2层(MAC)地址为本身地址和下一跳地址(网络内通信除外),每传输一次改变一次。

发送方主机如何得到网关的MAC地址,相邻路由器如何得到对方的MAC地址:通过ARP地址解析协议

ARP地址解析过程

1. ARP请求:

当PC想要与不同子网中的主机通信(例如访问互联网上的资源)时,它首先知道的是目标IP地址,但不知道网关的MAC地址。因此,PC会发起一个ARP请求,询问具有已知IP地址的设备其对应的MAC地址是什么。

2. ARP响应:

网关收到这个ARP请求后,查看请求的目标IP地址发现与自己的接口IP地址匹配,于是它回应一个ARP回复(ARP Reply),其中包含了自身的MAC地址。

3. 本地ARP表更新:

PC接收到网关的ARP回复后,将网关的IP地址与MAC地址对存入到本机的ARP表中,这样后续可以直接通过MAC地址向网关发送数据。

在获取到MAC地址后,PC就可以通过MAC地址进行数据封装和路由转发,网关在收到封装的数据后,根据数据包中的三层IP信息判断下一跳路径,并通过多次跳转将数据转发至最终目的主机所在网络。若目标主机也在同一网络中,则网关直接转发。

在跨子网通信过程中,PC首先获取网关的MAC地址以便将数据传送到网关,之后的数据包传递则依赖于网络层级的路由机制来实现。那么路由器是如何路由的。

路由器是如何路由

路由协议和路由选路规则是网络路由过程中紧密关联的两个概念,它们共同作用于实现数据包在网络中的有效传输。

路由协议:

路由协议是一种在路由器之间交换路由信息的标准或规范,它定义了路由器如何发现、维护并更新到达其他网络的最佳路径。不同的路由协议如RIP(Routing Information Protocol)、OSPF(Open Shortest Path First)、IS-IS(Intermediate System to Intermediate System)和BGP(Border Gateway Protocol)等,使用各自的算法来计算和传播网络拓扑信息,并基于这些信息构建路由表。

路由选路规则:

路由选路规则是在路由协议处理路由信息的基础上,路由器选择最优路径的具体准则和策略。这些规则通常包括但不限于:

最长匹配原则:当有多个目标网络匹配时,路由器会选择掩码最长的路由条目作为转发依据。

管理距离:在静态路由和动态路由共存的情况下,路由器会优先采用管理距离较小的路由源提供的路由信息。

度量值:不同路由协议有不同的度量标准(如跳数、带宽、延迟等),路由器根据各个路由条目的度量值大小来决定最佳路径。

路由属性:对于像BGP这样的高级路由协议,还有各种复杂的路由属性,例如本地优先级(Local Preference)、AS路径(AS Path)、MED(Multi-Exit Discriminator)等,这些属性会被用来确定跨境互联网流量的优选路径。

因此,路由协议负责收集和传播网络的可达性信息,而路由选路规则则是路由器在接收到众多路由信息后,判断和决定如何实际应用这些信息进行数据包转发的具体方法和标准。两者相辅相成,共同确保数据能够在复杂的网络环境中准确无误地从源主机传递到目标主机。

1. 泛洪法

泛洪法是一种简单且分布式的路由机制,主要用于局域网(如以太网)中的数据帧转发。当交换机接收到一个未知目的MAC地址的数据帧时,它会将该帧发送到除接收端口之外的所有其他端口上,从而确保帧能到达目标主机。这种广播式的方法虽然能够确保数据包最终到达目的地,但会造成环路震荡。

例如:

r1接收到来自张三的数据后把数据转发给与他直连的除了张三之外的r2发送,r2在收到数据后会向r3和r4发送,r3和r4收到数据之后继续进行泛洪发送,最终到达站点c。

环路震荡: 当一个路由器收到一条新的路由信息后,会将此信息转发给所有邻居路由器,若网络中有环路存在,这条新路由就会在网络中循环传播,形成路由信息的持续扩散,导致网络拥塞和数据包无限循环。

2. 固定路由法

固定路由法(Static Routing)是一种在网络中手动配置和管理路由的方法,它涉及预先在路由器或网络设备上设置到特定目标网络的路径。与动态路由协议不同,固定路由不会自动适应网络拓扑的变化。

在固定路由法中,网络管理员需要明确指定每个目的网络或子网的下一跳地址(即数据包离开当前路由器时应发送给哪个相邻路由器),并将这些信息写入到网络设备的路由表中。

固定路由法适用于网络规模较小、结构简单且稳定的环境,或者是对安全性和可预测性要求较高的场合,因为静态路由不容易受到网络攻击的影响,也不会因邻居路由器之间的通信故障而导致路由循环等问题。

优点:配置简单、管理方便;对路由器性能影响小,因为它不需要运行复杂的路由算法来计算最佳路径。

缺点:当网络拓扑发生变化时,如新增或移除了网络连接,需要手动更新所有相关的路由条目,否则可能导致某些网络不可达。此外,对于大型、复杂网络而言,手动维护大量的路由信息非常困难和耗时。

3. 集中路由法

集中路由法是指在网络中,所有或部分的路由决策由一个中心节点或者一组中心节点来负责。在这样的网络架构中,所有的网络设备(如主机、路由器等)不直接参与路由计算和更新过程,而是依赖于中央控制器或特定的路由服务器来进行。具体来说,网络中的所有路由信息都集中在中心化的路由设备上,例如一台高级路由器或者网络管理系统。该中心节点通过收集网络拓扑结构的信息,并使用某种路由算法(比如Dijkstra算法、Bellman-Ford算法等)来计算最佳路径。中心节点根据计算出的最优路由表,将正确的路由信息发布给各个边缘路由器或交换机,这些边缘设备则按照收到的指令进行数据包转发。当网络状态发生变化时,例如链路故障或新链路加入,中心节点会重新计算并发布新的路由信息,确保全网内的路由表保持最新且有效。

集中路由法的优势在于可以简化网络管理,统一规划路由策略,并能更快地对网络变化做出响应。然而,这种方法也存在局限性,如单点故障风险增加,以及对于大型、复杂的网络环境,中心节点可能因为需要处理过多的路由信息而导致性能瓶颈等问题。

集中路由法强调的是路由决策由一个中心节点统一处理,而固定路由法则指的是路由信息一旦设定后便保持不变,直至人工干预为止,可以理解为集中路由法是在固定路由法的基础上添加网络控制中心。

4. 逆向学习法

泛洪法、固定路由和集中路由法计算节点间的最优路径,都是在整个网络结构拓扑基础上,用诸如dijkstra算法计算得出,而逆向学习法则是让每个节点自己学习最优路径,一开始,每个节点什么都不知道,假如现在r5向服务器发送一个数据,可以在数据中加入一个源节点字段和节点计数器字段

这个数据每通过一个路由节点里面的计数器被加一,当r5通过r3 r4 到达r8 时计数器被加三次,r8将这些信息记录在路由表中,节点计数器的值为3,当r5通过r3直接到达r8时,节点计数器记为2,当有更短的路径2时,节点路径为3的值将被覆盖,也就是说如果接收到的数据中源节点相同,距离和花费更短,则更新记录。当r8要发送信息给r5时,将从当前路由表中选择更短的路径r3发送。

利用这种方法,网络中的每个节点都可以利用其他节点发送来的包含计数器的数据不断更新它和源节点之间的路径,一段时间之后每个节点都会学习到其他节点的最优路径。

逆向学习用于构建无环路的逻辑拓扑结构,防止网络中的广播风暴。

但逆向学习对于节点的移除和链路的崩溃却无能为力,当最短路径中有链路崩溃,而网络中又没有其他路径去更新最短路径,那路由表就无法更新,信息无法有效传输。

5.RIP协议

RIP和逆向学习法都是通过距离这个度量值来学习路由方式,RIP协议的每个路由节点也有一张类似的路由表,包括目标节点,下一跳以及目标距离,一开始每个节点将直连节点设置为1,而路由节点对距离的学习并非你想学习方法那样通过在普通数据在附加计数器字段来实现,RIP采用的是另一套独立的机制,每个路由节点每隔30s向相邻的节点广播自己的路由表。

比如r1向r2r4r5发送路由表,表的内容为r1到r2r4r5的距离,当r2收到r1的路由表后,发现r1到r5的距离为1,如果r2通过r1去往r5,那么总距离就是 到r1的直连距离1+r1到r5的距离1=2,而现在r2表中并没有r5的信息,于是新增一条r5的记录(目标节点r5,下一跳r1,距离2),接着查看r1表的其他内容,r2就是他自己,不更新,r4比原来远,也不更新。

接下来到r2的广播周期,r1收到了原先不知道的r3,r3收到了原先不知道的r1信息……如以一来,在每个路由节点经过若干次向直连节点广播路由表后,整个网络中所有的路由节点最终都会得到最优路径的路由表,至此,网络进入收敛状态。进入收敛之后,当传输时,每个路由节点将按照路由表让信息沿着最有的路径传递

RIP协议概括来说就是,定期根据相邻节点发送来的路由表更新自己对其他节点距离的认知以及下一跳节点的选择。RIP协议有一定的自适应网络状况的能力,可以处理网络中增加节点的问题,对于线路故障的情况RIP协议会出现无穷计数(慢收敛)的问题。

例如:

当r1和r2之间的线路断开,r1和r2感知到后将表中距离改为无穷大,但随即r3率先来到路由表广播周期,r2发现r3有到r1距离为2的记录,随机更新目标节点r的下一跳为r3,距离改为3,当r2广播时,r3将目标节点r1的距离改为4,依次循环,直到循环达到15次退出。

对于无穷计数的问题,水平分割可以有效解决:当一个路由器接收到从某个接口学习到的路由信息后,该路由器不会将这条路由信息再通过相同的接口发送出去。也就是说,路由器不会把通过某个接口接收的路由更新报文原封不动地回传给那个接口连接的邻居路由器。同时,为了进一步增强水平分割的效果,还会有其他补充技术如“毒性逆转”或触发更新等被结合使用。

毒性逆转:

毒性逆转是一种扩展水平分割技术的方法,用于RIP等距离向量路由协议中。

当路由器通过某个接口学到一条路径失效(如下一跳不可达)的信息时,它不仅不在该接口上发送这条失效路由信息(这是水平分割的作用),而且会主动将这条路由以一种“毒化”的形式从同一接口发送出去。

“毒化”指的是将路由的度量值设置为最大值(对于RIP来说通常是16跳,表示不可达),这样邻居路由器收到这个更新后就会立即知道这条路由已无效,并迅速从其路由表中删除。

触发更新:

触发更新是指当路由器检测到网络拓扑发生重大变化(例如,直接连接的链路状态改变或某条路由的成本显著增加)时,立即发送路由更新给所有邻居,而不是等待下一次定期更新的时间点。

这种即时的通知方式能够加快整个网络对拓扑变化的响应速度,减少收敛时间,从而有助于防止因网络状态传播延迟而可能产生的路由环路

6.OSPF协议

RIP是基于距离(向量),而OSPF是基于链路状态的协议,ospf的大致工作流程如下:

首先每个节点在自己直连的链路上发送一个HELLO消息来检测链路状态并发现自己的邻居,比如r1,他向附近的链路发送hello消息,每个链路上都得到了回应,于是r1检测出这三条链路都是通畅的,也发现了r2r4r5三个邻居,和他们形成邻居关系,hello消息默认每隔10秒发送一次以持续监测链路的状态,如果某条链路上超过四次没有得到邻居节点的回应,则认为该链路不可用,而一个节点和他所连接的可达链路就形成了一个链路状态通告数据LSA,r2r3r4r5r6也用同样的方法检测出链路状态,并产生自己的链路状态通告数据LSA,每个节点都有专门保存此数据的数据库,一开始每个节点宪法自己的LSA数据存入其中,

而后邻居节点开始相互交换数据库摘要信息,并根据自己的数据库进行比对,然后相互交换彼此缺少的LSA,此时他们的关系由邻居晋升为邻接,成为邻接关系后,当节点收到一个有效的LSA后,会将这个LSA通过泛洪法发送给与自己形成邻接关系的节点,有效是指LSA不在自己数据库中,如果已经存在则直接丢弃,不会进行泛洪,这样可以解决环路震荡问题。

如果某条链路出现故障,节点定期发送的hello得不到目标节点的回应,则节点将此改变目标节点的LSA,并通过泛洪法将此变化告知给邻接节点,于是整个网络上的节点将很快得知这个故障并更新数据库。

OSPF相比于RIP,在设计、功能和配置上复杂的多,OSPF 支持多区域结构,允许将自治系统划分为多个逻辑区域,以提高可扩展性和管理效率。不同的区域类型和边界路由器的存在增加了配置和管理的复杂性,RIP 只有一种报文类型,即路由更新报文,而 OSPF 有多种报文类型,如Hello报文、数据库描述报文(DD)、链路状态请求报文(LSR)、链路状态更新报文(LSU)和链路状态确认报文(LSAck),每种报文都有特定的功能和作用。

OSPF协议的五种报文和七种状态:

1. Hello 报文 (Type 1)

用于发现和维护邻居关系,通过周期性发送来检查邻居路由器的可达性。

包含了接口参数、区域信息、路由器ID等。

2. Database Description (DD) 报文 (Type 2)

在建立邻接关系的过程中使用,用于交换链路状态数据库(LSDB)摘要信息。

DD报文是增量式的,包含每个LSA头部的摘要信息,帮助双方同步LSDB。

3. Link State Request (LSR) 报文 (Type 3)

当路由器发现自己LSDB中的某些LSA不是最新的或缺失时,会发送LSR报文请求特定的LSA详细信息。

4. Link State Update (LSU) 报文 (Type 4)

用于传递完整的LSA信息给邻居,更新它们的LSDB。

LSU报文可以包含多个LSA,并且对端需要确认收到这些LSA。

5. Link State Acknowledgment (LSAck) 报文 (Type 5)

作为LSU报文接收方的确认回应,用于确保LSA已经成功传输。

每个LSA都有一个独立的确认过程。

1. Down 状态

初始状态,没有从邻居接收到任何OSPF报文。

2. Init 状态

路由器已发送Hello报文,但尚未从邻居处接收到确认。

3. 2-way 状态

双向通信建立,路由器与邻居互相在Hello报文中看到对方的Router ID。

4. Exstart 状态

开始进行主从关系协商,确定谁将成为主设备并初始化DD序列号。

5. Exchange 状态

发送DD报文以交换LSDB摘要信息。

6. Loading 状态

使用LSR和LSU报文来请求并接收缺失的LSA,直到两个路由器的LSDB完全同步。

7. Full 状态

邻居关系完全建立,LSDB同步完成,可以开始使用OSPF计算最短路径树(SPF树)并转发数据包。

这些状态代表了OSPF邻居关系从初次发现到完全建立并保持稳定的过程。

DR选举和区域划分

在OSPF路由协议中,DR(指定路由器)和BDR(备份指定路由器)的选举是针对广播多路访问(如以太网)类型网络进行的优化措施。其目的主要有以下几点:

1. 减少邻接关系数量:在一个MA网络中,如果没有DR/BDR机制,所有路由器之间都需要形成邻接关系,这会导致大量的LSA(链路状态通告)交换和协议报文流量。通过选举出一个DR和一个BDR,其他路由器仅与DR和BDR建立邻接关系,从而大大减少了邻接数和网络流量。

2. 确保稳定性:当DR失效时,BDR会立即成为新的DR,这样可以迅速恢复网络的稳定性和连通性。

DR选举主要基于以下几个因素:

路由器优先级(Router Priority),范围为0到255,默认值为1。优先级最高的路由器更可能成为DR。

如果多个路由器具有相同的优先级,则比较它们的Router ID(通常是接口IP地址中的最大数值)。

路由器一旦成为DR或BDR,除非优先级更改、接口关闭或其他路由器出现故障导致角色变更,否则它将继续担任该角色。

区域划分(Area Partitioning)是OSPF用于管理大型自治系统的一种策略。OSPF将一个自治系统划分为多个逻辑区域(Areas),每个区域内部使用自己的LSDB(Link State Database)。这样做的好处包括:

缩小规模:每个区域内的路由器只需要维护所在区域的完整拓扑信息,而不是整个AS的拓扑,降低了内存占用和CPU计算开销。

控制LSA传播:区域间只传播汇总的路由信息,降低了区域内不必要的路由更新流量。

简化管理:不同的区域可以根据网络结构和流量需求来独立配置和管理。

OSPF中有三种主要类型的区域:

核心区域:所有其他区域都必须直接或间接连接到此区域。

普通区域:普通区域之间的通信通常需要经过骨干区域。

特殊区域:这些区域进一步限制了从外部区域流入的路由信息,简化了内部路由器的工作负载,并提供了额外的安全特性。

常见的动态路由协议还有EIGRP,BGP,IS-IS。

路由选路规则

第一规则 最长匹配原则:当有多条候选路由时,路由器会优先选择与目标地址子网掩码匹配度最高的那一条。

管理距离/优先级:如果存在相同前缀长度的不同来源路由,路由器会参考每条路由的管理距离(对于静态路由和不同动态路由协议)或优先级(例如某些动态路由协议内),选择具有更低数值的那个来源作为最佳路由。

度量值(Metric):在同一路由协议内部,如果多条路由具有相同的管理距离或优先级,则会选择度量值最小(即成本最低)的路由,这个度量值可能代表了跳数、带宽、延迟或其他网络性能指标。

网络地址转换NAT和端口映射

NAT(Network Address Translation,网络地址转换)是一种在计算机网络中广泛使用的技术,它主要用于解决IPv4地址空间不足的问题。通过NAT,私有IP地址可以被转换成公网IP地址,使得多个内部主机能够共享一个或几个公网IP地址访问互联网。

NAT的工作原理主要包括以下几种类型:

(1)静态NAT

指将内部网络的私有IP地址转换为公有IP地址,IP地址对是一对一的,即两个地址的映射关系己绑定死了。某个私有IP地址只转换为某个公有IP地址,借助于静态转换,可以实现外部网络对内部网络中某些特定设备(如服务器)的访问。

(2)动态NAT

①指将内部网络的私有IP地址转换为公用IP地址时,IP地址对是不确定的,而是随机的。所有被授权访问上Internet的私有IP地址可随机转换为任何指定的合法IP地址池中一个IP地址。如果地址池的IP地址做映射用完了,剩余的内网计算机将不能再访问外网(本质上,也是一对一的关系,只不过这种关系是动态绑定的)。

②当要与外界进行通信的内部节点,如果还没有建立转换映射,边缘路由器将会动态的从公网IP地址池中选择IP对内部地址进行转化。每个转换条目在连接建立时动态建立,而在连接终止时会被回收。因此,外网的计算机不能访问内网的计算机(因为映射关系是内网计算机发起且连接终止时就回

收了)。

③动态NAT,一般用在当内部网络中只有少数节点与外界建立连接的场合时,因为只有少数的内部地址需要被转化成全局地址,可以减少对合法地址的需求。

(3)PAT

①这是最流行的NAT配置类型,实际上是动态NAT的一种形式,它映射多个私有网IP地址到一个公网IP地址,通过使用不同的端口来区分内网主机,被称为端口地址转换(PAT,Port Address Translation)。

②使用PAT时,internet的主机无法访问内网主机。如果需要这种访问,则需要做端口映射(注意,端口映射和端口地址转换PAT是两个概念!PAT是使得多个内网主机可以通过一个公网IP同时访问Internet,而端口映射则可以让internet主机访问内网主机)

(4)Easy IP

实现原理和NAPT相同,同时转换IP地址、传输层端口,区别在于Easy IP没有地址池的概念,使用接口地址作为NAT转换的公有地址,具体来说,当内部私有网络中的设备发起对外部公网的连接请求时,路由器会将内部源IP地址和端口号映射到自身的公网IP地址以及一个未使用的临时端口上,这样外部网络就可以通过唯一的公网IP地址+端口号组合来区分不同的内部设备。

端口映射:

端口映射通俗来讲,就好比你在家中有一个房间(内网设备),你想要让外面的朋友(公网用户)直接访问这个房间里的某个东西(比如一台服务器上的网站)。但是你的房子(路由器)只有一个门牌号(公网IP地址),而且朋友在外面只能通过这个门牌号找到你的房子。

端口映射就是在这个情况下,当有人敲门并说“我想找80号房间的电视机”时(在互联网上请求访问80端口的服务),你就知道应该把他们带到你家内部的80号房间(内网服务器监听的80端口)去。这样,虽然朋友们实际进入的是同一个门(公网IP),但通过不同的询问方式(不同端口号),你就能确保他们访问到正确的地方。

iptables

iptables基本概念

iptables 是集成在 Linux 内核中的包过滤防火墙系统。使用 iptables 可以添加、删除具体的过滤规则,iptables 默认维护着 4 个表和 5 个链,所有的防火墙策略规则都被分别写入这些表与链中。

表(table):存放链的容器,防火墙最大概念

链(chain):存放规则的容器

规则(policy):准许或拒绝规则,未来书写的防火墙条件就是各种防火墙规则

“四表”是指 iptables 的功能,默认的 iptables规则表有 filter 表(过滤规则表)、nat 表(地址转换规则表)、mangle(修改数据标记位规则表)、raw(跟踪数据表规则表)

“五链”是指内核中控制网络的 NetFilter 定义的 5 个规则链。每个规则表中包含多个数据链:INPUT(入站数据过滤)、OUTPUT(出站数据过滤)、FORWARD(转发数据过滤)、PREROUTING(路由前过滤)和POSTROUTING(路由后过滤),防火墙规则需要写入到这些具体的数据链中。

filter 表:主要和主机自身相关,控制数据包是否允许进出及转发,实现防火墙功能:屏蔽或准许端口ip,可以控制的链路有 INPUT、FORWARD 和 OUTPUT。

INPUT:负责过滤所有目标地址是本机地址的数据包 通俗来说:就是过滤进入主机的数据包(能否让数据包进入服务器)

FORWARD:路过,负责转发流经主机的数据包。起转发的作用,和NAT关系很大,后面会详细介绍IVSNAT模式,net.ipv4.ip_forward=0

OUTPUT:处理所有源地址是本机地址的数据包,通俗的讲:就是处理从主机发出去的数据包

nat 表:控制数据包中地址转换,实现nat功能和共享上网(内网服务器上外网),端口映射和ip映射,可以控制的链路有 PREROUTING、INPUT、OUTPUT 和 POSTROUTING。

OUTPUT:和主机放出去的数据包有关,改变主机发出数据包的目的地址,

PREROUTING:在数据包到达防火墙时,进行路由判断之前执行的规则,作用是改变数据包的目的地址、目的端口等(就是收信时,根据规则重写收件人的地址,例如:把公网里:x8xx8x8xxx映射到同域网的x区xx服务器上。)

POSTROUTING:在数据包离开防火墙时,进行路由判断之后执行的规则,作用改变数据包的源地址,源端口等。(POSTROUTNG写好发件人的地址,要让接收方回信时能够有地址可回,例如。默认笔记本和虚拟机都是局域网地址,在出网的时候被路由器将源地址改为了公网地址)

mangle:修改数据包中的原数据,可以控制的链路有 PREROUTING、INPUT、OUTPUT、FORWARD 和 POSTROUTING。

raw:控制 nat 表中连接追踪机制的启用状况,可以控制的链路有 PREROUTING、OUTPUT。

iptables执行过程

1.防火墙是层层过滤的,实际是按照配置规则的顺序从上到下,从前到后进行过滤的。

2.如果匹配成功规则,即明确表示是拒绝(DROP)还是接收(ACCEPT),数据包就不再向下匹配新的规则。

3.如果规则中没有明确表明是阻止还是通过的,也就是没有匹配规则,继续向下进行匹配,直到匹配默认规则得到明确的阻止还是通过。

4.防火墙的默认规则是所有规则都匹配完才会匹配默认规则。

外部主机发送数据进入防火墙本机,先处理的是nat表的POSTROUTING链,如果只是从服务器路过,则防火墙作为路由负责转发数据,走filter表的FORWARD链,相当于门口的减速带,如果要进入服务器,走filter表的INPUT链,INPUT决定访问请求能否到达服务器

防火墙本机发送数据到外部主机,先进入filter表的OUTPUT或者nat表的OUTPUT,之后进入nat表的POSTROUTING链。

iptables语法格式

iptables [-t table] COMMAND [chain] CRETIRIA -j ACTION

各参数的含义为:

-t:指定需要维护的防火墙规则表 filter、nat、mangle或raw。在不使用 -t 时则默认使用 filter 表。

COMMAND:子命令,定义对规则的管理。

chain:指明链表。

CRETIRIA:匹配参数。

ACTION:触发动作

iptables 命令常用的选项及各自的功能

选 项

功 能

-A

添加防火墙规则

-D

删除防火墙规则

-I

插入防火墙规则

-F

清空防火墙规则

-L

列出添加防火墙规则

-R

替换防火墙规则

-Z

清空防火墙数据表统计信息

-P

设置链默认规则

iptables 命令常用匹配参数及各自的功能

参 数

功 能

[!]-p

匹配协议,! 表示取反

[!]-s

匹配源地址

[!]-d

匹配目标地址

[!]-i

匹配入站网卡接口

[!]--sport

匹配源端口

[!]--dport

匹配目标端口

[!]--src-range

匹配源地址范围

[!]--dst-range

匹配目标地址范围

[!]--limit

匹配数据表速率

[!]--mac-source

匹配源MAC地址

[!]--sports

匹配源端口

[!]--dports

匹配目标端口

[!]--stste

匹配状态(INVALID、ESTABLISHED、NEW、RELATED)

[!]--string

匹配应用层字串

iptables 命令触发动作及各自的功能

触发动作

功 能

ACCEPT

允许数据包通过

DROP

丢弃数据包

REJECT

拒绝数据包通过

LOG

将数据包信息记录 syslog 曰志

DNAT

目标地址转换

SNAT

源地址转换

MASQUERADE

地址欺骗

REDIRECT

重定向

使用 -A 选项添加防火墙规则会将该规则追加到整个链的最后,而使用 -I 选项添加的防火墙规则则会默认插入到链中作为第一条规则.

查看规则

sudo iptables -nvL --line-number

各参数的含义为:

-L表示查看当前表的所有规则,默认查看的是filter表,如果要查看其他表,可以加上 -t+表名。

-n表示不进行DNS解析,即不对IP地址进行反查,加上这个参数显示速度将会加快。

-v表示输出详细信息,包括通过该规则的数据包数量、总字节数以及相应的网络接口

--line-number表示显示每行规则的行号

不加-t默认为filter表

添加规则

sudo iptables -A INPUT -s 192.168.94.128 -j DROP

各参数意义为:

-A表示追加(Append)操作,这将把新规则添加到指定链的末尾。(-I为指定插入)

INPUT表示指定要操作的链为INPUT链,这是处理所有进入本机的数据包的链。(默认为filter的链)

-s 192.168.94.128表示源地址匹配的是IP地址为192.168.94.128的主机发出的数据包

-j DROP表示目标动作(jump)为DROP,来自所有192.168.94.128的数据包将被丢弃

不加-t默认为filter表 不加-p默认为所有协议

修改规则

sudo iptables -R INPUT 1 -s 192.168.94.128 -j ACCEPT

各参数意义为:

-R表示这是一个替换(Replace)操作,将指定位置的规则替换为新的规则。

INPUT表示要操作的链为INPUT链

1表示要替换第1条规则

-s 192.168.94.128表示新规则匹配的源地址为192.168.94.128的数据包

-j ACCEPT表示目标动作为DROP,这意味着来自192.168.94.128的数据包子到达本机后会被防火墙通过

不加-t默认为filter表

删除规则

sudo iptables -D INPUT 1

各参数意义为:

-D表示这是一个删除(Delete)操作,将指定位置的规则删除

INPUT表示要操作的链的INPUT链

1表示规则的编号,即删除第一条规则

不加-t默认为filter表

禁止从某个端口访问

sudo iptables -I INPUT -s 127.0.0.1 -p tcp --dport 8848 -j DROP

禁止所有从本机(127.0.0.1)向本地8848端口发起的TCP连接请求

-m multiport表示匹配多个端口 192.168.94.1/24 表示匹配192.168.94.1~192.168.94.255

保存规则

对于Linux系统中的iptables防火墙配置,默认情况下所做的修改都是临时的,当重启iptables服务或重启服务器后,所有通过命令行添加、修改或删除的规则都将丢失。

为了确保防火墙规则在重启后仍然有效,可以使用 iptables-persistent 包,安装后会提供相应的服务来持久化规则:

安装包:sudo apt-get install iptables-persistent

在安装过程中系统会提示是否保存当前规则。

如果iptables-persistent包已经安装,并且想要更新新的已保存的防火墙规则,通常可以通过运行以下命令来保存当前活动的规则

sudo netfilter-persistent save

执行完成后防火墙规则被保存在/etc/iptables/rules.v4文件(在某些情况下,可能需要重新启动iptables-persistent服务以应用新保存的规则:sudo systemctl restart netfilter-persistent)

重启后执行以下命令恢复防火墙规则,或者在init.d下新建脚本文件开机自启

iptables-restore < /etc/iptables/rules.v4

ensp实验

1.静态路由实验

新建拓扑

开启设备,设置r1 e0为192.168.1.254 24 e1为10.0.0.1 24

设置r2 e0为192.168.2.0 24 e1为 10.0.0.1 24

r1r2设置静态路由,前一个IP是目的网段,后一个IP为下一跳地址

ping通

2.动态路由实验

静态路由手动配置,动态路由通过协议自动学习更新路由信息

2.1RIP

新建拓扑

R3

sys //进入系统视图

un in en //关闭提示信息

int g0/0/0 //进入和pc相连的接口

ip add 192.168.1.254 //255.255.255.0 配置为pc3的网关

int g0/0/1

ip add 192.168.3.1 255.255.255.0

rip 1 //启用RIP协议

net 192.168.1.0

net 192.168.3.0 //宣告网段 告诉同在rip 1的路由器 我能连接这些网段

R3

R4

R3和R4通过RIP协议学习到到达PC1和PC2网段的方法

ping通

2.2OSPF

新建拓扑

R1

sys //进入系统视图

un in en //关闭提示信息

int g0/0/0 //进入和pc相连的接口

ip add 192.168.1.254 255.255.255.0 //配置为pc1的网关

int g0/0/1

ip add 192.168.3.1 255.255.255.0

ospf 1 //设置ospf进程为1

area 0 //进入骨干区域0

net 192.168.3.0 0.0.0.255 //宣告网段接反掩码

area 1

net 192.168.1.0 0.0.0.255

r2相同流程配置

输入dis ip rou 查看,通过动态学习r1学到了一个目的/掩码为192.168.2.0/24下一跳为192.168.3.2

3.网络地址转换实验

新建拓扑

R1配置

sys //进入系统视图

un in en //关闭提示信息

int g0/0/0 //进入和交换机相连的接口

ip add 192.168.1.254 255.255.255.0 //配置为192.168.1.0网段的网关

int g0/0/1 //进入和R2相连的接口

ip add 10.10.1.1 255.255.255.0

R2配置流程相同

3.1静态NAT

配置R1

int g0/0/0 //进入接口0

nat static global 172.16.1.1 inside 192.168.1.1 //指定pc1的地址转换为 172.16.1.1

使用pc1和pc2pingR2的0口 然后对R2的0口进行抓包,发现pc2来自192.168.1.2,pc1来自172.16.1.1 说明地址转换成功

3.2动态NAT

动态nat给一个地址池,判断那些地址需要转换,需要绑定acl使用(ACL可以用来定义哪些内部源IP地址范围需要执行NAT转换。一台pc机同一时间只能使用一个地址)

R1

undo nat static global 172.16.1.1 inside 192.168.1.1 //取消上次配置

nat address-group 1 172.16.1.1 172.16.1.5 //创建名为1的组 从172.16.1.1开始到172.16.1.5一共5各ip地址

acl 2000 //创建acl规则 名为2000

rule 5 permit source 192.168.1.0 0.0.0.255 //在2000中添加一条规则,允许192.168.1.0的包通过

int g0/0/1 //进入接口一

nat outbound 2000 address-group 1 no-pat //指定从组1的池中选进行转换

//no-pat表示不进行端口地址转换这意味着每个内部主 //机都会独立地映射到公网地址池中的一个单独地址, //而不是共享同一个公网地址的不同端口

设置完成后使用PC1pingR2的0端口,IP地址从172.16.1.1到172.168.1.5轮流使用,但是仍然能不能ping通

配置R2

ip route-static 172.16.1.0 24 10.10.1.1 //将从R1来的172.16.1.0转化为10.10.1.1

再次pingR2的0口,ping通,接触绑定和解除绑定需要一定时间,等待一段时间再ping,直接ping会出现丢包

3.3PAT

pat(NAPT)可以实现多个pc同时使用一个ip地址

R1

undo nat outbound 2000 address-group 1 no-pat //取消之前配置

nat outbound 2000 address-group 1 //使用NAPT acl 2000 和组一在之前已经创建

PC1pingR1的0端口,ip地址没有从1到5转换,也没有出现丢包

3.4easy ip

easy ip 不用创建地址池,使用R1的0端口作为ip地址的分配

R1

undo nat outbound 2000 address-group 1 //删除之前配置

nat outbound 2000 //配置easy ip

PC1pingR2端口0,并对R2的端口0进行抓包,easy IP直接使用了接口的IP地址

验证广播域实验

新建拓扑

PC2mac地址:54-89-98-17-14-8F

PC2 ping PC4,对交换机1连接PC1的一端口进行数据抓包,发现了ARP。

主机PC2 ping 主机PC4时,如果PC2不知道C的MAC地址,则会通过ARP协议广播询问目标IP地址PC4对应的MAC地址。这个ARP请求会在整个广播域中传播。

如果主机PC1监听到这个ARP请求,无论它知不知道主机PC4的MAC地址,都不会有任何回复,因为ARP查询是“谁拥有这个IP请回应”的方式工作。

查看抓包的数据,数据帧IP地址来源为192.168.1.2,目的ip地址为192.168.1.4,源MAC地址为PC2的地址,而目的MAC地址为FF:FF:FF:FF:FF:FF,在以太网网络中,MAC地址全为1的地址(即十六进制的FF:FF:FF:FF:FF:FF)被定义为广播地址,它代表了网络中的所有设备。

冲突域在集线器HUB上的实验

新建拓扑

PC1 ping PC2的ip地址,然后对三个端口进行抓包分析,按理说只有1接口和2接口能抓到ARP回复报文和对应的 ICMP报文,3 端口应该是除了 ARP的广播之外什么都收不到的,但事实上3端口也会收到ARP和ICMP报文,这个就是一个冲突域的体现。

PC1MAC地址:54-89-98-B3-30-86

PC2MAC地址:54-89-98-D4-7E-64

PC3MAC地址:54-89-98-1B-2E-69

1端口抓包数据

二端口抓包数据

三端口抓包数据

VLAN实验

新建拓扑

未配置VLAN之前PC1 ping PC2IP地址

配置交换机

sys //进入系统视图

un in en //关闭提示信息

vlan batch 3 6 9 //创建VLAN3 6

display vlan //查看是否创建成功

int e0/0/1 //进入接口一

port link-type access //设置接口一链路类型为access

port default vlan 3 //接口一分配给VLAN3

int e0/0/2

port link-type access

port default vlan 6 //接口一分配给VLAN6

int e0/0/3

port link-type access

port default vlan 9 //接口一分配给VLAN9

display vlan //查看是否创建成功

然后PC1再pingPC2 ping不通

相关资料

RIP(Routing Information Protocol)是一种基于距离向量的路由协议,主要在IPv4网络中使用。RIP的收敛是指网络中的所有路由器通过交换路由信息最终达到一个状态:每台路由器都拥有全网拓扑的完整且准确的信息,并据此构建了最优路径的路由表。在这个状态下,当网络拓扑发生改变时,RIP能够快速地更新其路由表以反映新的网络状况。

RIP的收敛过程主要包括以下几个步骤:

1. 初始填充:当路由器启动后开始发送周期性的“路由公告”(RIP updates),通过接收来自邻居路由器的公告来填充自己的路由表。

2. 路由计算:根据收到的路由信息,每台路由器按照RIP的最大跳数(hop count)限制(默认为15跳)来进行路由选择和度量值(metric)计算。超过15跳被认为是不可达。

3. 触发更新:当某条路由发生变化(如链路故障或恢复)时,路由器会立即发送触发更新给所有邻居,而不等待下一次定期更新。

4. 水平分割、毒性逆转等机制:为了避免路由环路和加速收敛,RIP采用了诸如水平分割、毒性逆转等技术手段。

尽管如此,由于RIP仅基于跳数作为度量标准,它的收敛速度相较于现代更复杂的路由协议如OSPF或IS-IS较慢,并且容易在网络规模增大时产生不稳定性和性能问题。此外,RIP的最大跳数限制也限制了它在网络设计上的应用范围。

在RIP(Routing Information Protocol)协议中,无穷计数通常是指“无穷大(infinity)”的跳数。RIP使用跳数(hop count)作为衡量路径成本的标准,最大允许的跳数是15跳。当路由器接收到一条路由信息,其跳数为16时,这条路由就被视为不可达,即无穷大。

以下几种情况可能导致RIP中的无穷计数:

1. 路由环路:如果网络中存在路由环路,数据包可能会在一个闭环内不断转发,每经过一个设备跳数就会增加1。当跳数达到或超过15时,该条路由被标记为无穷大,并从路由表中删除,以防止数据包陷入无限循环。

2. 链路故障或网络断开:当某条通往目标网络的路径失效时,与之相连的路由器无法通过这条路由到达目的地,因此会将该路由的跳数更新为16,即无穷大。

3. 毒性逆转(Poison Reverse):为了更快地通知其他路由器某条路由已失效并阻止可能产生的路由环路,RIP可以通过毒性逆转策略主动将失效路由的跳数设置为16,并立即广播出去。

无穷计数机制对于维护RIP网络的稳定性至关重要,它有助于快速识别和排除无效路由,避免因错误配置或网络变化导致的通信问题。然而,由于RIP的最大跳数限制,它不适合大规模或复杂网络环境。

OSPF(Open Shortest Path First,开放最短路径优先)是一种内部网关协议(IGP),用于在自治系统(AS)内部的路由器之间交换路由信息,以确定网络中到达各个目标的最佳路径。OSPF是基于链路状态算法的路由协议,遵循RFC 2328标准。

OSPF的主要特点:

1. 链路状态协议:每个运行OSPF的路由器收集其直连网络的信息,并将这些信息以链路状态公告(LSA)的形式发布给其他路由器。所有路由器根据收到的所有LSA构建一个相同的链路状态数据库(LSDB),然后通过SPF算法计算出到所有目的地的最短路径树。

2. 区域划分:OSPF支持将大型网络划分为多个区域(Area),从而优化路由更新过程、减少网络流量并提高收敛速度。区域内所有的路由器共享相同的链路状态信息,而不同区域间则仅传递汇总后的路由信息。

3. VLSM和CIDR支持:OSPF支持变长子网掩码(VLSM)和无类别域间路由(CIDR),可以更灵活地分配和使用IP地址资源。

4. 快速收敛:由于OSPF采用了触发更新机制,当网络拓扑发生变化时,受影响的路由器会立即发送更新信息,使得整个网络能迅速达到新的稳定状态。

5. 安全性:OSPF支持多种认证方式来确保路由信息的安全传输,包括明文密码认证和MD5散列认证。

6. 负载均衡:OSPF能够支持等价多路径(ECMP),允许流量在多个等成本路径上进行负载均衡。

总之,OSPF是一个广泛应用且功能强大的动态路由协议,特别适合于规模较大、结构复杂的IP网络环境。

端口映射(Port Mapping)是一种网络技术,它允许内部私有网络中的设备通过路由器或防火墙等网络设备提供的服务,将其内部使用的非公网IP地址与特定的端口号对应到外部公网IP地址的一个或多个端口上。这种映射使得来自公网的请求可以被正确地转发至内网中指定的主机和应用。

具体工作流程如下:

1. 内部服务器配置:首先,在内部网络中有一台或多台主机运行着需要对外提供服务的应用程序,如Web服务器、FTP服务器、游戏服务器等,并且这些应用程序监听在特定的端口号上,例如HTTP服务通常使用80端口,HTTPS服务使用443端口。

2. 路由器或防火墙设置:在路由器或防火墙上进行端口映射配置,将公网IP地址上的一个端口(例如公网IP的80端口)映射到内网某台服务器的特定端口(例如内网IP的80端口)。

3. 数据包转发:当互联网上的用户尝试访问该公网IP地址以及映射的端口号时,其发送的数据包会被路由器接收并根据端口映射规则转发至相应的内网主机。

4. 通信建立:一旦数据包到达正确的内网主机,内部服务器就能够响应请求,并建立起从公网到内网的服务连接。

端口映射的主要应用场景包括:

在家庭网络中,让外部用户能够访问家用电脑或NAS(网络附加存储)等设备上的共享资源。

在企业环境中,发布内部服务器的服务给外部用户访问,比如Web服务、邮件服务、远程桌面服务等。

在网络游戏场景下,为玩家提供稳定的连接以接入游戏服务器。

需要注意的是,端口映射可能会增加网络安全风险,因为它暴露了内网服务给公网,因此在实施端口映射时应当结合其他安全措施,例如防火墙策略、身份验证机制等来保障网络安全。

ARP(Address Resolution Protocol,地址解析协议)是计算机网络中一个重要且基础的协议,主要用于在同一个局域网(LAN)内的主机之间实现IP地址与MAC地址的动态映射。ARP工作在网络层与数据链路层之间,属于网络层的一部分。

工作原理:

1. 当一台主机想要发送数据包给同一局域网中的另一台主机时,它只知道目标主机的IP地址,但实际传输数据时需要知道目标主机的物理地址(即MAC地址)。

2. 发送主机首先检查自己的ARP缓存表,看是否有目标IP地址对应的MAC地址记录。如果已有记录,则可以直接使用该MAC地址进行数据帧封装和发送。

3. 如果ARP缓存表中没有目标IP地址的映射,发送主机则会构造一个ARP请求广播帧,该帧中包含源主机的IP地址和MAC地址以及要查询的目标IP地址。该请求在整个局域网中广播。

4. 局域网中的所有主机都会收到ARP请求,但只有拥有请求中目标IP地址的主机才会回应。目标主机发送一个ARP应答帧,其中包含它的IP地址和MAC地址。

5. 发送主机接收到ARP应答后,将目标主机的IP地址与MAC地址的映射关系存入自己的ARP缓存表中,并利用这个MAC地址封装数据帧,然后通过数据链路层发送出去。

生命周期:

ARP条目在ARP缓存中会有一定的存活时间(TTL,Time to Live),超过这个时间后,如果没有刷新,ARP条目会被删除。这样设计是为了适应网络环境的变化,比如主机离开网络或者IP地址发生变化等情况。

跨网段情况:

ARP协议仅限于同一广播域(通常是一个子网或VLAN)内。如果目标主机不在同一子网内,发送主机将使用路由表转发数据包到下一跳路由器,这时需要的是目标路由器的MAC地址,同样通过ARP获取,但不同的是,此时ARP请求的目标IP地址将是下一跳路由器的IP地址,而不是最终目的地的IP地址。在大型网络中,跨多个子网的寻址通常依靠更高级别的路由协议如RIP、OSPF、BGP等来处理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/323937.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

wordpress外贸建站公司歪建站新版网站上线

wordpress外贸建站公司 歪猫建站 歪猫WordPress外贸建站&#xff0c;专业从事WordPress多语言外贸小语种网站建设与外贸网站海个推广、Google SEO搜索引擎优化等服务。 https://www.waimaoyes.com/dongguan

使用Python实现DataFrame中奇数列与偶数列的位置调换

目录 一、引言 二、背景知识 三、问题描述 四、解决方案 五、案例分析与代码实现 六、技术细节与注意事项 七、扩展与应用 八、封装为函数 九、错误处理与健壮性 十、性能优化 十一、总结与展望 一、引言 在数据处理和分析中&#xff0c;数据框&#xff08;DataFra…

Springboot集成Mybatispuls操作mysql数据库-04

MyBatis-Plus&#xff08;简称MP&#xff09;是一个MyBatis的增强工具&#xff0c;在MyBatis的基础上只做增强而不做改变。它支持所有MyBatis原生的特性&#xff0c;因此引入MyBatis-Plus不会对现有的MyBatis构架产生任何影响。MyBatis-Plus旨在简化开发、提高效率&#xff0c;…

数据结构-二叉树结尾+排序

一、二叉树结尾 1、如何判断一棵树是完全二叉树。 我们可以使用层序遍历的思路&#xff0c;利用一个队列&#xff0c;去完成层序遍历&#xff0c;但是这里会有些许的不同&#xff0c;我们需要让空也进队列。如果队列里到最后只剩下空那么这棵树就是完全二叉树。具体的实现如下…

【springboot基础】如何搭建一个web项目?

正在学习springboot&#xff0c;还是小白&#xff0c;今天分享一下如何搭建一个简单的springboot的web项目&#xff0c;只要写一个类就能实现最基础的前后端交互&#xff0c;实现web版helloworld &#xff0c;哈哈&#xff0c;虽然十分简陋&#xff0c;但也希望对你理解web运作…

C++STL细节,底层实现,面试题04

文章目录 19. STL19.1. 序列容器19.1.1. vector19.1.1.1. 底层实现和特点19.1.1.2. 常用函数19.1.1.3. emplace_back() vs push_back() 19.1.2. array19.1.2.1. 底层实现和特点19.1.2.2. 常用函数 19.1.3. deque19.1.3.1. 底层实现和特点19.1.3.2. 常用函数 19.1.4 list19.1.4.…

誉天教育近期开班计划

云计算HCIE 晚班 2024/5/13 大数据直通车 周末班 2024/5/25 数通直通车 晚班 2024/5/27 云服务HCIP 周末班 2024/6/1 云计算HCIP 周未班 2024/6/1 RHCA442 晚班 2024/6/17 周末班&#xff1a;周六-周日9:00-17:00晚 班&#xff1a;周一到周五19:00-21:30注&…

搜索的未来:OpenAI 的 GPT 如何彻底改变行业

搜索的未来&#xff1a;OpenAI 的 GPT 如何彻底改变行业 概述 搜索引擎格局正处于一场革命的风口浪尖&#xff0c;而 OpenAI 的 GPT 处于这场变革的最前沿。最近出现了一种被称为“im-good-gpt-2-chatbot”的神秘聊天机器人&#xff0c;以及基于 ChatGPT 的搜索引擎的传言&am…

android zygote进程启动流程

一&#xff0c;启动入口 app_main.cpp int main(int argc, char* const argv[]) {if (!LOG_NDEBUG) {String8 argv_String;for (int i 0; i < argc; i) {argv_String.append("\"");argv_String.append(argv[i]);argv_String.append("\" ")…

Python语言基础学习(上)

目录 一、常量和表达式 二、变量和类型 2.1 认识变量 2.2 定义变量 2.3 变量类型 1、整数 int 2、浮点数&#xff08;小数&#xff09;float 3、字符串 str 4、布尔类型 2.4 类型转换 三、注释 3.1 单行注释 3.2 文档注释&#xff08;或者多行注释&#xff09; …

[附源码]石器时代_恐龙宝贝内购版_三网H5手游_带GM工具

石器时代之恐龙宝贝内购版_三网H5经典怀旧Q萌全网通手游_Linux服务端源码_视频架设教程_GM多功能授权后台_CDK授权后台 本教程仅限学习使用&#xff0c;禁止商用&#xff0c;一切后果与本人无关&#xff0c;此声明具有法律效应&#xff01;&#xff01;&#xff01;&#xff0…

SpringBoot工作原理

优点&#xff1a;自动装配&#xff0c;起步依赖 起步依赖 原理就是maven的依赖传递 【A依赖B、B依赖C….&#xff0c;则我导入依赖A的时候&#xff0c;B&#xff0c;C都会被maven加载进来】 重点看看自动装配 概念&#xff1a; 当Spring容器启动后&#xff0c;一些配置类、…

攻略:ChatGPT3.5~4.0(中文版)国内无限制免费版(附网址)【2024年5月最新更新】

一、什么是ChatGPT&#xff1f; 1、ChatGPT的全名是Chat Generative Pre-trained Transformer&#xff0c;其中"chat"表示聊天。"GPT"则是由三部分组成&#xff1a;生成式&#xff08;generative&#xff09;意味着具有创造力&#xff1b;预训练&#xff0…

LeetCode 难题解析 —— 正则表达式匹配 (动态规划)

10. 正则表达式匹配 思路解析 这道题虽然看起来不难理解&#xff0c;但却存在多种可能&#xff0c;当然这种可能的数量是有限的&#xff0c;且其规律对于每一次判别都使用&#xff0c;所以自然而然就想到用 动态规划 的方法啦 接下来逐步分析可能的情况&#xff1a; &#x…

3---Linux编译器gcc/g++

一、程序的翻译过程&#xff1a;ESc->iso 1.1预处理&#xff1a;c->c 主要功能&#xff1a;宏替换、头文件的展开、条件编译、去注释&#xff1b;目的是让代码变得纯粹。条件编译&#xff0c;可以实现对代码的裁剪。比如对于不同用户&#xff0c;设置不同的宏常量&…

详解分布式锁

知识点&#xff1a; 单体锁存在的问题&#xff1a; 单体锁&#xff0c;即单体应用中的锁&#xff0c;通过加单体锁&#xff08;synchronized或RentranLock&#xff09;可以保证单个实例并发安全 单体锁是JVM层面的锁&#xff0c;只能保证单个实例上的并发访问安全 如果将单…

java JMH 学习

JMH 是什么&#xff1f; JMH&#xff08;Java Microbenchmark Harness&#xff09;是一款专用于代码微基准测试的工具集&#xff0c;其主要聚焦于方法层面的基准测试&#xff0c;精度可达纳秒级别。此工具由 Oracle 内部负责实现 JIT 的杰出人士编写&#xff0c;他们对 JIT 及…

鸿蒙内核源码分析(任务切换篇) | 看汇编如何切换任务

在鸿蒙的内核线程就是任务&#xff0c;系列篇中说的任务和线程当一个东西去理解. 一般二种场景下需要切换任务上下文: 在线程环境下&#xff0c;从当前线程切换到目标线程&#xff0c;这种方式也称为软切换&#xff0c;能由软件控制的自主式切换.哪些情况下会出现软切换呢? 运…

【AutoGPT】踩坑帖(follow李鱼皮)

本文写于2024年5月7日 参考视频&#xff1a;AutoGPT傻瓜式使用教程真实体验&#xff01; 对应文章&#xff1a;炸裂的AutoGPT&#xff0c;帮我做了个网站&#xff01; 平台&#xff1a;GitPod 云托管服务 原仓库已经改动很大&#xff0c;应使用的Repo为&#xff1a;Auto-GPT-ZH…

应用层协议之 DNS 协议

DNS 就是一个域名解析系统。域名就是网址&#xff0c;类似于 www.baidu.com。网络上的服务器想要访问它&#xff0c;就得需要它对应的 IP 地址&#xff0c;同时&#xff0c;每个域名对对应着一个 / N个 IP 地址&#xff08;即对应多台服务器&#xff09;。 因此&#xff0c;为了…