这是本节的多页打印视图。
点击此处打印 .
返回本页常规视图 .
网络层 本章是计算机网络中的重点,会在选择题中考察,其中知识点也会与其他知识结合,放在大题中考察,需要熟练掌握IP协议以及IP数据包从一台主机发送到另一台主机的逻辑过程。
学习思维导图:
# 网络层
## 网络层功能
- 异构网络互联
- 路由和转发
- SDN基本概念
- 拥塞控制
## 路由算法
- 静态路由和动态路由
- 距离-向量路由算法
- 链路状态路由算法
- 层次路由
## IPV4
- IPv4分组
- IPv4地址和NAT
- 子网划分、路由聚集、子网掩码和CIDR
- ARP, DHCP, ICMP协议
## IPv6
- IPv6主要特点
- IPv6地址
## 路由协议
- 自治系统
- 域内路由和域间路由
- RIP路由协议
- OSPF路由协议
- BGP路由协议
## IP组播
- 组播的概念
- IP组播地址
## 移动IP
- 移动IP的概念
- 移动IP通信过程
## 网络层设备
- 路由器的组成和功能
- 路由表与分组转发
网络层功能
路由选择:网络层负责确定数据包从源到目的地的最佳路径,以确保数据包能够跨越多个网络或子网。路由选择算法用于决定数据包应该通过哪些中间路由器传输,以达到目的地。 数据包转发:一旦确定了数据包的路径,网络层将数据包从一个路由器或交换机传递到下一个路由器或交换机,直到到达目的地。这个过程称为数据包转发。 寻址和标识:网络层使用IP地址来唯一标识主机和路由器。IP地址是网络层的核心标识机制,它帮助路由器和交换机将数据包正确地传送到目的地。 分段和重组:网络层可以将数据流分成更小的数据包(分段),以便在网络上传输。在目的地,这些分段将被重新组装成原始数据流。 数据包的传输和传递:网络层通过控制数据包的传输和传递来确保数据的可靠性和完整性。这包括错误检测、丢包处理和数据包的重新发送。 1 - IP 网络层的重点内容,需熟练掌握 IPv4 地址的格式、分组、CIDR 以及 NAT 内容,会在选择题和大题中考察。除此外,掌握组播、IPv6 和移动 IP 的概念,可能在选择题中考察。
IP 协议初探 在真实世界中,我们使用地址找到一个地点,比如 中国 北京市 海淀区 某街道 某小区 某一栋 某一户
。
在互联网中我们如果想定位某个机器,也需要使用同样的方式给其指定一个地址,这样的地址就叫做 IP 地址,IP 的英文全程是 Internet Protocol,直译作互联网协议。
但仅有地址是不够的,如何将数据从源地址发送到目的地址也是 IP 协议需要解决的一个问题。互联网是一个由众多网络设备组成的一个全球性的网络,从 一个机器 到 另一个机器,中间可能需要经过多个的网络设备,如何保证我们的数据可以 通过某条路径到达 正确地目的地呢,这个过程需要 IP 协议和协议共同配合以实现,在后面我们会逐步了解这个过程。
IP 协议目前包含两个版本,分别是 IPv4 (Version 4)以及 IPv6 (Version 6),后文将逐步介绍这两个协议,当然重点在于掌握 IPv4 的具体细节。
IPv4 地址格式 IPv4 的地址由 4 个字节构成,共有 32 位,比如 11000000.10101000.00000100.00000010
就是一个 IPv4 的地址。
二进制的表示方式太晦涩,所以常用的表示方式是 点分十进制 ,上一段话中的 IPv4 地址的点分十进制表示方式就是 192.168.4.2
。
点分十进制说对于4个字节中的每个字节,我们用十进制表示其值,每个字节之间,我们用点来间隔,点分十进制因此得名。
IPv4 首部 IP 协议位于 OSI 7层模型的网络层,其承载上层(传输层)的数据,对其进行 封装 ,然后传递给下层(数据链路层)进行进一步的处理。
封装的具体过程就是为 传输层的数据 加上 IP 协议的首部的二进制表示,IPv4 的首部的 逻辑格式 如下图所示,其中包含多个字段,长度通常为 20 个字节。
字段初探 这一小节我会简单介绍各个字段,帮助大家建立一个粗略的了解,部分字段的细节我会在后面几个小节详解说明。
版本(Version):4 位字段,用于指定 IP 协议版本,IPv4 的版本为 4。 头部长度(Header Length):4 位字段,用于指示 IPv4 首部的长度,以 4 字节为单位。由于 IPv4 首部的固定部分长度为 20 字节,因此这个字段的值通常是 5(即该字段二进制表示为 0101
,5 * 4(4字节为单位) = 20
,最终表示的长度为 20)。 服务类型(Type of Service):8 位字段,用于指定数据报的服务质量(Quality of Service,QoS),包括优先级、延迟、吞吐量等。 总长度(Total Length):16 位字段,指定整个 IPv4 数据报(包括首部和数据部分)的总长度,以字节为单位。最大值为 65535 字节。 标识(Identification):16 位字段,用于唯一标识数据报。通常在数据报分片时用于重新组装数据报。 标志(Flags):3 位字段,包括以下标志:最左边位:保留为 0,未使用。 DF(Don’t Fragment):如果设置为 1,表示数据报不允许分片。则路由器会丢弃该数据报,并发送一个ICMP错误消息(“Fragmentation Needed and DF Set”)返回给发送方,告知需要分片但不允许分片。 如果设置为 0,标识允许分片,路由器在传输过程中如果需要,可以将数据报分片,以确保数据报能够通过传输链路。 MF(More Fragments):如果设置为 1,还有更多的分片; 如果设置为0,表示当前分片是对应数据报的最后一个分片,或者表示当前数据报根本没有分片。 片偏移(Fragment Offset):13 位字段,用于指示数据报分片的位置。以 8 字节为单位,表示相对于原始数据报的偏移量。 生存时间(Time to Live,TTL):8 位字段,指定数据报在网络中可存在的最大时间(跳数),每经过一个路由器,TTL 减 1,当 TTL 减至 0 时,数据报被丢弃。 协议(Protocol):8 位字段,指定上层协议,表示数据报的载荷是由哪个协议处理。例如,6 表示 TCP,17 表示 UDP。 首部校验和(Header Checksum): 源 IP 地址(Source IP Address): 目标 IP 地址(Destination IP Address): 选项(Options):可选字段,长度可变,用于包含一些额外的信息。IPv4 首部中的选项字段通常很少被使用。 分片和相关字段 简而言之,
IP 数据报的最大长度为 65535 字节(总长度字段为 16 位,16 位可以表示的最大非负整数为 65535),而数据链路层的 MTU 往往都小于该值(比如以太网 ethernet 的 MTU 为 1500),所以为了在数据链路上传输这些数据,就需要将数据报(ip packet)进行拆分为不同的分片(ip fragmentation),更多关于分片的细节可以查看 IP数据报分片 。
这个时候就会出现两个问题,我将 packet A 和 packet B 都拆分为了不同分片,比如我将 packet A 拆分为分片 A1、A2 和 A3,将 packet B 拆分 B1、B2。那么我如何区分这些不同的分片,我怎么知道 A1 是来自于 packet A 而不是 packet B 的呢?以及我如何将同一个数据报的不同分片再结合起来形成原始数据报呢?
为了实现以上需求,IP 协议首部包含如下字段:
Identification 标识字段用于区分 不同数据报 以及其 分片 Fragment Offset 标识字段标识当前分片中的数据在整个数据报中的偏移 差错校验字段 IP 首部的 checksum 为 IP 协议的差错校验字段,用于检验 IP 首部在传输的过程中是否发生错误,接下来我会告诉你如何通过该字段进行校验。
当一个 IP 数据报被创建时,发送端设备会计算 IP 头部的校验和,并填充 IP 数据报中的 checksum 字段。
当 路由器 和 目标机器 在收到数据报时会重新计算首部校验和,并将计算得到的校验和和接收到的 IP数据报中的 checksum 进行比较。如果不一致的话,则说明 IP 数据报中的某些数据在传输的过程中出现变动,就需要丢弃该 IP 数据报。
需要注意的是,当 IP数据报 经过某个路由器时,路由器需要重新计算并填充 checksum 字段,因为 IP 数据报中的某些字段在经过路由器时会被改变(比如 TLL 会减 1 等)。
一般而言,对于校验和,了解到以上程度即可,如果你好奇校验和究竟是如何计算且学有余力的话,可以查看checksum 校验和计算方式 。
IPv4 地址初探 前文已经谈到,IP 地址是帮助我们在互联网中定位到一个机器,从而可以根据该地址进行数据传输。
所以,从逻辑上来说,IP 地址可以被拆分为两个部分:
网络编号:IP 地址的前若干位,以确定一个网络。 主机编号:IP 地址的后若干位,以在网络中确定的一个机器。 网络编号确定 IP 地址在哪个网络中,主机编号确定该机器是网络中的哪一台机器。
IPv4 地址分组 在互联网早期,IP地址采用了分类寻址(classful addressing),具体而言,就是将 IP 地址根据其网络编号(前几位)分为 A、B、C 和 D 类。
在分类寻址中,如果给定一个 IP 地址,我们可以马上判断出该 IP 地址属于哪一类网络(根据前几位的值),以及该 IP 地址的 网络编号 和 主机编号是多少。
类别 网络编号 主机数量 用途 网络数量 A 类 8位,第一位一定是1 2^24 - 2 = 16,777,214 大型网络 2^7 = 128 B 类 16位,前两位一定是10 2^16 - 2 = 65,534 中型规模网络 2^14 C 类 24位,前三位一定是110 2^8 - 2 = 254 小型网络 2^21 D 类 4位,固定为1110 2^28 = 268,435,456 多播网络 1
分类寻址可以简化路由器的设计和IP地址的分配,而且简单的策略是最好满足当时的需求的,少就是多,从简设计并没有什么不好。
但是人算不如天算,最早设计 IP 协议的专家并没想到若干年后会有如此多的联网设备,每个设备都需要分配一个 IP 地址,而 IP 地址的数量 相比 这些设备的数量 已经捉襟见肘。
使用分类 IP 也加剧了这种问题。首先,这种分类方式过于不灵活,会造成地址空间浪费的现象。
例如,一个B类地址可以容纳65,534个主机,但如果一个组织只有几千台主机,剩余的地址就浪费了。同样,如果一个C类地址不足以满足一个组织的需求,但B类又太大,分配就变得困难。
为了解决这个问题,聪明的计算机专家们又发明了 CIDR、NAT 等技术 以及 IPv6 协议。
CIDR 无类别域间路由(CIDR,classless inter-domain routing) 的主要目标是克服传统的基于类别的 IP 地址划分方法,使网络资源的分配更加灵活和高效。
在 分类寻址 中,每一类网络的网络编号的长度是固定的,在 CIDR 中,网络编号的长度是动态的,可以根据需求定制。其中网络编号的长度叫做前缀长度(Prefix Length),前缀长度通常以 IP地址 斜杠后跟一个数字表示,例如,192.168.1.13/24
表示前 24 位是网络部分,剩下的位数用于主机。
这里就要提到子网掩码(subnet mask)这个概念,如果一个 CIDR 网络的前缀长度是 n 位的话,那么其子网掩码的二进制表示就是 111 (n 个 1) ... 0000 (32-n 个 0)
,该子网掩码对应的点分十进制如下图所示。
子网掩码的作用是找到 IP 地址的子网地址,IP地址 与 子网掩码 进行 与操作计算 即可得到对应的子网地址。子网地址的主机位全部为0。
子网划分 子网划分(Subnetting)是将一个较大的IP网络分割为多个更小的网络(子网)的过程。这种操作通常是在IP地址的网络部分与主机部分之间进一步引入子网位,以创建子网标识符。通过子网划分,网络管理员可以更有效地管理IP地址,减少网络流量,优化路由,并提高网络安全性。
在子网划分过程中,子网掩码(Subnet Mask)用于区分IP地址的网络部分和主机部分。常见的做法是通过调整子网掩码的长度,将更多位分配给网络部分,减少主机部分的位数。
子网划分包含 变长子网划分(Variable Length Subnet Masking, VLSM)和 固定长度子网划分(Fixed Length Subnet Mask, FLSM)两种方式。
变长子网划分 变长子网划分使用不同长度的掩码来划分IP地址空间,从而根据实际需求为各个子网分配不同数量的地址。
假设你有一个 C 类网络192.168.1.0/24
,需要划分给三个部门,其中 A 部门需要 100 个 IP 地址,B 部门需要 50 个 IP 地址,C 部门只需要 25 个 IP 地址。
使用 VLSM,你可能会这样划分:
部分名称 子网地址 掩码 地址个数 A 部门 192.168.1.0/25
255.255.255.128
128 B 部门 192.168.1.128/26
255.255.255.192
64 C 部门 192.168.1.192/27
255.255.255.224
32
定长子网划分 固定长度子网划分使用相同长度的子网掩码来划分网络。这种方法在划分时更为简单和直接,但通常不如VLSM灵活高效。
假设你有一个 C 类网络192.168.1.0/24
,需要划分给A, B, C, D四个部门,可以这样划分:
部分名称 子网地址 掩码 地址个数 A 部门 192.168.1.0/26
255.255.255.192
64 B 部门 192.168.1.64/26
255.255.255.192
64 C 部门 192.168.1.128/26
255.255.255.192
64 D 部门 192.168.1.192/26
255.255.255.192
64
注意以上地址个数中包含全0和全1的无效地址。
IP 数据报分片 P 数据报分片是一种网络通信中的过程,它允许较大的 IP 数据报在经过一些网络链路时被分割成多个较小的片段,以适应网络链路的最大传输单元(MTU,Maximum Transmission Unit)。MTU 是指网络链路能够传输的最大数据报大小,不同网络链路的 MTU 大小可能不同。当一个 IP 数据报的大小超过了某个链路的 MTU 时,它就需要被分片,以确保可以顺利传输。
注意
MTU 指的是链路层帧中有效负载(Payload)部分的最大字节数,不包括链路层的帧头(Frame Header)和帧尾(Trailer)。
数据链路中的负载(Payload)包含 IP 数据报的首部(20B)和数据部分。
以下是 IP 数据报分片的基本过程:
发送端分片:发送端的主机首先创建一个 IP 数据报,并将它发送到目标主机。这个数据报的大小可能大于某些链路的 MTU。 路由器检查 MTU:当数据报经过路由器时,路由器会检查下一个链路的 MTU 大小。它会比较数据报的大小和链路 MTU。 如果数据报的大小小于或等于链路 MTU,那么数据报会继续传输,无需分片。 如果数据报的大小大于链路 MTU,那么路由器需要将数据报分片为多个较小的片段,以适应链路 MTU。 数据报分片:当数据报需要分片时,路由器会将数据报拆分成多个片段。每个片段都会包含原始数据报的一部分数据。 每个片段的头部将保留原始数据报的首部,但有一个特殊的标志(Fragment Offset)来指示它在原始数据报中的位置。 路由器将这些片段分别发送到下一个链路。 目标端重组:当片段到达目标主机时,目标主机将重新组装这些片段以恢复原始的数据报。 目标主机使用每个片段的标志和偏移量信息来确定如何正确地重组数据报。 分片例子:
MTU = 65335 MTU = 4000 MTU = 2500 Source Final destination Host Links Router MTU: Maximium Transmission Unit (Byte) Legend ID Offset More fragment flag Payload (byte) 578 0 0 10000 578 0 1 3976 578 497 1 3976 578 994 0 2048 578 0 1 2480 578 310 1 1496 578 1 2480 578 807 1 1496 578 994 0 2048 First fragmentation R1:(4000) First fragmentation R2:(2500) Part of IPv4 header (20 byte) The original packet R1 R2 497 以上图为例,假设我们有一个 IP 数据报,其总长度为 10000 字节,它需要通过两个链路,两个链路的 MTU 分别为 4000 和 2500 字节。当 IP 数据报经过第一个链路时,它需要被拆分为 3 个分片以通过链路:
数据报 首部长度 数据长度 总长度 偏移量 片偏移字段 MF 标志位 ID 字段 原始 IP 数据报 20 10000 10020 - 0 0 578 分片 1 20 3976 3996 0 0 1 578 分片 2 20 3976 3996 3976 497 1 578 分片 3 20 2048 2068 7952 994 0 578
注意
分片后 IP 首部字段变化情况
所有分片中的 IP 数据报首部中的标识(ID,Identification)字段保持不变。
如果是最后一个分片,则 MF(More Fragment) 标识位为 0,否则 MF 标识位为 1。
片偏移(offset)字段以 8 字节为单位,其值为 分片实际偏移量 / 8
分片后应该满足的条件
总长度 = 首部长度(20B) + 数据长度 ≤ MTU
数据长度必须为 8 的整数倍,因为 offset 字段以 8 字节为单位。
分片经过第二个链路时也会根据 MTU 进行拆分,以分片 1 为例进行说明:
数据报 首部长度 数据长度 总长度 实际偏移量 片偏移字段 MF 标志位 ID 字段 分片 1 20 3976 3996 0 0 1 578 分片 1.1 20 2480 2500 0 0 1 578 分片 1.2 20 1496 1516 2480 310 0 578
IP 组播 IP 组播(IP Multicast)是一种 IP 通信模式,允许一台发送器将数据报发送到多个接收器,而不是传统的单播(点对点通信)模式。组播是一种多对多的通信方式,非常适合用于广播、多媒体流传输和分布式应用中。
以下是 IP 组播的一些关键特点和概念:
组播组:IP 组播通信由一个或多个组播组组成,每个组都有一个唯一的组播组地址。组播组地址属于 IPv4 地址范围的特殊区域,通常以 224.0.0.0 到 239.255.255.255(D 类地址) 为范围。多个接收器可以订阅同一个组播组。 发送器:发送器是将数据报发送到组播组的设备。发送器只需发送一次数据报,然后由网络基础设施复制并传送给订阅了该组播组的接收器。 接收器:接收器是订阅了特定组播组的设备。它们希望接收组播组中的数据。接收器可以是单个主机、路由器或多个主机。 IGMP(Internet Group Management Protocol):IGMP 是用于管理 IP 组播成员的协议。它允许主机通知路由器它们希望加入或离开特定的组播组。路由器使用 IGMP 来了解哪些主机希望接收特定组播组的数据。 组播路由:组播路由器是网络中的设备,负责将组播数据报从发送器传送到接收器。组播路由器根据 IGMP 报文和组播组地址表,将数据报仅传送到订阅了该组播组的网络分支。 组播范围:IP 组播地址可以分为不同的范围,如永久组播地址、临时组播地址和本地链路组播地址,以满足不同的需求和使用情况。 Unicast Broadcast Multicast Class A,B,C Transport TCP and UDP
Class A,B,C... Hosts all 1's Transport UDP only
Hosts all 1's... Class D Transport UDP only
Class D... Text is not SVG - cannot display IPv6 特点
扩展的地址空间:IPv6 大幅扩展了 IP 地址空间,使用 128 位地址,相对于 IPv4 的 32 位地址,IPv6 提供了约 340 亿亿亿亿(3.4 x 10^38)个可能的地址,解决了 IPv4 地址枯竭的问题。 简化的报头:IPv6 报头相对于 IPv4 报头更简化,减少了路由器处理数据报的开销,提高了路由性能。 自动地址配置:IPv6 支持自动地址配置,其中设备可以通过 Router Advertisement 消息获取自己的 IPv6 地址,减少了手动配置的需要。 移动性支持:IPv6 内置了对移动 IP(Mobile IP)的支持,使移动设备能够无缝地切换网络而无需更改 IP 地址。 改进的安全性:IPv6 在设计上包括了对 IPsec(IP Security)的支持,这增加了网络通信的安全性和隐私保护。 多播和任播:IPv6 对多播和任播提供了更强大的支持,使网络更加高效。 简化的头部处理:IPv6 取消了 IPv4 中的首部校验和,减少了路由器在处理数据报时的负担。 更好的 QoS 支持:IPv6 提供了更多的选项和字段来支持服务质量(Quality of Service) 地址
IPv6 地址使用 128 位,通常以冒号分隔的 16 位十六进制数表示,例如:2001:0db8:85a3:0000:0000:8a2e:0370:7334。
IPv6 地址分为以下几种类型:
单播地址(Unicast Address):用于将数据报从一个源节点传输到一个目标节点。 多播地址(Multicast Address):用于将数据报传输到一组目标节点,而不是单个节点。 任播地址(Anycast Address):用于将数据报传输到一组目标节点中的最近者(最接近的一个)。 回环地址(Loopback Address):用于将数据报返回到发送节点,通常表示为"::1"。 链路本地地址(Link-Local Address):用于在同一链路上的节点之间通信,通常自动配置,范围为 FE80::/10。 全局地址(Global Unicast Address):用于全球范围的通信,类似于 IPv4 的公有 IP 地址。 唯一本地地址(Unique Local Address):类似于 IPv4 的私有 IP 地址,用于组织内的通信。 专用地址(Special Addresses):用于特殊用途,例如文档中的示例地址、自动配置地址等。 移动 IP 移动 IP(Mobile IP)是一种网络协议,用于实现移动设备在不同网络之间切换时,仍能够保持连接并无缝通信。移动 IP 的主要目标是支持移动性,允许移动设备在移动时保持与互联网或企业网络的连接。
通信过程 :
移动节点在家庭网络中连接,并分配了家庭网络的永久 IP 地址,建立了通信会话。 当移动节点决定移动到外部网络时,它会通知家庭网络的移动 IP 服务节点,告知其即将离开。 家庭网络的移动 IP 服务节点会分配一个临时 IP 地址,并记录移动节点的当前位置。 移动节点连接到外部网络,使用临时 IP 地址与外部网络中的其他设备通信。 当其他设备要与移动节点通信时,数据报被发送到移动节点的临时 IP 地址,然后到达外部网络。 外部网络的移动 IP 服务节点接收到数据报后,将数据报转发到移动节点的临时 IP 地址。 移动节点接收到数据报后,可以回复或继续与外部网络中的其他设备通信。 如果移动节点决定返回家庭网络,它可以通知外部网络的移动 IP 服务节点,并断开与外部网络的连接。 移动节点返回家庭网络后,通信会话继续,并且移动节点将继续使用家庭网络的永久 IP 地址。 2 - ICMP 掌握ICMP的功能和应用,并且了解一下ICMP的消息类型,可能在选择题中考察。
ICMP(Internet Control Message Protocol)是一个网络层协议,用于在IP主机和路由器之间发送控制消息。ICMP是Internet协议套件的一个重要组成部分,它主要用于诊断和报告网络中的错误和某些特定条件。
首部 类型 (Type)
: 8 位用于指定 ICMP 消息的类型。例如, Echo Request
的类型为 8
, Echo Reply
的类型为 0 。 代码 (Code)
: 8 位为更进一步细分某个特定类型的 ICMP 消息而设置。例如,对于“目的地不可达”( Destination Unreachable
)类型的消息,代码可以用来指定具体的不可达原因,如网络不可达、主机不可达等。 检验和 (Checksum)
: 16 位用于验证 ICMP 消息在传输过程中没有被损坏。这个检验和涵盖了整个 ICMP 消息。 其它字段这些字段的内容取决于 ICMP 消息的类型和代码。例如,对于 Echo Request
和 Echo Reply
消息,接下来的字段包括一个标识符( Identifier
)和一个序列号( Sequence Number
)。 消息类型 这里不需要背,了解消息类型的含义即可,比方说给你一个消息类型源点抑制,你能知道它是干嘛的就行。
Echo Request
和 Echo Reply (ping)
Echo Request:
通常被称为 ping
请求。用于测试目的地是否可达。Echo Reply:
通常被称为 ping
回应。是对 Echo Request
的回应。Destination Unreachable
当数据不能被传送到目的地时,发送此消息。 下面是一些常见的“不可达”子类型:Network Unreachable:
无法到达目标网络。Host Unreachable:
无法到达目标主机。Protocol Unreachable:
目标网络不支持所请求的协议。Port Unreachable:
目标主机上的特定端口不可用。Fragmentation Needed and Don
’ t Fragment was Set:
数据包太大,需要分片,但数据包的“不分片”标志已设置。Source Route Failed:
源路由指定的路径失败。Network Unknown:
目标网络未知。Host Unknown:
目标主机未知。 Source Quench
(源点抑制)Redirect
Time Exceeded
当数据包在网络中传输的时间太长或超过了其 TTL
(生存时间)时发送。有两种主要的子类型: TTL Exceeded in Transit:
数据包在传输过程中 TTL
达到零。Fragment Reassembly Time Exceeded:
分片重新组装超时。Parameter Problem
当 IP
头包含错误或不可识别的信息时,发送此消息。 Timestamp Request and Timestamp Reply
Address Mask Request and Address Mask Reply
应用 这里需要了解基于 ICMP 协议的两个 linux 程序,一个是 ping,大家应该都比较熟悉。
另一个是 traceroute,用于寻找从起点到终点经过了哪些 IP 地址。
ping
ping
主要使用两种 ICMP 消息:Echo Request 和 Echo Reply。当您执行 ping
命令时,您的计算机发送一个 ICMP Echo Request 消息到指定的目标。 如果目标主机可达并运行,它会返回一个 ICMP Echo Reply 消息。 ping
工具记录这两个消息之间的时间差,即往返时间(RTT),并将其显示给用户。traceroute
traceroute
的目标是确定数据包从源计算机到目标计算机的路径中的所有中间跃点(通常是路由器)。它的工作原理基于 IP 数据包的 TTL(Time-to-Live) 字段。TTL 是每个 IP 数据包都有的字段,它在每次数据包经过一个路由器时减少1,当 TTL 达到0时,该数据包就被丢弃,并向源发送一个 ICMP Time Exceeded 消息。 当开始执行 traceroute
时,第一个数据包的 TTL 被设置为 1。这意味着第一个路由器将丢弃它并发送一个 Time Exceeded 消息。这个消息告诉 traceroute
第一个路由器的位置。 接下来,traceroute
发送一个 TTL 为 2 的数据包。这次,第二个路由器会丢弃数据包并发送 Time Exceeded 消息。这个过程继续,直到数据包到达目标,目标返回一个 ICMP Echo Reply 消息。 通过逐步增加 TTL 值并监听 Time Exceeded 和 Echo Reply 消息,traceroute
能够映射出到目标的完整路径。 3 - DHCP 掌握 DHCP 的功能和流程,可能在选择题中考察。
动态主机配置协议(DHCP)是一个网络管理协议,用于自动分配IP地址和其他网络配置参数给网络设备,从而允许它们连接到IP网络。
当你连接到一个网络中时,不管是通过无线网,还是在电脑上连接了以太网线,你会发现无需任何配置,你自动获取了一个 IP 地址,并可以通过该 IP 地址进行网络通信。
DHCP DISCOVER (broadcast)
DHCP DISCOVER (broadcast) DHCP Offer DHCP REQUEST DHCP ACK Where is the DHCP server ?
Where is the DHC... Hello, I need... DHCP server is at 10.1.1.1
DHCP server is... Here is your... Text is not SVG - cannot display DHCP的工作流程通常包括以下四个步骤,这个过程也被称作DORA过程,即Discover, Offer, Request, 和 Acknowledgment。
Discover:客户端通过网络广播一个 DHCP 发现消息(DHCP DISCOVER),请求可用的网络配置信息。因为客户端还没有分配到 IP 地址,所以这个消息是从 0.0.0.0 的源 IP 地址发送到 255.255.255.255 的目的 IP 地址。 Offer:网络上的 DHCP 服务器接收到 DHCP 发现消息后,会向客户端发送一个 DHCP 提供消息(DHCP OFFER)。这个消息包含了一个提供给客户端的 IP 地址和其他配置信息,如子网掩码、DNS 服务器地址和 IP 地址租用期。 Request:客户端可能会从多个 DHCP 服务器收到多个 DHCP OFFER 消息。客户端选择其中一个提议,并通过广播一个 DHCP 请求消息(DHCP REQUEST)来响应这个提议,通知网络中的所有 DHCP 服务器它接受了哪个 DHCP 服务器的提议。 Acknowledgment:提供所选 IP 地址的 DHCP 服务器收到 DHCP 请求消息后,会发送一个 DHCP 确认消息(DHCP ACK)给客户端,确认 IP 地址和配置信息的租约。如果由于某种原因导致该 IP 地址不再可用或者有其他问题,DHCP 服务器可能会发送一个 DHCP 否认消息(DHCP NAK)。 4 - ARP 掌握ARP的概念和流程,可能在选择题中考察。
概念 ARP(Address Resolution Protocol,地址解析协议)是一种在TCP/IP网络中使用的协议,用于将IP地址转换为物理硬件地址(例如,MAC地址)。ARP的主要目的是确定要通过网络传输数据的目标设备的物理硬件地址,以便将数据帧正确地传送到目标设备。
10.1.1.2 Switch 10.1.1.5 10.1.1.4 10.1.1.3 Requesting the mac address for 10.1.1.1
Requesting the mac addr... Sending mac address 5a:71:22:65:55:31
Sending mac address... Text is not SVG - cannot display 流程 以上图为例,主机 10.1.1.2
用 ARP 协议查找主机 10.1.1.4
的 MAC 地址,其流程如下图所示
sequenceDiagram
participant 10.1.1.2;
participant Switch;
10.1.1.2 ->> Switch: 请求 IP 地址为 10.1.1.4 的设备的 MAC 地址;
Switch ->> 10.1.1.3: 广播 ARP 请求;
Switch ->> 10.1.1.4: 广播 ARP 请求;
Switch ->> 10.1.1.5: 广播 ARP 请求;
10.1.1.4 ->> Switch: 返回 ARP 响应;
Switch ->> 10.1.1.2: 交换器转发 ARP 响应; 具体而言,一次 ARP 请求可以被拆分为如下步骤:
ARP请求 当一台设备(我们称它为主机A)需要发送数据包到同一局域网内的另一台设备(主机B),但它只知道目标设备的IP地址时,它会在本地网络上广播一个ARP请求。这个请求的语义大致是这样的:“我拥有IP地址X.X.X.X的设备,请告诉我你的物理MAC地址。”
ARP 请求的目的 MAC 地址为 ff-ff-ff-ff-ff-ff-ff-ff
,源 MAC 设置为自己的 MAC 地址。
网络上的广播 ARP请求是一个广播帧,它发送到本地网络上的所有设备。每一台设备都会收到这个请求,但只有IP地址匹配请求中IP地址的设备会回应这个请求。
ARP响应 当主机B收到这个ARP请求后,它会识别出请求中的IP地址与自己的IP地址相匹配,然后向主机A发送一个ARP响应。这个响应包含了主机B的MAC地址,并且这个响应是直接发送给主机A的,不是广播。
更新ARP缓存 主机A收到ARP响应后,它会在自己的ARP缓存表中更新这个信息,将主机B的IP地址与其MAC地址关联起来。ARP缓存表中的这些条目通常会在一段时间后过期,所以可能需要定期更新。
数据传输 主机A现在知道了主机B的MAC地址,它可以构建一个以太网帧,将数据包含在其中,并使用B的MAC地址作为目的地址发送出去。
ARP缓存 所有主机都会维护一个ARP缓存,该缓存存储了网络上其他设备的IP地址和MAC地址的映射。
这减少了广播ARP请求的需要,因为主机可以查看自己的缓存来找到之前解析过的地址。
以下是一个简化的 ARP 缓存表格示例,展示了 IP 地址与 MAC 地址的映射关系:
IP 地址 MAC 地址 状态 接口 192.168.1.1 00:1A:2B:3C:4D:5E 动态 eth0 192.168.1.2 00:1A:2B:3C:4D:5F 静态 eth0 192.168.1.3 00:1A:2B:3C:4D:60 动态 wlan0 192.168.1.4 00:1A:2B:3C:4D:61 动态 eth0
注意
ARP运行在哪一层
地址解析协议(ARP)实际上是一个介于数据链路层(第二层)和网络层(第三层)之间的协议。ARP的功能是将网络层的地址(如IPv4地址)解析为数据链路层的地址(如以太网MAC地址)。虽然它处理的是网络层地址,但它运行在数据链路层,直接构建和发送数据链路层的帧。因此,它通常被认为是网络层的一个辅助协议,但技术上它操作在数据链路层。
5 - 路由算法 掌握 RIP 和 OSPF 的流程,可能在选择题中考察。
静态路由和动态路由 路由表的配置包含两种方式:静态路由和动态路由。
静态路由表示路由器的路由规则由人工进行手动配置,是写死的,每次想更改路由表时必须手动去更改。
动态路由规则根据 路由算法 动态地构建路由表,这里主要包含 RIP 和 OSPF 两种方式。
两种路由方式的具体对比如下表所示:
特点 静态路由 动态路由 配置方式 手动配置 自动学习和适应 适用性 适用于小型网络或需要特定路由策略的情况 适用于大型、复杂的网络 稳定性 较稳定 可能更灵活,但较复杂 自动故障恢复 不支持自动故障恢复 支持自动故障检测和恢复 网络变化响应速度 静态,不会自动适应网络变化 自动适应网络变化,响应速度较快 管理复杂性 相对简单 较复杂,需要更多计算和资源 适用情况 较小规模的网络,特定路由策略需求 大型、复杂网络,需要动态适应
什么是路由算法 路由算法是网络通信中的一种机制,它决定数据包在计算机网络中从源地址传输到目标地址的路径。路由算法通过选择最佳路径来优化数据传输,确保数据有效且快速地传递。
路由算法的设计是为了实现以下目标:
最短路径选择 :刚一个数据包经过当前机器时,路由算法通过计算路径的成本(如跳数、带宽、延迟等),能够选择从源到目标的最短或最优路径。负载均衡 :在网络拥堵时,将数据流量分散到多条路径上,以避免某一条路径过载。快速收敛 :当网络拓扑发生变化(如链路失败或新增路由器)时,路由算法能够快速调整并更新路由信息,确保网络稳定。RIP 算法 RIP(Routing Information Protocol)是一种基于距离向量的路由协议,主要用于小型和中型网络中的内部网关协议。
距离向量 目标网络 距离(跳数) 下一跳 192.168.1.0/24 0 A 192.168.2.0/24 1 B 192.168.3.0/24 1 C
一个典型的距离向量(Distance Vector)可以表示为一个列表,其中每个条目包含以下信息:
目的地:目标网络或子网的地址。 距离:从当前路由器到达目标网络的代价,通常以跳数、延迟、带宽等度量标准表示。 下一跳:到达目标网络的下一跳路由器的地址。 注意
RIP 规定 最大跳数为 15 ,超过 15 则认为目标网络不可达。
距离向量算法 在距离向量算法中,
通过 周期性地 与相邻路由器 交换距离向量信息 ,每个路由器能够逐渐获得整个网络的拓扑信息,并更新其路由表 以选择最佳路径 。
具体而言,工作流程如下:
初始化 :每个路由器初始化其距离向量,只包含自己直接连接的网络,距离设为 0。周期性更新 :每个路由器周期性地将其距离向量广播给所有相邻的路由器。接收和更新 :每个路由器接收到相邻路由器的距离向量后,检查是否有新的或更短的路径。如果有,则更新自己的距离向量和路由表。收敛 :经过多次交换和更新后,所有路由器的距离向量和路由表最终会收敛到最优路径。RIP 坏消息传得慢
假设一个路由器检测到它无法到达一个网络,这个信息可能需要比较长的时间才能被网络中的所有路由器感知到,这也是 RIP 的一个缺点。
举例说明:
假设有路由器 A、B、C 连接成一条线:A---B---C
。网络 X 连接到 C。
正常情况: A 知道通过 B 和 C 到达 X,跳数为 2。 C 和 X 之间的连接断开:C 检测到 X 不可达。 B 仍然会周期性地告诉 A,它可以通过 B 到达 X(因为 B 还不知道 C 和 X 之间的连接断开)。 A 收到 B 的更新后,会更新自己的路由表,认为通过 B 到达 X 的距离变大(可能是通过其他路径,或者仍然通过 B,但距离变为无穷大之前的某个值)。 这个过程会重复多次,直到 A 最终确定 X 不可达。 最短路径计算方法 当路由器 $A$ 接收到来自相邻路由器 $B$ 发送的关于某个子网 $N$ 的距离向量 $V_{B}$ 时,它需要将 $V_{B}$ 中的跳数加一 然后与当前的到达子网 $N$ 的距离向量 $V_{A}$ 进行比较(需要加一的原因时从 $A$ 出发要经过 $B$,所以多了一跳),具体比较方式如下:
如果 $A$ 不存在到达子网 $N$ 的路由的话,直接添加 $V_{B}$ 进入路由表 如果 $V_{B}$ 的跳数小于 $V_{A}$ 的跳数的话,使用 $V_{B}$ 替换 $V_{A}$ 以上过程使用的算法名称叫做 Bellman-Ford 算法,是一种寻找单源最短路径的算法,单源最短路径的意思是从一个结点出发到达其他结点的最短路径。这个算法不会直接考察,了解这个算法的名称即可。
OSPF 算法 OSPF(Open Shortest Path First)是一种基于链路状态的内部网关协议(IGP),广泛应用于中大型网络中。
OSPF 几乎不考察,这里主要了解以下几个小节的概念即可。
链路状态通告 路由器通过链路状态通告(LSA,Link State Advertisement)来了解其与邻居之间的链路状态。
在 RIP 路由算法中,路由器会定期将自己的距离向量发送给相邻的路由器。在 OSPF 中,也有类似的概念,不过这里传送的不是距离向量,而是链路状态通告。
路由器将其自身的状态和与邻居的链路状态信息打包成链路状态包(LSP,Link State Packet),并在网络中洪泛(flooding)传播。
每个 LSA 专注于描述一种类型的链路状态或网络信息。一个 LSA 包含的信息通常是:
路由器与某一特定链路的连接状态(如 Router LSA)。 某个网络的状态和与其相连的路由器信息(如 Network LSA)。 区域间或外部路由信息(如 Summary LSA 和 AS External LSA)。 链路状态数据库 链路状态数据库(LSDB,Link State Database)是 OSPF 协议中的一个关键组件,它存储了网络中所有链路状态通告(LSA)。通过 LSDB,每个路由器可以构建整个网络的拓扑图,并使用 Dijkstra 算法计算最短路径树。
这里举个例子方便大家理解 LSDB 的概念。
假设我们有一个简单的网络拓扑,包含 4 个路由器(R1, R2, R3, R4)和几个网络网段(NetA, NetB, NetC)。
NetA
/ \
[R1]-----[R2]-----[NetB]
| | |
| | |
[NetC] [R3]----[R4]
在链路状态算法收敛之后,某个路由器的 LSDB 可能是如下这种形式:
LSA 类型 LSA ID 路由器 ID 链路 ID 链路类型 路径成本 连接的路由器或网络 Router 1 R1 NetA 广播链路 10 R2 Router 1 R1 NetC 广播链路 5 Router 2 R2 NetA 广播链路 10 R1 Router 2 R2 NetB 广播链路 15 R4 Router 2 R2 R3 点对点链路 20 R3 Router 3 R3 R2 点对点链路 20 R2 Router 3 R3 R4 点对点链路 10 R4 Router 4 R4 NetB 广播链路 15 R2 Router 4 R4 R3 点对点链路 10 R3
链路状态路由算法 OSPF 中的链路状态路由算法的思想与 RIP 中的最短路径计算算法的思想类似,不过这里是使用 Dijkstra 算法来计算最短路径。
Dijkstra 算法使用 LSDB 中的信息来生成一棵最短路径树(SPT),确定从源节点到所有其他节点的最短路径。
对比 特性 OSPF RIP 协议类型 链路状态协议(Dijkstra 算法) 距离矢量协议(Bellman-Ford 算法) 路由度量 基于带宽的成本 基于跳数(最大 15 跳) 拓扑视图 全局拓扑视图 仅相邻信息 收敛时间 快 慢 网络规模 适用于大型复杂网络 适用于小型网络 更新机制 事件驱动(LSA 泛洪) 周期性(每 30 秒广播路由表) 安全性 支持多种认证机制 RIP v2 支持简单认证,RIP v1 无认证 配置和管理 配置复杂,适合大规模网络 配置简单,适合小规模网络 更新信息 发送链路状态变化 发送整个路由表 多路径支持 支持等价多路径路由(ECMP) 支持但效果较差
6 - SDN 了解SDN控制平面、数据平面、接口以及流表基本概念,可能在选择题中考察一题。
软件定义网络 (SDN) 是一种新颖的网络架构,它将网络的控制功能从传统的网络硬件中解耦出来,并允许通过软件应用程序来进行集中式管理。SDN 提供了更高的网络灵活性,使得网络配置、优化、管理和调试都变得更加简单。
控制平面和数据平面 在 SDN 中,主要有两个关键的组件:数据平面 (Data Plane) 和控制平面 (Control Plane)。
数据平面 (Data Plane):这是网络中负责处理数据包的部分,通常是在交换机、路由器等设备上。 它基于控制平面提供的策略和规则,进行数据包的转发、丢弃或修改。 数据平面通常需要高效地执行操作,因为它直接影响网络的性能。 控制平面 (Control Plane):控制平面负责整个网络的决策和策略,确定如何处理在网络中流动的数据包。 在传统的网络设备中,控制平面直接嵌入在设备上。但在 SDN 中,这个控制平面被抽象为一个集中的软件控制器。 控制器与网络设备之间的交互是通过某些标准化的接口进行的,这样可以确保多厂商设备的互操作性。 接口 SDN 架构中的接口主要分为南向接口和北向接口。
南向接口 (Southbound Interface):这是 SDN 控制器与网络设备之间的接口。 它允许控制器下发流表到数据平面设备,并从设备获取信息。 OpenFlow 是最常用的南向接口协议,但还有其他协议也被使用。 北向接口 (Northbound Interface):这是 SDN 控制器与网络应用或上层服务之间的接口。 通过这个接口,应用程序可以请求网络服务或查询网络状态,并指导控制器进行相应的网络配置。 这个接口通常没有严格的标准,但通常提供 RESTful API 供开发者使用。 除此之外,还有东向接口 (East/West Interface),它用于 SDN 控制器之间的通信,特别是在多控制器的环境中。
流表 流表基本上是一个数据库或查找表,用于决定如何处理经过交换机的数据包。
在 OpenFlow 交换机中,可能有多个流表,并且数据包可能按照顺序经过这些流表。每个流表可能基于不同的规则或策略来处理数据包,这为网络设计提供了高度的灵活性。
流表的内容通常由 SDN 控制器动态管理和更新,这是通过南向接口(如 OpenFlow 协议)实现的。当网络的状态或策略发生变化时,控制器可以修改流表条目以适应新的需求。
流表中主要包含如下部分:
匹配字段 (Match Fields):这些字段描述了特定的数据包特征。例如,它可以匹配数据包的源地址、目的地址、端口号、VLAN 标签等。 当一个数据包到达交换机时,它的头部字段会与流表中的匹配字段进行比较,以决定哪个条目适用于该数据包。 优先级 (Priority):当多个流表条目都能匹配到一个数据包时,优先级最高的条目会被选中。 优先级使得网络管理员可以设计更为精确和特定的流规则。 计数器 (Counters):这些是用于收集统计信息的,如匹配到某个流条目的数据包数量。 计数器有助于网络监控和分析。 指令和动作 (Instructions & Actions):当一个数据包与流表条目匹配时,会执行相应的指令和动作。 常见的动作包括:转发数据包到特定的端口、丢弃数据包、修改数据包头部信息、发送数据包到控制器等。 7 - 网络层设备 掌握路由器的组成和功能,以及掌握路由表的画法,会在选择题和大题中考察。
路由器组成和功能 组成部分:
CPU(Central Processing Unit):路由器的中央处理单元,负责处理数据包的转发和路由决策。CPU执行路由算法、管理路由表和处理控制面的任务。 内存(Memory):路由器的内存用于存储操作系统、路由表、缓存、缓冲区以及临时数据。内存的大小和速度对路由器的性能至关重要。 接口(Interfaces):路由器通常具有多个网络接口,例如以太网端口、无线局域网接口(Wi-Fi)、串行接口等,用于连接到不同类型的网络和设备。 操作系统(Operating System):路由器运行的操作系统通常是专门设计的网络操作系统,用于管理设备、执行路由协议、配置接口和提供网络服务。 路由表(Routing Table):路由表是路由器的核心组成部分,它存储了关于网络之间如何进行路由的信息。路由表包括目标网络的IP地址、下一跳路由器、接口和跃点数等信息。 功能:
数据包转发:路由器的主要功能之一是根据路由表将数据包从一个接口转发到另一个接口,以便在不同网络之间进行通信。 路由决策:路由器根据路由协议(如RIP、OSPF、BGP等)和路由表的信息,决定如何将数据包传送到目标网络。 NAT(Network Address Translation):路由器可以执行NAT,将内部私有网络中的设备使用单一的公共IP地址映射到互联网上,以增加网络安全性和节省IP地址。 路由表的分组转发 路由表
路由表是路由器内部的数据结构,其中包含了有关网络之间如何进行路由的信息。路由表是根据路由协议(如RIP、OSPF、BGP等)和手动配置动态生成和维护的。
路由表包含如下信息:
目标网络(Network Destination):表示数据包要传递到的目标网络或主机。 子网掩码(Network Mask):确定了目标网络的范围,路由器使用它来匹配数据包的目标地址。 网关(Gateway):数据报转接口的IP地址。 接口(Interface):指明了路由器上哪个物理或逻辑接口将被用来转发数据包。 跳数/度量值(Metric):跳数或度量值是路由选择的一个度量标准,用来表示到达目标地址的成本。如果存在多条路由到同一个目的地,路由器通常会选择跃点数最低的路由。 分组转发
当路由器收到一个数据包,它首先查找路由表以确定数据包的目标网络。 一旦确定了目标网络,路由器使用路由表中的信息决定下一跳路由器和出接口。 路由器会将数据包复制到适当的出接口,并以数据链路层帧的形式发送到下一跳路由器。 这个过程在网络中不断重复,直到数据包到达目标网络。 路由表在分组转发的时候,需要修改IP数据包中的哪些字段?
TTL 减 1。 重新计算 checksum(校验和)。 如果是 NAT 路由器的话,需要修改 源IP 或者 目的IP地址。 如果IP数据包长度超过输出链路的MTU,则总长度字段、标志字段、片偏移字段都需要修改。 NAT NAT(Network Address Translation,网络地址转换)是一种网络技术,用于在私有网络(通常是局域网)内的多个设备与外部互联网之间共享单一公共 IP 地址。NAT 通过修改数据包的源 IP 地址和目标 IP 地址来实现这一目标。
Default Gateway 192.168.1.1
145.12.131.7 (Public IP Address)
NAT表 上图中路由器的 NAT表 的示例如下:
私有IP地址 私有端口 公有IP地址 公有端口 协议 连接状态 192.168.100.3 12345 145.12.131.7 54321 TCP ESTABLISHED 192.168.100.4 8888 145.12.131.7 54322 UDP NEW 192.168.100.5 15839 145.12.131.7 54323 TCP SYN_SENT 192.168.100.3 7890 145.12.131.7 54324 TCP ESTABLISHED
表中条目 包含如下内容:
内部私有IP地址:局域网中设备的私有IP地址。 内部端口号:发送数据包的私有网络设备所使用的端口号。 外部公有IP地址:路由器在广域网(WAN)侧使用的IP地址,通常是单个IP地址,但也可能有多个。 外部端口号:与内部端口号对应的,由NAT分配用于标识特定会话的公有端口号。 协议类型:数据包使用的协议(如TCP、UDP等)。 NAT表的条目通常是动态创建的。当内部设备发起到外部网络的连接时,路由器会在NAT表中创建一个条目。通过NAT表,路由器可以将从外部网络收到的数据包转发到正确的内部设备。当NAT表中的条目因为超时或者NAT表容量限制而被删除时,新的数据包会触发创建新的NAT条目。
地址转化过程 NAT的地址转化过程如下所示,分为数据包进入公网 或者 进入内网:
当内网IP数据包经过NAT路由器向外部发送时,其源IP地址和端口会被修改成公有IP地址和公有端口。 当IP数据包经过NAT路由器被发送往内网的某个机器时,其目的IP地址和端口会被修改位私有IP地址和私有端口。 私有IP地址 内网地址(私有IP地址)包含以下三个范围:
10.0.0.0/8
:从 10.0.0.0
到 10.255.255.255
,用于大型网络和企业网172.16.0.0/12
:172.16.0.0
到 172.31.255.255
,用于中型网络192.168.0.0/16
:192.168.0.0
到 192.168.255.255
,用于小型网优势 安全性增强:通过隐藏内部网络的真实结构,NAT 提供了一定程度的安全性,可以有效减少攻击者直接访问内部网络的机会。 地址空间节省:NAT 允许多个设备使用单一的公共 IP 地址,这有助于缓解 IPv4 地址枯竭的问题,尤其是在大规模部署中。 IPv4 地址重用:NAT 允许内部网络使用私有 IP 地址,因此可以重复使用相同的私有 IP 地址范围,而不会与其他网络冲突。 路由器接口的IP的地址 点对点连接 :当两个路由器直接相连时,它们的接口通常会使用一个小的子网,比如一个/30的IPv4子网,提供两个可用的IP地址,每个路由器接口配置一个。连接到子网 :路由器的接口连接到局域网或子网时,接口将被分配一个该子网内的IP地址,通常选择子网的第一个或最后一个IP地址,用作该子网内设备的 默认网关 。