Loading... ## 网络层的功能 > 简要了解即可 网络层为传输层提供服务,将传输层的数据封装成 “IP 数据报” 。网络中的路由器根据 IP 数据报首部中的源 IP 地址、目的 IP 地址进行 “分组转发” 。因此,网络层实现了 “主机到主机” 的传输。 数据链路层为网络层提供服务,将网络层的 IP 数据报(分组) 封装成帧,传输给下一个相邻结点。 ![image-20241106180353808.png][1] ## IPv4 ### 各种协议之间的服务关系 - IP 协议(Internet Protocol,网际协议)是互联网的核心。 - ARP 协议用于查询同一网络中的 <主机IP地址, MAC地址> 之间的映射关系。 - ICMP 协议用于网络层实体之间相互通知 “异常事件” 。 - IGMP 协议用于实现IP组播。 ![image-20241106221237071.png][2] ### IP 数据报 (IP 分组) 的格式 > 考试中一般会给首部格式参考图,但要记住每个字段的含义。 ![image-20241106221338493.png][3] #### 分片问题 **重要概念**:一个链路层数据帧能承载的最大数据量称为**最大传送单元(MTU)**。如以太网的 MTU = 1500B 。如果一个 IP 数据报的总长度超出了下一段链路的 MTU ,就需要**分片**。 ![image-20241106224840231.png][4] - 每个分片都是一个可以被单独转发的 IP 数据报,都包含首部。 - IP 数据报的 “分片” 可能在源主机、或任何一个路由器中发生。 - 只有目的主机才会对分片进行 “重组” 。 - 各分片有可能乱序到达目的主机。 要对分片进行重组,需要首部记录一些信息: ![image-20241106225236084.png][5] - 若 DF 设置为 1 ,且传输过程中某个节点无法将该数据报往下传递,该节点就会将数据报丢弃,并向源主机返回一个 ICMP 包,通知其发送失败了。 - 由于首部的 “片偏移” 字段是以 x8B 为单位,因此,除了最后一个分片外,其他每个分片的数据部分必须是 8B 的整数倍。 #### 生存时间,协议和首部校验和 ![image-20241107005059656.png][6] TTL 的初始值通常由源主机设置。每经过一个路由器,路由器就将 TTL 减 1 。如果 TTL 减到 0,就直接丢弃分组,并向源主机发送 ICMP 报文。 #### 源地址和目的地址 ![image-20241107005130085.png][7] #### 小结 ![image-20241107005251824.png][8] ### IP 地址 IPv4协议是1981年发明的,当时只有政府、学校、军队等大机构会使用互联网。完全没有预料到互联网用户会迎来爆炸性增长。因此 IPv4 协议中,地址位数仅设计了 32bit(232≈42亿)。 > IP 地址资源由 ICANN(互联网名字和数字分配机构 )进行分配(有偿租用) #### 最初的 IP 地址分类方案 ![image-20241107013044552.png][9] - 在那个年代,要求每台主机、每个路由器接口被分配的IP地址都是全球唯一的。 - 路由器和路由器连接的接口可以不分配 IP 地址,但路由器和其他节点连接的接口必须分配 IP 地址。 - 从属于同一个网络的所有主机、路由器接口的 IP 地址 “网络号” 都相同。 - 当一台新主机接入网络时,需要给它分配一个 IP 地址、并配置 “默认网关”。 #### 特殊用途的 IP 地址 | 网络号 | 主机号 | 作为分组源地址? | 作为分组目的地址? | 代表的含义 | | ------ | ---------------------- | ---------------- | ------------------ | ---------------------------------------------------- | | Y | 全 0 | 不可以 | 不可以 | 表示整个网络本身(只能用于路由表、转发表) | | Y | 全 1 | 不可以 | 可以 | 向网络号为 Y 的网络广播 IP 分组 | | 0 | Y | 可以 | 不可以 | 表示本网络中主机号为 Y 的主机 | | 全 0 | 全 0 | 可以 | 不可以 | 本网络上的本主机(会在DHCP协议中使用) | | 全 1 | 全 1 | 不可以 | 可以 | 向本网络广播 IP 分组 | | 127 | 非全 0 或全 1 的任何数 | 可以 | 可以 | 环回自检地址。表示一台主机本身,用于本地软件环回测试 | > 以上这些特殊地址不能指派给网路中的任何一台主机或路由器 “私用” 。 重要结论:前两行说明,如果一个网络中,主机号占 $N$ bit,那么这个网络中,最多支持 $2^N-2$ 台主机 & 路由器。 #### 子网划分技术 ![image-20241107094201696.png][10] > 子网掩码的 CIDR 记法:用一个数字表示前多少位是 1 ,如 166.1.0.5/17 。 **发送 IP 数据报的过程**: ![image-20241107094412476.png][11] **路由器转发 IP 数据报的过程**: ![image-20241107094434680.png][12] #### 无分类编址 CIDR 时代背景:1993 年推出无分类编址 CIDR ,当时互联网在民用领域大放异彩,由于每台主机都至少要消耗一个全球唯一的 IP 地址,IP 地址资源告急。 ![image-20241107144500231.png][13] > 主机号全 0 和全 1 不能分配主机 #### 路由聚合 对于一个路由转发表,如果几条路由表项的**转发接口相同**,**部分网络前缀也相同**,那么可以将这几条路由表项聚合为一条。这种地址的聚合称为路由聚合,也称构成超网。 ![image-20241107150222056.png][14] - 路由聚合可以减少路由表的大小。 - 路由聚合可能会引入额外的无效地址。如上面的例子中,128.14.32.156/30 就是一个无效地址。 **最长可匹配原则**:假设路由器收到了一个来自互连网的 IP 数据报,目的地址为 128.14.32.131 ,路由器的路由表如下: ![image-20241107151014432.png][15] 根据最长前缀匹配原则,该数据报会命中表项 2,从 G3 接口转发出去。 采用 CIDR 技术后,由于 “路由聚合”,一个IP地址在转发表中可能会匹配多个表项,此时应使用最长前缀匹配原则。 #### 网络地址转换 NAT 网络层实现了 “主机到主机” 的通信。网络层在 IP 数据报的首部,指明源 IP 地址、目的IP地址。 传输层实现了 “端到端”(进程到进程)的通信。传输层在 TCP (或 UDP ) 报文段的首部,指明源端口、目的端口。 端口号指向主机上一个特定的进程。 ![image-20241107201812898.png][16] #### 地址解析协议 ARP 广播找人,单播回复。 ![image-20241107211338241.png][17] #### 动态主机配置协议 DHCP 动态主机配置协议(Dynamic Host Configuration Protocol,DHCP)常用于给主机动态分配IP 地址、配置子网掩码、默认网关等网络相关的参数。 DHCP 是**应用层协议**,使用 UDP 的提供的服务。 互连网协议中,一些特殊的端口是绑定特定的应用的。比如 67 端口是绑定的 DHCP 服务。 同一个局域网可能存在多个 DHCP 服务器,新主机可能会收到多个 OFFER 数据报,因此 REQUEST 报文也需要广播,告诉其他 DHCP 服务器我选择的是哪个 IP 。 ![image-20241107213115671.png][18] ## IPv6 ### 数据报格式 ![image-20241107215058746.png][19] 数据报头部: ![IPv6报文头格式.png][20] - Version:版本号,长度为 4bit 。对于 IPv6 ,该值为 6 。 - Traffic Class:流类别,长度为8bit。等同于 IPv4 中的 TOS 字段,表示 IPv6 数据报的类或优先级,主要应用于 QoS 。 - Flow Label:流标签,长度为 20bit 。IPv6 中的新增字段,用于区分实时流量,不同的流标签 + 源地址可以唯一确定一条数据流,中间网络设备可以根据这些信息更加高效率的区分数据流。 - Payload Length:有效载荷长度,长度为 16bit 。有效载荷是指紧跟 IPv6 报头的数据报的其它部分(即扩展报头和上层协议数据单元)。该字段只能表示最大长度为 65535 字节的有效载荷。如果有效载荷的长度超过这个值,该字段会置 0 ,而有效载荷的长度用逐跳选项扩展报头中的超大有效载荷选项来表示。 - Next Header:下一个报头,长度为 8bit 。该字段定义紧跟在 IPv6 报头后面的第一个扩展报头(如果存在)的类型,或者上层协议数据单元中的协议类型。 - Hop Limit:跳数限制,长度为 8bit 。该字段类似于 IPv4 中的 Time to Live 字段,它定义了 IP 数据报所能经过的最大跳数。每经过一个设备,该数值减去 1 ,当该字段的值为 0 时,数据报将被丢弃。 - Source Address:源地址,长度为 128bit 。表示发送方的地址。 - Destination Address:目的地址,长度为 128bit 。表示接收方的地址。 ### 对比 IPv4 1. IPv6 将地址从 32 位(4B)扩大到 **128 位(16B)**,更大的地址空间 2. IPV6 将 IPv4 的**校验和字段彻底移除**,以减少每跳的处理时间。 3. IPV6 将 IPv4 的可选字段移出首部,变成了**扩展首部**,成为灵活的首部格式,路由器通常不对扩首部进行检查,大大提高了路由器的处理效率。 4. IPv6支持**即插即用**(即自动配置),不需要 DHCP 协议。 5. IPv6 首部长度必须是 **8B 的整数倍**,IPv4 首部是 4B 的整数倍。 6. IPv6 **只能在主机处分片**,IPv4 可以在路由器和主机处分片。 7. ICMPv6:附加报文类型 “分组过大” 。 8. IPv6 支持资源的预分配,支持实时视像等要求,保证一定的带宽和时延的应用。 9. IPv6 取消了协议字段,改成下一个首部字段。 10. IPv6 取消了总长度字段,改用有效载荷长度字段。 11. IPv6 取消了服务类型字段。 ### 地址表示形式 IPv6地址总长度为128比特,通常分为8组,每组为4个十六进制数的形式,每组十六进制数间用冒号分隔。例如:`FC00:0000:130F:0000:0000:09C0:876A:130B`,这是 IPv6 地址的首选格式。 为了书写方便,IPv6还提供了压缩格式,以上述 IPv6 地址为例,具体压缩规则为: - 每组中的前导 “0” 都可以省略,所以上述地址可写为:`FC00:0:130F:0:0:9C0:876A:130B`。 - 地址中包含的连续两个或多个均为 0 的组,可以用双冒号 “::” 来代替,所以上述地址又可以进一步简写为:`FC00:0:130F::9C0:876A:130B`。 - 需要注意的是,在一个 IPv6 地址中**只能使用一次**双冒号 “::” ,否则当计算机将压缩后的地址恢复成 128 位时,无法确定每个 “::” 代表 0 的个数。 ### 基本地址类型 IPv6 地址分为单播地址、任播地址(Anycast Address)、组播地址三种类型。和 IPv4 相比,取消了广播地址类型,以更丰富的组播地址代替,同时增加了任播地址类型。 - 单播:传统的点对点通信。 - 多播:一点对多点的通信,数据报发送到一组计算机中的每一台。 - 任播:IPv6 新增加的一种类型。任播的终点是一组计算机,但数据报只交付其中的一台计算机,通常是距离最近的一台计算机。 ### IPv4 向 IPv6 过渡 1. **双协议栈**。 双协议栈技术就是指在一台设备上同时启用 IPv4 协议栈和 IPv6 协议栈。这样的话,这台设备既能和 IPv4 网络通信,又能和 IPv6 网络通信。如果这台设备是一个路由器,那么这台路由器的不同接口上,分别配置了 IPv4 地址和 IPv6 地址,并很可能分别连接了 IPv4 网络和 IPv6 网络。如果这台设备是一个计算机,那么它将同时拥有 IPv4 地址和 IPv6 地址,并具备同时处理这两个协议地址的功能。 2. **隧道技术**。 通过使用互联网络的基础设施在网络之间传递数据的方式。使用隧道传递的数据(或负载)可以是不同协议的数据顿或包。隧道协议将其它协议的数据顿或包重新封装然后通过隧道发送。 ## 路由算法与路由协议 > 如何让路由器之间自动配合,生成路由表。 ### 路由算法 路由选择协议的核心就是路由算法,即需要何种算法来获得路由表中的各个项目。 路由算法的目的很简单:给定一组路由器及连接路由器的链路,路由算法要找到一条从源路由器到目的路由器的 "最佳" 路径。 #### 静态路由与动态路由 路由器转发分组是通过路由表转发的,而路由表是通过各种符法得到的。从能否随网络的通信量或拓扑自适应地进行调整变化来划分,路由算法可以分为如下两大类: - **静态路由算法**。指由网络管理员手工配置每一条路由。 静态路由算法的特点是简单和开销较小,但不能及时适应网络状态的变化,适用于简单的小型网络。 - **动态路由算法**。根据网络流掘负载和拓扑结构的变化来动态调整自身的路由表。 动态路由算法能较好地适应网络状态的变化,但实现复杂,开销也大,适用于较复杂的大网络。 ### 路由信息协议 (RIP) 路由信息协议 (Routing Information Protocol, RIP) 是内部网关协议 IGP 中最先得到广泛应用的协议。RlP 是一种分布式的**基于距离-向量的路由选择协议**。 #### 距离-向量路由算法 距离-向量算法的基础是 Bellman-Ford 算法,它用于计算**单源最短路径**。每个节点以自身为源点执行 Bellman-Ford 算法,**在全局上可以解决任意节点对之间的最短路径问题**。 下面讨论 Bellman-Ford 算法的基本思想。 假设 $d_x(y)$ 表示从节点 $x$ 到节点 $y$ 的带权最短路径的费用,则有 $$ d_x(y) = min\{ c(x, v) + d_v(y) \} $$ 其中 $v$ 是 $y$ 的所有邻居,$c(x, v)$ 是从 $x$ 到其邻居 $v$ 的费用。已知 $x$ 的所有邻居到 $y$ 的最短路径费用后, 从 $x$ 到 $y$ 的最短路径费用是对所有邻居 $v$ 的 $c(x,v) + d_v(y)$ 的最小值。所有最短路径算法都依赖于一个性质:"**两点之间的最短路径也包含了路径上其他顶点间的砐短路径**"。 ![image-20241112153925114.png][21] #### RIP 的规定 - 网络中的每个路由器都要维护从它自身到其他每个目的网络的距离记录,即**距离向量**。 - RIP 使用跳数 (Hop Count)(或称距离)来衡量到达目的网络的距离。规定从一路由器到直接连接的网络的距离定义为 1 ;而每经过一个路由器,距离就加 1 。 - RlP 认为好的路由就是它通过的路由器数目少,即距离短或跳数少。 - RlP 允许一条路径最多只能包含 15 个路由器。因此**距离等于 16 时表示网络不可达**。可见 RIP **只适用于小型互联网**。距离向量路由可能会出现环路的情况,规定路径上的最高跳数的目的是为了**防止分组不断在环路上循环**,减少网络拥塞的可能性。 - 每个路由表项都有三个关键字段:<目的网络 $N$, 距离 $d$, 下一跳路由器地址 $X$>。 #### RIP 的工作过程 RIP 是应用层协议, 它使用 UDP 传送数据(端口 520)。RIP 选择的路径不一定是时间最短的,但一定是具有最少的路由跳数,因为它是根据最少跳数进行路径选择的。 RlP 的每个路由器都要不断与其他路由器交换信息,下面三个特点非常重要: 1. 和谁交换信息: 仅和直接相邻的路由器交换信息。 2. 交换什么信息: 交换的信息是本路由器所知道的全部信息,即自己的路由表。 3. 何时交换信息: 按固定的时间间隔(如30秒)交换路由信息。当网络拓扑发生变化时,路由器也及时向相邻路由器通告拓扑变化后的路由信息。 路由器刚开始工作时, 只知道自己到直接相连的几个网络的距离为 1 。每个路由器仅和相邻路由器周期性地交换并更新路由信息。经过若干次交换和更新后, 所有的路由器最终都会知道到达本自治系统内任何网络的最短距离和下一跳路由器的地址,称为**收敛**。 > 路由器本地会存放上一次交换中邻居发来的路由表。参考 2016 年的 37 题。 #### RIP 的优缺点 **优点**: - 实现简单、开销小、收敛过程较快。 - 若一个路由器发现了更短的路由,则这种更新信息就传播得很快,在较短时间内便可被传至所有路由器,俗称 "**好消息传播得快**" 。 **缺点**: - RIP 限制了网络的规模,它能使用的最大距离为 15 (16 表示不可达) 。 - 路由器之间交换的是路由器中的完整路由表,因此网络规模越大,开销也越大。 - 当网络出现故障时,路由器之间需反复多次交换信息才能完成收敛,要经过较长时间才能将故障消息传送到所有路由器 (即慢收敛现象) ,俗称 "**坏消息传播得慢**" 。 #### 小结 ![image-20241112151610216.png][22] ### 开放最短路径优先协议 (OSPF) 开放最短路径优先 (OSPF) 协议是使用分布式链路状态路由算法的典型代表 ,也是内部网关协议 (IGP) 的一种。 #### 链路状态路由算法 链路状态是指本路由器都和哪些路由器相邻,以及相应链路的代价。链路状态算法要求每个结点都**具有全网拓扑结构图**(这个拓扑结构图在全网范围内是一致的),它们执行下列两项任务: - 主动测试所有相邻结点的状态; - 定期地将链路状态传播给所有其他结点。 因此每个结点都知道全网共有多少个结点、哪些结点是相连的、其代价是多少等,于是每个结点都可使用 Dijkstra 最短路径算法计算出到达其他结点的最短路径。 链路状态算法的**主要优点**是, 每个结点都使用同样的链路状态数据独立地计算路径, 而不依赖中间结点的计算链路状态报文不加改变地传播, 因此采用该算法**易于查找故障**。当一个结点从所有其他结点接收到报文时,它就在本地立刻计算出正确的路径,保证一步汇聚。最后,因为链路状态报文仅运载来自单个结点关于直接链路的信息, 其大小与网络中的结点数 H 无关, 所以链路状态算法比距离-向量算法有更好的规模可伸展性。 #### 洪泛法 洪泛法(Flooding)是计算机网络中一种简单直接的数据传输技术,它不依赖于网络中的路由表或者路径选择算法。在洪泛法中,每个接收到消息的节点将消息复制并发送给除了消息来源外的所有其他节点。这个过程一直重复,直到消息到达网络中的所有节点或者达到了预设的跳数限制。 **工作原理**:洪泛法的工作原理基于 “广播” 机制,每个节点接收到消息后,会将该消息发送给所有可达的邻居节点,除了它从中接收到消息的节点。这种方法确保了网络中的每个节点都将接收到消息,但也可能导致大量的重复消息,特别是在大型或密集网络中。 #### OSPF 与 RIP 的区别 OSPF与 RlP 相比有以下 4 点主要区别: 1. OSPF 向本自治系统中所有路由器发送信息。这里使用的方法是**洪泛法**,而 RIP 仅仅向自已相邻的几个路由器发送信息。 2. 发送的信息是与本路由器相邻的所有路由器的链路状态,但这只是路由器所知道的部分信息。而在 RIP 中,发送的信息是本路由器所知道的全部信息,即整个路由表。 3. 只有当链路状态发生变化时,路由器才用洪泛法向所有路由器发送此信息,并且更新过程收敛得快,不会出现 RIP “坏消息传得慢"的问题。而在 RIP 中, 不管网络拓扑是否发生变化,路由器之间都要定期交换路由表的信息。 4. OSPF 是**网络层协议**, 它不用 UDP 或 TCP ,而直接**用 IP 数据报传送** (其 IP 数据报首部的协议字段为 89) 。而 RIP 是应用层协议, 它在传输层使用 UDP 。ppp #### OSPF 特点 除以上区别外,OSPF还有以下特点: - OSPF 允许对每条路由设置成不同的代价,对不同类型的业务可计算出不同的路由。 - 若到同一个目的网络有多条相同代价的路径,则可将通信量分配给这几条路径。 - OSPF 分组具有鉴别功能,从而保证仅在可信赖的路由器之间交换链路状态信息。 - 每个链路状态都带上一个 32 位的序号,序号越大,状态就越新。(洪泛法需要) #### OSPF 基本工作原理 因为各路由器之间频繁地交换链路状态信息,所以所有路由器最终都能建立一 个**链路状态数据库**,即**全网的拓扑结构图**。然后,每个路由器利用链路状态数据库中的数据,**使用 Dijkstra 算法计算自己到达各自的网络的最优路径**,构造出白己的路由表。此后,**当链路状态发生变化时**,每个路由器**重新计算**到达各自的网络的最优路径,构造出新的路由表。 > 虽然使用 Diikstra 算法能计算出完整的最优路径,但路由表中不会存储完整路径,而只存储 “下一跳”(只有到了下一跳路由器,才能知道再下一跳应当怎样走) 为了使OSPF能够用于规模很大的网络,OSPF 将一个自治系统再划分为若干更小的范围,称为**区域**。划分区域的好处是,将利用洪泛法交换链路状态信息的范围局限在每个区域而非整个自治系统,从而减少了整个网络上的通信量。 #### OSPF 分组类型 OSPF共有以下五种分组类型: 1. 问候分组,用来发现和维持邻站的可达性。 2. 数据库描述分组,向邻站给出自己的链路状态数据库中的所有链路状态项目的摘要信息。 3. 链路状态请求分组,向对方请求发送某些链路状态项目的详细信息。 4. 链路状态更新分组,用洪泛法对全网更新链路状态,它是OSPF最核心的部分。 5. 链路状态确认分组,对链路更新分组的确认。 #### 小结 ![image-20241112165826224.png][23] ### 边界网关协议 BGP **边界网关协议**(BorderGatewayProtocol,BGP)是不同自治系统 AS 的路由器之间交换路由信息的协议,是一种**外部网关协议**。边界网关协议 BGP **常用于互联网的网关之间**。 **自治系统 (Autonomous System, AS)** :自治系统是在单一技术管理下的一组路由器,这些路由器使用一种 AS 内部的路由选择协议和共同的度量。一个 AS 对其他 AS 表现出的是一个单一的和一致的路由选择策略。 内部网关协议主要是设法使数据报在一个 AS 中尽可能有效地从源站传送到目的站。在一个 AS 内部也不需要考虑其他方面的策略。然而 BGP 使用的环境却不同,主要原因如下: 1. 互联网的规模太大,使得 AS 之间路由选择非常困难,每个主干网路由器表中的项目数都非常庞大。对于 AS 之间的路由选择,要寻找最佳路由是很不现实的。 2. AS 之间的路由选择必须考虑政治、安全或经济等有关因素。 BGP 只能是力求**寻找一条能够到达目的网络且比较好的路由**(不能兜圈子),而并非要寻找一条最佳路由。BGP 采用的是**路径向量路由选择协议**,它与距离向量协议(如 RIP)和链路状态协议(如 OSPF)都有很大的区别。 #### BGP 工作原理 BGP 是应用层协议,它是**基于 TCP** 的。BGP 的工作原理如下: 1. 配置 BGP 时,每个 AS 的管理员要选择至少一个路由器,作为该 AS 的 “BGP发言人” 。BGP发言人往往就是 BGP **边界路由器**。 2. 一个 BGP 发言人与其他 AS 中的 BGP 发言人要交换路由信息,就要先建立 TCP 连接,然后在此连接上交换 BGP 报文以建立 BGP 会话,再**利用 BGP 会话交换路由信息**。使用 TCP 连接交换路由信息的两个 BGP 发言人,彼此成为对方的**邻站**或**对等站**。每个 BGP 发言人除了必须运行 BGP 外,还必须运行该 AS 所用的内部网关协议,如 OSPF 或 RIP 。 ![image-20241113001850494.png][24] 3. BGP 所交换的网络可达性的倍息, 就是要到达某个网络所要经过的一系列自治系统。当 BGP 发言人互相交换网络可达性的信息后,各 BGP 发言人就根据所用的策略,从收到的路由信息中找出到达各自治系统的较好路由。 - 优先选择 AS 路径较短的路由; - 若有多个边界路由 AS 路径相同,则使用 "热土豆路由" ,即选择最快能到达的边界路由。 > 使用 2024 年的 47 题加深理解。 #### BGP 协议的会话 - EBGP:边界路由器告知其他 AS 自己内部有哪些路由信息。 - IBGP:边界路由器通知 AS 内部路由器到达其他 AS 的路由信息。 #### BGP-4 报文 1. 打开(Open)报文。用来与相邻的另一个BGP发言人建立关系,使通信初始化。 2. 更新(Update)报文。用来通知某一路由的信息,以及列出要撤销的多条路由。 3. 保活(Keepalive)报文。用来周期性地证实邻站的连通性。 4. 通知(Notification)报文。用来发送检测到的差错。 ### 三种路由协议的比较 | 协议 | RIP | OSPF | BGP | | ------------ | -------------- | ------------------------------------ | ------------------------------------------ | | **类型** | 内部 | 内部 | 外部 | | **路由算法** | 距离向量 | 链路状态 | 路径向量 | | **传递协议** | UDP | IP | TCP | | **路径选择** | 跳数最少 | 代价最低 | 较好,非最佳 | | **交换节点** | 和本结点相邻的 | 网络中所有的路由器 | 和本结点相邻的路由器 | | **交换内容** | 自己的路由表 | 与本路由器相邻的所有路由器的链路状态 | 第一次交换整个路由表,以后只交换变化的部分 | ## IP 组播 ### IP 数据报的三种传输方式 - **单播**:单播用于发送数据包到单个目的地,且每发送一份单播报文都使用一个单播 IP 地址作为目的地址。是一种**点对点**传输方式。 - **广播**:广播是指发送数据包到同一广播域或子网内的所有设备的一种数据传输方式,是一种**点对多点**传输方式。 - **组播 (多播) **:当网络中的某些用户需要特定数据时,组播数据发送者仅发送一次数据,借助组播路由协议为组播数据包建立组播分发树,被传递的数据到达距离用户端尽可能近的节点后才开始复制和分发,是一种**点对多点**传输方式。 ![image-20241107223349180.png][25] 组播提高了数据传送效率。减少了主干网出现拥塞的可能性。组播组中的主机可以是在同一个物理网络,也可以来自不同的物理网络(如果有组播路由器的支持) ### IP 组播地址 IP组播地址让源设备能够将分组发送给一组设备。属于多播组的设备将被分配一个组播组IP地址(一群共同需求主机的相同标识)。 组播地址范围为 224.0.0.0~239.255.255.255(D类地址),一个 D 类地址表示一个组播组。**只能用作分组的目标地址**。源地址总是为**单播地址**。 - 组播数据报也是“尽最大努力交付”,不提供可靠交付,应用于UDP。 - 对组播数据报不产生 ICMP 差错报文。 - 并非所有D类地址都可以作为组播地址。 ### 硬件组播 同单播地址一样,组播IP地址也需要相应的组播 MAC 地址在本地网络中实际传送帧。组播 MAC 地址以十六进制值 01-00-5E 打头,余下的 6 个十六进制位是根据 IP 组播组地址的最后 23 位转换得到的。 TCP/IP 协议使用的以太网多播地址的范围是:从 01-00-5E-00-00-00 到 01-00-5E-7F-FF-FF 。 ![image-20241107223755095.png][26] > 收到多播数据报的主机,还要在 IP 层利用软件进行过滤,把不是本主机要接收的数据报丢弃。 ### 网际组管理协议 IGMP IGMP 协议让路由器知道本局域网上是否有主机(的进程)参加或退出了某个组播组。 ICMP 和 IGMP 都使用 IP 数据报传递报文。 #### 工作流程 1. 某主机要加入组播组时,该主机向组播组的组播地址发送一个IGMP报文,声明自己要称为该组的成员。 本地组播路由器收到 IGMP 报文后,要利用组播路由选择协议把这组成员关系发给因特网上的其他组播路由器。 2. 本地组播路由器周期性探询本地局域网上的主机,以便知道这些主机是否还是组播组的成员。 只要有一个主机对某个组响应,那么组播路由器就认为这个组是活跃的;如果经过几次探询后没有一个主机响应,组播路由器就认为本网络上的没有此组播组的主机,因此就不再把这组的成员关系发给其他的组播路由器。 > 组播路由器知道的成员关系只是所连接的局域网中有无组播组的成员。 ### 组播路由选择协议 组播路由选择协议目的是找出以源主机为根节点的**组播转发树**。 构造树可以避免在路由器之间兜圈子。对不同的多播组对应于不同的多播转发树;同一个多播组,对不同的源点也会有不同的多播转发树。 组播路由选择协议常使用的三种算法: - 基于链路状态的路由选择 - 基于距离-向量的路由选择 - 协议无关的组播 (稀疏/密集) ## 移动 IP > 真题暂未考过 移动 IP 技术是移动结点(计算机/服务器等)以固定的网络 IP 地址,实现跨越不同网段的漫游功能,并保证了基于网络 IP 的网络权限在漫游过程中不发生任何改变。 - 移动节点:具有永久 IP 地址的移动设备。 - 归属代理(本地代理):一个移动结点的永久 “居所” 称为**归属网络**,在归属网络中代表移动节点执行移动管理功能的实体叫做归属代理。 - 永久地址(归属地址/主地址):移动站点在归属网络中的原始地址。 - 外部代理(外地代理):在外部网络中帮助移动节点完成移动管理功能的实体称为外部代理。 - 转交地址(辅地址):可以是外部代理的地址或动态配置的一个地址。 ### 移动 IP 的通信过程 ![image-20241107224955581.png][27] 当 A 刚进入外部网络时: 1. 获得外部代理的转交地址(外部代理广播报文)。 2. 移动节点通过外部代理发送注册报文给归属代理(包含永久地址&转交地址)。 3. 归属代理接收请求,并将移动节点的永久地址和转交地址绑定(以后到达该归属代理的数据报且要发往移动节点的数据报将被封装并以隧道方式发给转交地址),并返回一个注册响应报文。 4. 外部代理接收注册响应,并转发给移动节点。 当 A 移动到了下一个网络时: 1. 在新外部代理登记注册一个转交地址。 2. 新外部代理给本地代理发送新的转交地址(覆盖旧的)。 3. 通信。 当 A 回到了归属网络时: 1. A 向本地代理注销转交地址。 2. 按原始方式通信。 [1]: https://blog.domineto.top/usr/uploads/2024/11/1043668738.png [2]: https://blog.domineto.top/usr/uploads/2024/11/1808645312.png [3]: https://blog.domineto.top/usr/uploads/2024/11/3740104475.png [4]: https://blog.domineto.top/usr/uploads/2024/11/1632898781.png [5]: https://blog.domineto.top/usr/uploads/2024/11/25126494.png [6]: https://blog.domineto.top/usr/uploads/2024/11/4073341673.png [7]: https://blog.domineto.top/usr/uploads/2024/11/1570076220.png [8]: https://blog.domineto.top/usr/uploads/2024/11/3244744125.png [9]: https://blog.domineto.top/usr/uploads/2024/11/3327004374.png [10]: https://blog.domineto.top/usr/uploads/2024/11/3957698364.png [11]: https://blog.domineto.top/usr/uploads/2024/11/2704107053.png [12]: https://blog.domineto.top/usr/uploads/2024/11/786314923.png [13]: https://blog.domineto.top/usr/uploads/2024/11/2019440561.png [14]: https://blog.domineto.top/usr/uploads/2024/11/2090991299.png [15]: https://blog.domineto.top/usr/uploads/2024/11/2026566454.png [16]: https://blog.domineto.top/usr/uploads/2024/11/2604727090.png [17]: https://blog.domineto.top/usr/uploads/2024/11/3855624518.png [18]: https://blog.domineto.top/usr/uploads/2024/11/1794695820.png [19]: https://blog.domineto.top/usr/uploads/2024/11/2767688066.png [20]: https://blog.domineto.top/usr/uploads/2024/11/3088162150.png [21]: https://blog.domineto.top/usr/uploads/2024/11/1341985254.png [22]: https://blog.domineto.top/usr/uploads/2024/11/2057855639.png [23]: https://blog.domineto.top/usr/uploads/2024/11/1060158520.png [24]: https://blog.domineto.top/usr/uploads/2024/11/1982755819.png [25]: https://blog.domineto.top/usr/uploads/2024/11/2492437747.png [26]: https://blog.domineto.top/usr/uploads/2024/11/3285659448.png [27]: https://blog.domineto.top/usr/uploads/2024/11/2665334998.png 最后修改:2024 年 11 月 13 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏