计算机网络(五):网络层

article/2025/8/23 23:45:18

文章目录

  • 1. 网络层概述
    • 1.1 路由器工作原理
  • 2. IP:网际协议
    • 2.1 IPv4数据报格式
    • 2.2 IP地址
      • 2.2.1 IP地址的分类
      • 2.2.2 广播和多播
      • 2.2.3 子网和子网掩码
      • 2.2.4 CIDR与VLSM
      • 2.2.5 公有地址和私有地址
    • 2.3 路由控制
    • 2.4 IP 分片和重组
      • 2.4.1 路径 MTU 发现
    • 2.5 IPv6
      • 2.5.1 IPv6 特点
      • 2.5.2 IPv6 数据报格式
      • 2.5.3 IPv6 地址
  • 3. 与IP相关的其他协议
    • 3.1 DNS
    • 3.2 ARP:地址解析协议
    • 3.3 RARP:逆地址解析协议
    • 3.4 ICMP:因特网控制报文协议
    • 3.5 DHCP:动态主机配置协议
    • 3.6 NAT:网络地址转换
    • 3.7 IGMP:因特网组管理协议
  • 4. 动态路由选择协议
    • 4.1 RIP:选路信息协议
    • 4.2 OSPF:开放最短路径优先
    • 4.3 BGP:边界网关协议
  • 5. Ping 程序
  • 6. Traceroute程序

1. 网络层概述

网络层能够被分解为两个相互作用的部分,即数据平面控制平面

  • 数据平面
    • 即网络层中每台路由器的功能,该数据平面功能决定到达路由器输入链路之一的数据报,如何转发到该路由器的输出链路之一。
  • 控制平面
    • 控制平面的功能是控制数据报沿着从源主机到目的主机的端到端路径中路由器之间的路由方式。
    • 又分为传统方法和SDN方法。

网络层需要将分组从一台发送主机移动到一台接受主机,需要使用两种重要的网络层功能

  • 转发:属于数据平面。
    • 当一个分组到达路由器的一条输入链路时,路由器必须将该分组移动到适当的输出链路。
    • 每台网络路由器都维护一张转发表,通过检查到达分组首部的一些字段,转发分组。
  • 路由选择:属于控制平面。
    • 当分组从发送方流向接收方时,网络层必须决定这些分组所采用的路由或路径,计算这些路径的算法被称为路由选择算法( routing algorithm)。

网络服务模型 (network service model) 定义了分组在发送与接收端系统之间的端到端运输特性。

  • 确保交付
    • 该服务确保分组将最终达到目的地。
  • 具有时延上界的确保交付
    • 该服务不仅确保分组的交付,而且在特定的主机到主机时延上界内交付。
  • 有序分组交付
    • 该服务确保分组以它们发送的顺序到达目的地。
  • 确保最小带宽
    • 只要发送主机以低于特定比特率的速率传输比特(作为分组的组成部分) ,则所有分组最终会交付到目的主机。
  • 安全性
    • 网络层能够在源加密所有数据报并在目的地解密这些分组,从而对所有运输层报文段提供机密性。

网络层提供了单一的服务,称为尽力而为服务(best - effort service)。使用尽力而为服务,传送的分组既不能保证已它们的顺序被接收,也不能保证它们最终交付;既不能保证端到端实验,也不能保证有最小带宽。尽力而为服务看起来是根本无服务的一种委婉说法!

1.1 路由器工作原理

在这里插入图片描述

路由器包括4个组件

  • 输入端口:执行将一条输入的物理链路与路由器相连接的物理层功能。
  • 交换结构:交换结构将路由器的输入端口与输出端口相连接。
  • 输出端口:输出端口存储从交换结构接收的分组,并通过执行必要的链路层和物理层功能在输出链路上传输这些分组。
  • 路由选择处理器:执行路由选择协议,维护路由选择表以及连接的链路状态信息,并为路由器计算转发表。

2. IP:网际协议

IP 是 TCP/IP 协议族中最为核心的协议。所有的 TCP、UDP、ICMP 及 IGMP 数据都以 IP 数据报格式传输。

2.1 IPv4数据报格式

网络层分组被称为数据报。

在这里插入图片描述

  • 版本号:四比特规定了数据报的IP协议版本,目前是4,称为IPv4。
  • 首部长度:因为包含一些可变数量的选项,所以需要长度来标识。
  • 服务类型:服务类型(TOS)用来区分不同类型的IP数据报,其中4 bit的TOS分别代表:最小时延、最大吞吐量、最高可靠性和最小费用。4 bit中只能置其中1 bit。用来提供特定等级的服务。
  • 总长度:总长度字段是指整个 I P数据报的长度,以字节为单位。
  • 标识、标志。片偏移:和IP分片有关。
  • 生存时间:(Time To Live,TTL)生存时间字段设置了数据报可以经过的最多路由器数。每经过一个处理它的路由器,它的值就会减1,值为0时则丢弃数据报。确保数据报不会永远在网络中循环。
  • 协议:该字段通常仅当一个IP数据报达到其最终目的地才被用于将数据报分用给不同的传输层协议。
  • 首部校验和:用于帮助路由器检测收到IP数据报中的比特错误。
  • 源 IP 地址和目的 IP 地址:标识从哪里来要去哪里。
  • 选项:选项字段允许IP首部被扩展,些选项很少被使用,并非所有的主机和路由器都支持这些选项。
  • 数据:数据报传送的主要数据。

2.2 IP地址

在用TCP/IP通信时,用IP地址识别主机和路由器。为了保证正常通信,有必要为每个设备配置正确的IP地址。

IP地址(IPv4地址)由32位正整数来表示。IP地址在计算机内部以二进制方式被处理。然而,由于人类社会并不习惯于采用二进制方式,需要采用一种特殊的标记方式。那就是将32位的IP地址以每8位为一组分成4组每组以“.”隔开,再将每组数转换为十进制数(这种方法也叫做“十进制点符号”(Dotdecimal notation)。)

例如

在这里插入图片描述
IP地址由“网络标识(网络地址)”和“主机标识(主机地址)”两部分组成(192.168.128.10/24中的“/24”表示从第1位开始到多少位属于网络标识。在这个例子中,192.168.128之前的都是该IP的网络地址。

网络标识在数据链路的每个段配置不同的值。网络标识必须保证相互连接的每个段的地址不相重复。而相同段内相连的主机必须有相同的网络地址。IP地址的“主机标识”则不允许在同一个网段内重复出现。确保在相互连接的整个网络中每台主机的IP地址都不会相互重叠。即IP地址具有了唯一性。

2.2.1 IP地址的分类

IP地址分为四个级别,分别为A类、B类、C类、D类(还有一个一直未使用的E类。) 。它根据IP地址中从第1位到第4位的比特列对其网络标识和主机标识进行区分。

  • A类地址
    • A类IP地址是首位以“0”开头的地址。从第1位到第8位(去掉分类位剩下7位。) 是它的网络标识。A类地址的后24位相当于主机标识。
    • 一个网段内可容纳的主机地址上限为16,777,214个。
  • B类地址
    • B类IP地址是前两位为“10”的地址。从第1位到第16位(去掉分类位剩下14位。) 是它的网络标识。B类地址的后16位相当于主机标识。
    • 一个网段内 可容纳的主机地址上限为65,534个。
  • C类地址
    • C类IP地址是前三位为“110”的地址。从第1位到第24位(去掉分类位剩下21位。) 是它的网络标识。C类地址的后8位相当于主机标识。
    • 一个网段内可容纳的主机地址上限为254个。
  • D类地址
    • D类IP地址是前四位为“1110”的地址。从第1位到第32位(去掉分类位剩下28位。) 是它的网络标识。D类地址没有主机标识,常被用于多播。

在这里插入图片描述

  • 注意用比特位表示主机地址时,不可以全部为0或全部为1。因为全部为只有0在表示对应的网络地址或IP地址不可获知的情况下才使用。而全部为1的主机地址通常作为广播地址。因此,在分配过程中,应该去掉这两种情况。所以最大可容纳的主机会减去2。

2.2.2 广播和多播

广播

  • 广播地址用于在同一个链路中相互连接的主机之间发送数据包。将IP地址中的主机地址部分全部设置为1,就成为了广播地址。广播分为本地广播和直接广播两种。
    • 在本网络内的广播叫做本地广播。例如网络地址为192.168.0.0/24的情况下,广播地址是192.168.0.255。因为这个广播地址的IP包会被路由器屏蔽,所以不会到达192.168.0.0/24以外的其他链路上。
    • 在不同网络之间的广播叫做直接广播。例如网络地址为192.168.0.0/24的主机向192.168.1.255/24的目标地址发送IP包。收到这个包的路由器,将数据转发给192.168.1.0/24,从而使得所有192.168.1.1~192.168.1.254的主机都能收到这个包(由于直接广播有一定的安全问题,多数情况下会在路由器上设置为不转发。) 。

多播

  • 多播用于将包发送给特定组内的所有主机
  • 由于⼴播⽆法穿透路由,若想给其他⽹段发送同样的包,就可以使⽤可以穿透路由的多播。
  • 多播使用D类地址。因此,如果从首位开始到第4位是“1110”,就可以认为是多播地址。而剩下的28位可以成为多播的组编号。
  • 从224.0.0.0到239.255.255.255都是多播地址的可用范围。其中从224.0.0.0到224.0.0.255的范围不需要路由控制,在同一个链路内也能实现多播。

2.2.3 子网和子网掩码

IP分类的好处与坏处:

  • 好处:
    • 结构简单明了,基于网络地址的选路简单。
  • 坏处:
    • 网络标识相同的计算机必须同属于同一个链路。 A类和B类地址为主机号分配了太多的空间,在实际网络架构当中,一般不会有在同一个链路上连接6万5千多台计算机的情况。造成资源的浪费。

因为IP分类的坏处,导致的资源浪费,现在所有的主机都要求支持子网编址( RFC 950 [Mogul and Postel 1985])。不是把 IP 地址看成由单纯的一个网络号和一个主机号组成,而是把主机号再分成一个子网号和一个主机号。

除了 IP 地址以外,主机还需要知道有多少比特用于子网号及多少比特用于主机号。这是在引导过程中通过子网掩码来确定的。这个掩码是一个 32 bit的值,其中值为 1的比特留给网络号和子网号,为0的比特留给主机号。

将子网掩码和 IP 地址进行与运算,就可以得到网络号。

划分网络号和主机号的目的是在路由寻址工作中先找到对方所在的网络,再找到所在的主机进行通信。

2.2.4 CIDR与VLSM

  • 人们放弃IP地址的分类,采用任意长度分割IP地址的网络标识和主机标识。这种方式叫做CIDR。表示形式 a.b.c.d/x ,其中 /x 表示前 x 位属于⽹络号。
  • 在CIDR被应用到互联网的初期,网络内部采用固定长度的子网掩码机制。也就是说,当子网掩码的长度被设置为/25以后,域内所有的子网掩码都得使用同样的长度。
  • 由于需要更定制化的IP地址分配方式,于是产生了一种可以随机修改组织内各个子网掩码长度的机制——VLSM(可变长子网掩码)(Variable Length Subnet Mask)

2.2.5 公有地址和私有地址

  • 随着互联网的迅速普及,IP地址不足的问题日趋显著。
  • 对于那些没有连接互联网的独立网络中的主机,只要保证在这个网络内地址唯一,可以不用考虑互联网即可配置相应的IP地址。
  • 所以就出现了私有IP地址,这些地址允许组织内部的 IT ⼈员⾃⼰管理、⾃⼰分配,⽽且可以重复。私有IP地址范围如下:
  • 在这里插入图片描述
  • 而公有IP是相应组织发布管理的。

2.3 路由控制

IP地址的网络地址部分用于进行路由控制。

IP 层在内存中有一个路由表。当收到一份数据报并进行发送时,它都要对该表搜索一次。

路由控制表中记录着网络地址下一步应该发送至路由器的地址

在发送IP包时,首先要确定IP包首部中的目标地址,再从路由控制表中找到与该地址具有相同网络地址的记录,根据该记录将IP包转发给相应的下一个路由器。如果路由控制表中存在多条相同网络地址的记录,就选择一个相同位数最多的网络地址。(最长匹配。) 。

在这里插入图片描述

  • 默认路由:默认路由是指路由表中任何一个地址都能与之匹配的记录。默认路由一般标记为0.0.0.0/0或default。
  • 主机路由:“IP地址/32”也被称为主机路由,进行主机路由,意味着要基于主机上网卡上配置的IP地址本身,而不是基于该地址的网络地址部分进行路由。
  • 环回地址:环回地址是在同一台计算机上的程序之间进行网络通信时所使用的一个默认地址。就是127…0.0.1 或者 localhost,使用这个IP或主机名时,数据包不会流向网络。

2.4 IP 分片和重组

每种数据链路的最大传输单元(MTU)都不相同,每种数据链路的 MTU之所以不同,是因为每个不同类型的数据链路的使用目的不同。使用目的不同,可承载的MTU也就不同。鉴于IP属于数据链路上一层,它必须不受限于不同数据链路的MTU大小。

当 IP 数据包大于⼤于 MTU 时, IP 数据包就会被分片。经过分片之后的 IP 数据报在被重组的时候,只能由目标主机进行,路由器是不会进⾏重组的。

在分片处理中,一旦某个分片丢失,则会造成整个IP数据报作废。

IP 分片的具体过程如下:

  • 当生成一个数据报时,设置源和目的IP地址的同时,设置标识号(通常每个标识号是前一个+1)。
  • 到达目的地之后,能通过标识号确定哪些分片是一个较大的数据报,从而重组。
  • 为了确定最后一个分片的到达,最后一个片的标志比特被置为0,其他片为1。
  • 为了能按顺序组装分片,使用片偏移来标识位置。

2.4.1 路径 MTU 发现

所谓路径MTU(Path MTU)是指从发送端主机到接收端主机之间不需要分片时最大MTU的大小。而路径MTU发现从发送主机按照路径MTU的大小将数据报分片后进行发送。进行路径MTU发现,就可以避免在中途的路由器上进行分片处理,也可以在TCP中发送更大的包。

工作流程如下:

  1. ⾸先在发送端主机发送 IP 数据报时,将 IP 包⾸部的分片禁止标志位设置为 1。根据这个标志位,途中的路由器不会对大数据包进行分片,而是将包丢弃。
  2. 随后,通过⼀个 ICMP 的不可达消息将数据链路上 MTU 的值⼀起给发送主机,不可达消息的类型为「需要进行分片但设置了不分片位」。
  3. 发送主机端每次收到 ICMP 差错报⽂时就减少包的大小,以此来定位⼀个合适的 MTU 值,以便能到达目标主机。

2.5 IPv6

IPv6(IP version 6)是为了根本解决IPv4地址耗尽的问题而被标准化的网际协议。IPv4的地址长度为4个8位字节,即32比特。而IPv6的地址长度则是原来的4倍,即128比特(16 位 * 8段)。

2.5.1 IPv6 特点

  • IP地址的扩大与路由控制表的聚合:IP地址依然适应互联网分层构造。分配与其地址结构相适应的IP地址,尽可能避免路由表膨大。
  • 性能提升:包首部长度采用固定的值(40字节),不再采用首部检验码。简化首部结构,减轻路由器负荷。路由器不再做分片处理(通过路径MTU发现只由发送端主机进行分片处理)。
  • 支持即插即用功能:即使没有DHCP服务器也可以实现自动分配IP地址。
  • 采用认证与加密功能:应对伪造IP地址的网络安全功能以及防止线路窃听的功能(IPsec)。
  • 多播、Mobile IP成为扩展功能:多播和Mobile IP被定义为IPv6的扩展功能。

2.5.2 IPv6 数据报格式

IPv6引入的主要变化:

  • 扩大的地址容量:IPv6 地址长度从 32 比特增加到 128 比特 这就确保全世界将不会用尽地址,另外,IPv6 还引人了一种称为任播地址 (anycast address) 的新型地址,这种地址可以使数据报交付给一组主机中的任意一个。
  • 简化高效的 40 字节首部:许多IPv4 字段已被舍弃或作为选项。因而所形成的 40 字节定长首部允许更快地处理 IP 数据报。
  • 流标签:给属于特殊流的分组加上标签,这些特殊流是发送方要求进行特殊处理的流。

在这里插入图片描述

IPv6 定义的各个字段:

  • 版本:标识IP版本号。
  • 流量类型:与IPv4服务类型含义相似,用于提供不同类型的数据报。
  • 流标签:用于标识一条数据报的流,给定优先权或者一些特殊处理。
  • 有效载荷长度:16 比特值作为一个元符号整数,给出了 IPv6 数据报中跟在定长的40字节数据报首部后面的字节数量。
  • 下一个首部:对应IPv4协议字段。
  • 跳限制:就是TTL时间。
  • 源地址和目的地址
  • 数据

首部和 IPv4 的主要区别

  • 取消了分片/重新组装相关字段:IPv6不允许在中间路由器上进行分片与重新组装,这种操作只能在源与目的地上执行。从而大大加快了网络中IP转发速度。
  • 取消了首部校验和字段: 因为在数据链路层和传输层都会校验,因此 IPv6 直接取消了 IP 的校验。
  • 取消选项字段:选项字段不再是标准 IP ⾸部的⼀部分了,但它并没有消失,⽽是可能出现在 IPv6 首部中的下⼀个⾸部指出的位置上。删除该选项字段使的 IPv6 的⾸部成为固定⻓度的 40 字节。

2.5.3 IPv6 地址

IPv6地址长度是128比特,以每16比特为一组(可以用16进制表示),每组用冒号(“:”)隔开进行标记。而且如果出现连续的0时还可以将这些0省略,并用两个冒号(“::”)隔开。

IPv6 类似 IPv4,也是通过 IP 地址的前几位标识 IP 地址的种类。主要分为以下几种:

  • 单播地址:用于⼀对⼀的通信
    • 全局单播地址:是指世界上唯一的一个地址。
    • 链路本地单播地址:是指在同一个数据链路内唯一的地址。它用于不经过路由器,在同一个链路中的通信。
    • 唯一本地地址:是不进行互联网通信时所使用的地址。相当于私有IP。
  • 多播地址:用于⼀对多的通信
  • 任播地址,用于通信最近的节点,最近的节点是由路由协议决定

3. 与IP相关的其他协议

3.1 DNS

DNS可以将网站的那串字符串自动转换为具体的IP地址。

应用层中对DNS进行了详细介绍,这里就不多赘述。

DNS相关内容

3.2 ARP:地址解析协议

ARP(Address Resolution Protocol) 是一种解决地址问题的协议。以目标IP地址为线索,用来定位下一个应该接收数据分包的网络设备对应的MAC地址。

ARP是借助ARP请求与ARP响应两种类型的包确定MAC地址的。

  • 主机A为了获得主机B的MAC地址,起初要通过广播发送一个ARP请求包。这个包中包含了想要了解其MAC地址的主机IP地址。
  • 广播的包可以被同一个链路上所有的主机或路由器接收,因此ARP的请求包也就会被这同一个链路上所有的主机和路由器进行解析。
  • 如果ARP请求包中的目标IP地址与自己的IP地址一致,那么这个节点就将自己的MAC地址塞入ARP响应包返回给主机A。
  • 为了避免每次都需要进行一次解析,所以通常会把获取到的MAC地址写入高速缓存。

3.3 RARP:逆地址解析协议

RARP(Reverse Address Resolution Protocol)是将ARP反过来,从MAC地址定位IP地址的一种协议。

例如将打印机服务器等小型嵌入式设备接入到网络时就经常会用得到。

需要架设一台RARP服务器,从而在这个服务器上注册设备的MAC地址及其IP地址,然后再将这个设备
接入到网络。

在这里插入图片描述

3.4 ICMP:因特网控制报文协议

ICMP的主要功能包括,确认IP包是否成功送达目标地址,通知在发送过程当中IP包被废弃的具体原因,改善网络设置等。

例如,在IP通信中如果某个IP包因为某种原因未能达到目标地址,那么这个具体的原因将由ICMP负责通知。

ICMP的消息大致可以分为两类:一类是通知出错原因的错误消息,另一类是用于诊断的查询消息。

在这里插入图片描述
主要的ICMP消息:

  • ICMP目标不可达消息(类型3):IP路由器无法将IP数据包发送给目标地址时,会给发送端主机返回一个目标不可达(Destination Unreachable Message)的ICMP消息,并在这个消息中显示不可达的具体原因。
  • ICMP重定向消息(类型5):如果路由器发现发送端主机使用了次优的路径发送数据,那么它会返回一个ICMP重定向(ICMP Redirect Message)的消息给这个主机。在这个消息中包含了最合适的路由信息和源数据。
  • ICMP超时消息(类型11):如果IP数据报的TTL被减至0,则IP路由器将会发送一个ICMP超时的消息给发送端主机,并通知该包已被丢弃。
  • ICMP回送消息(类型0、8):用于进行通信的主机或路由器之间,判断所发送的数据包是否已经成功到达对端的一种消息。(例如ping)

3.5 DHCP:动态主机配置协议

逐一为每一台主机设置IP地址会非常繁琐的事情。特别是在移动使用笔记本电脑、智能终端以及平板电脑等设备时,每移动到一个新的地方,都要重新设置IP地址。

为了实现自动设置IP地址统一管理IP地址分配,就产生了DHCP(Dynamic Host Configuration Protocol)协议。通过DHCP计算机只要连接到网络,就可以进行TCP/IP通信。

DHCP 工作流程:

在这里插入图片描述

  • 客户端首先发起 DHCP 发现包(DHCP DISCOVER) 的 IP 数据报,由于客户端没有 IP 地址,也不知道 DHCP 服务器的地址,所以使用的是 UDP 广播通信,其使用的广播目的地址是255.255.255.255(端口 67)并且使用 0.0.0.0(端口 68) 作为源 IP 地址。DHCP 客户端将该 IP 数据报传递给链路层,链路层然后将帧广播到所有的网络中设备。
  • DHCP 服务器收到 DHCP 发现包时,用 DHCP 提供包(DHCP OFFER) 向客户端做出响应。该包仍然使用 IP 广播地址 255.255.255.255,该提供包携带服务器提供可使用的 IP 地址、子网掩码、默认网关、DNS 服务器以及 IP 地址有效期。
  • 客户端收到⼀个或多个服务器的 DHCP 提供包后,从中选择⼀个服务器,并向选中的服务器发送 DHCP 请求包(DHCP REQUEST)进行响应,通知想要使用的设置参数。
  • 最后,服务器端发送DHCP提供包(DHCP ACK)对DHCP请求包响应应答,允许选择的参数设置。

DHCP中继代理

因为该服务用的都是广播,那如果是大的学校或者企业,会有多个以太网网段,不在一条链路无法进行广播,所以就出现了DHCP中继代理。通过中继代理,DHCP服务器即使不在同一个链路上也可以实现统一分配和管理IP地址。

工作流程如下:

在这里插入图片描述

  • DHCP的请求包会广播给中继代理服务器,中继代理接收到该请求包之后,通过单播的形式发送给DHCP服务器。
  • 服务器收到请求包之后将应答包单播给中继代理,中继代理再广播给客户端。

3.6 NAT:网络地址转换

NAT(Network Address Translator)是用于在本地网络中使用私有地址,在连接互联网时转而使用全局IP地址的技术。

除转换IP地址外,还出现了可以转换TCP、UDP端口号的NAPT(Network Address Ports Translator)技术,由此可以实现用一个全局IP地址与多个主机的通信,利用不同的端口作为区分。

在NAT(NAPT)路由器的内部,有一张自动生成的用来转换地址的表。按照表中的映射关系对IP转换进行处理。

在这里插入图片描述

NAT的潜在问题

  • 无法从NAT的外部向内部服务器建立连接。
  • 转换表的生成与转换操作都会产生一定的开销。
  • 通信过程中一旦NAT遇到异常需重新启动时,所有的TCP连接都将被重置。
  • 即使备置两台NAT做容灾备份,TCP连接还是会被断开。

解决方法:

  • 使用IPv6:如果IP地址完全足够,就不需要使用NAT。
  • 使用NAT穿越:用户可以完全忽略NAT的存在而进行通信,客户端主动从 NAT 设备获取公有 IP 地址,然后自己建立端口映射,然后通过这个端口映射和外界通信,好像不需要NAT设备来进行转换。

3.7 IGMP:因特网组管理协议

IGMP:因特网组管理协议是用于支持主机和路由器进行多播的协议,它让一个物理网络上的所有系统知道主机当前所在的多播组。多播路由器需要这些信息以便知道多播数据报应该向哪些接口转发。

  • IGMP工作在主机和最后⼀跳路由之间。
  • IGMP 报文向路由器申请加入和退出多播组,默认情况下路由器是不会转发多播包到连接中的主机,除非主机通过 IGMP报文 加入到多播组,主机申请加⼊到多播组时,路由器就会记录 IGMP 路由器表,路由器后续就会转发多播包到对应的主机了。
  • IGMP 报文采用 IP 封装,IP 头部的协议号为 2,⽽且 TTL 字段值通常为 1,因为 IGMP 是工作在主机与连接的路由器之间。

4. 动态路由选择协议

4.1 RIP:选路信息协议

RIP是一种分布式的基于距离向量算法的路由选择协议,是因特网的协议标准,最大优点是简单。

  • 距离向量的意思是,路由器每30秒会向相邻路由器发送RIP 报文,RIP 报文包含一个距离向量(跳数)。每个路由器都根据它所接收到邻站的这些距离向量来更新自己的路由表。
  • 路由表主要包括三个字段:目的网络、距离(跳数)和下一条路由器。
  • 例如下图,R2路由器向X路由器发送一条到达Net3网络的跳数,如果X路由器中没有到达Net3网络的路径,则会将跳数+1并加入这条记录;如果有,则比较跳数大小,保留更小的那条路径。以此类推,X路由器继续向R1传递。
  • 根据距离向量生成距离向量表,再抽出较小的路由生成最终的路由控制表。

在这里插入图片描述

在这里插入图片描述

RIP协议要求网络中每一个路由器都维护从它自己到其他每一个目的网络的唯一最佳距离记录(即一组距离)。

RIP允许一条路由最多只能包含15个路由器,因此距离为16表示网络不可达。所以适合小规模的网络。

缺陷:

  • RIP 没有子网地址的概念。
  • 在路由器或链路发生故障后,需要很长的一段时间才能稳定下来。
  • 采用跳数作为路由度量忽略了其他一些应该考虑的因素。同时,度量最大值为 1 5,则限制了可以使用RIP的网络的大小。

4.2 OSPF:开放最短路径优先

因为随着路由器规模越来越大,并且因特网是ISP的网络,每个ISP都有自己的路由器网络,希望按自己的意愿运行路由器。,所以通过将路由器组织进自治系统(Autonomous System,AS)来解决。

OSPF是一个链路状态协议。在一个链路状态协议中,路由器并不与其邻站交换距离信息。它采用的是每个路由器主动地测试与其邻站相连链路的状态,将这些信息(信息包括费用、距离、时延、带宽等,并不仅仅是跳数)发送给它的其他邻站,而邻站将这些信息在自治系统中传播出去(洪泛)。每个路由器接收这些链路状态信息,并建立起完整的路由表。

之后只有当链路状态发生变化时,路由器才向所有路由器洪泛发送此信息。

OSPF的优点:

  • 安全:能够鉴别OSPF路由器之间的交换。
  • 多条相同开销的路径:当到达某目的地的多条路径具有相同的开销时,OSPF允许使用多条路径,不需要选择单一的路径承载所有流量。
  • 对单薄与多播路由选择的综合支持:MOSPF(多播OSPF)提供对OSPF的简单扩展。以便提供多播路由选择。
  • 支持在单个AS中的层次结构:一个OSPF自治系统能够层次化地配置多个区域。

4.3 BGP:边界网关协议

BGP 是一种不同自治系统的路由器之间进行通信的外部网关协议。

在BGP中,分组并不是路由到一个特定的目的地址,相反是路由到CIDR化的前缀。每个前缀表示一个子网或子网的集合。

作为一种AS间的路由选择协议,BGP为每台路由器提供了一种 完成以下任务的手段:

  • 从邻居AS获取前缀的可达性消息
    • BGP允许每个子网向因特网的其余部分通告它的存在。
    • 两个运行 BGP 的系统之间建立一条端口179的半永久 TCP 连接,然后交换整个 BGP 路由表。从这个时候开始,在路由表发生变化时,再发送更新信号。
  • 确定到该前缀的最好路由
    • 通告匹配前缀,如果有多条相同的路由,则依据以下规则依次筛选:
    • 路由指派一个本地偏好值作为属性,具有最高本地偏好值的路由将被选择。
    • 从剩余中选择拥有最短AS-PATH (包含已经通过的AS列表)的路由。
    • 还有剩余的多个路由的情况下,选择具有最靠近NEXT-HOP路由器(AS-PATH起始路由器接口的IP地址)的路由。
    • 如果仍留下多条路由,则使用BGP标识符选择。

5. Ping 程序

Ping 程序是为了测试另一台主机是否可达。该程序发送一份 ICMP 回显请求报文给主机,并等待返回ICMP 回显应答。利用了ICMP查询报文类型。

ICMP 回显请求和回显应答报文如图
在这里插入图片描述
主要字段:

  • 类型:判断ICMP消息类型,对于PING来说,回送请求是 8,回送应答是 0。
    • ping 程序使用了 ICMP 里面的 ECHO REQUEST(类型为 8 ) 和 ECHO REPLY(类型为 0)。
  • 序号:用于区分连续 ping 的时候发出的多个数据包。每发出⼀个请求数据包,序号会自动加 1。
  • 数据:为了能够计算往返时间 RTT ,它会在报文的数据部分插⼊发送时间。

ping 程序工作流程:

  1. ping 命令执行的时候,源主机首先会构建⼀个 ICMP 回送请求消息数据包(类型为8)。
  2. 由ICMP协议将这个数据包和目标IP地址一起传送给IP层。
  3. IP层将目标地址设置为目的地址,本机地址设置为源地址协议字段设置为1,表示ICMP协议,再设置其他的一些控制信息,构建一个网络层数据报。
  4. 下一步,需要加上MAC头,如果在ARP高速缓存中能取到目标地址的MAC地址,则直接获取,如果不能,通过广播发送一个ARP请求包,包含想要知道MAC地址的主机IP,获取ARP响应之后,获得 MAC 地址,由数据链路层构建⼀个数据帧,目的地址是 IP 层传过来的 MAC 地址,源地址则是本机的 MAC 地址;还要附加上⼀些控制信息,依据以太网的介质访问规则,将它们传送出去。
  5. 目的主机接收到该数据帧之后,经过链路层网络层的检查,交给ICMP协议,目的主机会构建⼀个 ICMP 回送响应消息数据包,回送响应数据包的类型字段为 0 ,序号为接收到的请求数据包中的序号,然后再发送出去给源主机。
  6. 在规定的时候间内,源主机如果没有接到 ICMP 的应答包,则说明目标主机不可达;如果接收到了 ICMP 回送响应消息,则说明目标主机可达。并且用当前时刻减去该数据包最初从源主机上发出的时刻,就是 ICMP 数据包的时间延迟。

6. Traceroute程序

Traceroute程序可以让我们看到 IP 数据报从一台主机传到另一台主机所经过的路由。Traceroute程序还可以让我们使用 IP 源路由选项。Traceroute程序利用 ICMP 差错报文类型,Windows中对等的命令叫做 tracert 。

  • traceroute 的第⼀个作用:故意设置特殊的 TTL,来追踪去往⽬的地时沿途经过的路由器。

它的原理就是利用 IP 包的⽣存期限 从 1 开始按照顺序递增的同时发送 UDP 包,强制接收 ICMP 超时消息来获取路由器地址。

它发送一份 TTL 字段为1 的 IP 数据报给目的主机。处理这份数据报的第一个路由器将 TTL 值减1,丢弃该数据报,并发回一份超时 ICMP 报文。这样就得到了该路径中的第一个路由器的地址。然后Traceroute 程序发送一份 TTL 值为2的数据报,这样我们就可以得到第二个路由器的地址。继续这个过程直至该数据报到达目的主机。

另外,traceroute 在发送 UDP 包时,会填⼊⼀个不可能的端口号值作为 UDP 目标端口号(⼤于 30000 )。当目的主机,收到 UDP 包后,会返回 ICMP 差错报文消息,但这个差错报文消息的类型是「端口不可达」。所以,当差错报文类型是端口不可达时,说明发送方发出的 UDP 包到达了目的主机。

  • 另一个作用是:是故意设置不分片,从而确定路径的 MTU。做路径MTU发现

http://chatgpt.dhexx.cn/article/JnAOenKo.shtml

相关文章

网络层与传输层

目录 一、网络层 (一)IP数据包格式 (二)ICMP协议介绍 (三)ARP协议介绍 (四)ARP攻击原理 (五)ping命令及tracert ( 六)ARP命令 …

网络层——IP协议

网络层 网络层概述 网络层主要考虑数据传输的路上问题,在复杂的网络环境中确定一个合适的路径。 网络层设计要尽量简单,向上层只提供简单灵活的、无连接的、不保证可靠性的数据报服务。网络层不提供服务质量的承诺! IP 数据报的格式 如何分…

计算机网络——网络层

目录 4.1 网络层概述 4.2 网络层提供的两种服务 面向连接的虚电路服务 无连接的数据报服务 4.3 IPv4地址 IPv4地址概述 分类编址的IPv4地址 划分子网的IPv4地址 无分类编制的IPv4地址 IPv4地址的应用规划 4.4 IP数据报的发送和转发过程 4.5 静态路由配置 默认路由和…

详解网络层_计算机网络

目录 1. 网络层提供的两种服务 2. 网际协议IP 3.虚拟互联网络 4. IP地址 IP地址的划分方法 点分十进制 IP地址指派范围 IP地址的重要特点 5. IP地址与MAC地址 1. 网络层提供的两种服务 首先,网络层的引入主要是为了屏蔽不同网络的差异,实现不同网络…

计算机网络(四)_网络层

相关博文: 计算机网络入门 计算机网络物理层 计算机网络-数据链路层 与网络层相关的IP地址与子网掩码单独抽出于下 IP地址 计算机网络-域名与IP地址详解 子网掩码与子网划分 计算机网络-子网掩码与子网划分 文章目录 IP地址子网掩码与子网划分一些基本概念网络层提供…

应用层、传输层、网络层、数据链路层

应用层 包括:应用服务 (FTP(FileTransfer Protocol,文件传输协议)和DNS(Domain NameSystem,域名系统))发送HTTP请求DNS域名解析系统:提供通过域名&#xff0…

计算机网络之网络层

一、概述 网络层介于传输层和数据链路层之间,其主要作用是实现两个网络系统之间的数据透明传送,具体包括路由选择,拥塞控制和网际互连等。网络层是网络与网络之间通信的最底层,在数据从数据链路层向传输层进行数据传输的通信中&a…

计算机网络-网络层详细讲解

目录 网络层概述 网络层提供的两种服务 面向连接的虚电路服务 无连接的数据报服务 IPv4地址 IPv4地址概述 概述 表示方法 分类编址的IPv4 A类地址 B类地址 C类地址 练习 划分子网的IPv4地址 子网掩码 32比特的子网掩码可以表明分类IP地址的主机号部分被借用了几个比特…

网络层

一、概述 1、网络层是OSI参考模型中的第三层,介于传输层和数据链路层之间,它在数据链路层提供的两个相邻端点之间的数据帧的传送功能上,进一步管理网络中的数据通信,将数据设法从源端经过若干个中间节点传送到目的端,从…

网络五大层介绍,看完你就懂

当前的网络协议是分层的:应用层,传输层,网络层,数据链路层,物理层 目录 应用层 传输层 UDP协议 数据报格式 TCP(传输控制协议) 报文格式 1.确认应答(核心) 2.超时重传 3.连接…

Android 4.4 沉浸式状态栏的实现

Android 4.4(kitkat)之后,Android Window 提供一个新的属性: WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS从名字上可以看出,这个属性可以用来设置状态栏是否透明,我们就可以利用这个属性来实现沉浸…

总结系列-一文搞懂沉浸式状态栏

近期做到与状态栏相关一些需求,网上关于沉浸式状态栏的文章有很多,基本上都先讲一堆概念,然后接着推出一个自己写的轮子,这类轮子面对很多不同场景的情况不能百分之百满足使用需求,过度地使用轮子也往往会让开发者不了解代码到底是怎么实现沉浸式的,基于…

安卓沉浸式状态栏

安卓沉浸式状态栏 前言安卓版本Android4.4之前Android4.4(API 19) - Android 5.0(API 21)1.图片沉浸1.1 xml实现1.2代码实现 2.ToolBar沉浸2.1xml实现2.1.1 设置 fitsSystemWindows 属性2.1.2 布局里添加占位状态栏 2.2代码实现2.…

Android-StatusBarUtil沉浸式状态栏

文章目录 一、前言二、去掉标题栏三、StatusBarUtil属性四、沉浸状态栏颜色五、沉浸状态栏图片 一、前言 大家再开发过程中会遇到上面这种情况,它不影响使用但是在美观上面差点意思,接下来教给大家一种方式来使它美观 二、去掉标题栏 只需要改变NoAction…

沉浸式状态栏(一)

我们知道IOS上的应用,状态栏的颜色总能与应用标题栏颜色保持一致,用户体验很不错,那安卓是否可以呢?若是在安卓4.4之前,答案是否定的,但在4.4之后,谷歌允许开发者自定义状态栏背景颜色啦&#x…

安卓沉浸式状态栏,android沉浸式状态栏工具类封装

文章目录 前言二、使用步骤1.定义2.使用3.效果 前言 沉浸式状态栏对安卓6.0以上版本很简单,今天分享一个封装好的工具,供大家参考 二、使用步骤 1.定义 代码如下: package com.example.mystudy_kotlin.utilsimport android.app.Activity …

沉浸式状态栏实现

文章目录 郭霖的博客这样实现透明状态栏隐藏导航栏真正的沉浸式模式 轮子 郭霖的博客这样实现 Android状态栏微技巧,带你真正理解沉浸式模式 透明状态栏 新建一个项目,只放一张图片 可以看到 状态栏、ActionBar、底部导航栏都显示,现在修…

flutter沉浸式状态栏

方法1:修改MainActivity 在MainActivity.kt或MainActivity.java,判断一下版本号然后将状态栏颜色修改设置成透明,因为他本身是黑色半透明: Kotlin: class MainActivity: FlutterActivity() {override fun configure…

uniapp 沉浸式状态栏

uniapp 沉浸式状态栏 1.page.json 中设置 :“navigationStyle”:"custom" "globalStyle": {"navigationBarTextStyle": "black","navigationBarTitleText": "uni-app","navigationStyle":…

Android使用沉浸式状态栏

Android使用沉浸式状态栏 为什么使用? 我们App里面目前都没有做沉浸式状态栏,会导致状态栏呈黑色条状,而且下面这个的黑色条状与App红色主界面有很明显的区别。这样在一定程度上牺牲了视觉高度,界面面积变小。 可以对照比较这三张图 代码…