定义 > 虚电路(Virtual Circuits)“源主机-目的主机路径的行为类似于电话网络的行为”,性能上类似,沿着源-目的路径的网络行为类似。
特点
虚电路网络源于电话产业界(采用“真正”电路)。
呼叫建立及每次呼叫的状态要在网络中的路由器上维持,比面向数据报的网络要复杂。
网络功能复杂,端系统设备简单
对于一般的路由器来说,它主要包含四个部分
输入端口 (Input Ports)
交换结构 (Switching Fabric)
输出端口 (Output Ports)
路由处理器 (Routing Processor)
路由器输入端口处理的工作流程可以概括如下:
输入端口处理 终止路由器上的入站物理链接。路由器根据 forwarding table 来查找输出端口,到达的数据包将通过交换结构转发到该端口。
转发表的更新:通过路由处理器计算和更新转发表,或者从远程 SDN 控制器接收。
转发表是通过一个单独的总线(例如,PCI 总线)从路由处理器复制到线卡(line card)上的,每个线卡都有一个转发表的副本,可以在每个输入端口本地做出转发决策,无需在每个数据包都要调用路由处理器,从而避免了集中处理的瓶颈。
基于目标地址的转发:在最简单的情况下,即将到达的数据包将被转发到的输出端口是基于数据包的目标地址的。在 32 位 IP 地址的情况下,转发表的暴力实现将为每个可能的目标地址有一个条目。由于可能的地址超过 40 亿个,这个选项完全不可能。
实际上路由器中使用分组目的地址的前缀(prefix)与该表中的表项进行匹配,如下图所示:
当有多个匹配项目时,该路由器使用最长前缀匹配规则(longest prefix matching rule),即在该表中寻找最长的匹配项,并向与最长的前缀匹配先关联的链路接口转发分组。
prefix | Link Interface |
---|---|
11001000 00010111 00010 | 0 |
11001000 00010111 00011000 | 1 |
11001000 00010111 00011 | 2 |
Otherwise | 3 |
一个端系统发送给另一个端系统的一批分组可能在网络中选择不同的路径,到达的顺序可能不一致
鉴于转发表的存在,查找在概念上很简单 - 硬件逻辑只是在转发表中搜索最长的前缀匹配。在千兆传输速率下,这种查找必须在纳秒内执行,因此,不仅必须在硬件中执行查找,而且需要对大表进行快速查找的算法;还必须特别注意内存访问时间,从而在设计中嵌入式片上 DRAM 和更快的 SRAM(用作 DRAM 缓存)存储器。实践中经常使用三态内容可寻址存储器(Tenary Content Address Memory,TCAM)来查找
Switch fabric 负责转发功能,完成交换的方式有很多,主要包括下面几种
Input>Memory>Output
),故若总线带宽为每秒写入或读出 B 个分组,则总的转发吞吐量 (分组从输入端口被传送到输出端口的总速率)小于 B/2取出存放在输出端口内存中的分组,并将其传输到输出链路上。
当交换结构将分组交付给输出端口的速率超过输出链路速率,就需要排队与缓存管理功能。当输出端口的缓冲区溢出时,就会出现延时和丢包。
在输入端口和输出端口都可以形成分组队列,随着这些队列的增长,路由器的缓存空间最终将会耗尽,并且当无内存可用于存储到达的分组时将会出现丢包(packet loss)
当交换结构的速度慢于输入端口的速度,就会在输入端口的缓冲区发生排队,会导致排队延时和由于输入缓冲区溢出导致的丢包
线头阻塞(Head-of-the-Line (HOL) blocking): 在队列前面的被阻塞的数据报会阻止队列中的其他数据报被转发
当经过交换结构到达的速度超过了输出端口的处理线速就会发生排队,当输出端口的缓冲区溢出时就会发生丢包
FCFS(FIFO)
维护一个 Queue,按照到达顺序依次处理分组
Priority Queuing
通常每个 Packet 都有一个优先级,不同优先级的 Packet 被分配到不同的队列中,然后按照优先级顺序处理
Round Robin and Weighted Fair Queuing(WFQ)
Round Robin 轮流服务将需要路由发送的资源进行分类,为每种类别生成自有的一个队列,发送时轮流从队列中选取队首的文件包进行发送。如果轮到某个队列时,该队列为空,则跳过该队列。
这样的服务能保障在各不同类型的网络服务中合理分配资源,不会让某一网络服务占用过大的带宽以至于影响其他的网络服务。比如某个下载程序占用过多网速,致使视频浏览出现卡顿或打开网页速度过慢。
WFQ 是基于 Round Robin 方法改进后而成的。对于某些网络服务,如网络电话或视频直播,为了保障能流畅进行,总是需要保留一定的优先带宽。这样情况下就可以使用 Round Robin 轮流服务的升级版本 Weighted Fair Quequing(WFQ)加权公平队列。其中的思想很简单,轮流服务中已经有了各个公平队列,需要做的就是对一些带宽敏感型服务进行标记并附以相应权重 $w_i$,服务时进行侧重就可以。
WFQ 在发送时仍然轮流从队列中选取队首文件包,但选取的数量根据权重 $w_i$ 确定,权重大的服务在一次发送循环中就能多发送文件包,从而确保相应的服务带宽,保证网络的服务质量。
0 1 2 30 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|Version| IHL |Type of Service| Datagram Length |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Identificatifer |Flags| Fragment Offset |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Time to Live |UpperLayerProto| Header Checksum |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Source Address |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Destination Address |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Options | Padding |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Identifer
负责标识一个数据包;Flag
共三位,第一位不使用。第二位 Flags_DF
(Don’t Fragment)表示是否分片;第三位 Flags_MF
(More Fragment)为 0 时表示当前分片为最后一个分片;Fragmentation offset
负责确认偏移量,长度 13 bit,以 8bytes 为单位MTU
(Maximum Transmission Unit)指在网络通信中,数据链路层(如以太网)上一次可以传输的最大数据包大小,以字节为单位。以太网的标准 MTU 大小是 1500 字节32 比特的二进制表示和点分十进制表示法:
223.1.1.1
11011111 00000001 00000001 00000001
根据不同的取值范围,早期将 IP 地址分为五类。IP 地址中前 5 位用于标识 IP 地址的类别,A 类地址的第一位为“0”,B 类地址的前两位为“10”,C 类地址的前三位为“110”,D 类地址的前四位为“1110”,E 类地址的前五位为“11110”。其中,A 类、B 类与 C 类地址为基本的 IP 地址。
1.0.0.1-127.255.255.254
全 0 表示本地地址,全 1 表示在本地网络中向所有机广播128.0.0.1-191.255.255.254
192.0.0.1-223.255.255.254
特殊 IP 地址段
127.0.0.1-127.255.255.254
是预留的一组 IP 地址,主要是用来识别主机本身的地址。也叫做“localhost”,一般用来测试。10.x.x.x, 172.16.x.x-172.31.x.x, 192.168.x.x
三个地址段被称为私有 IP 地址段,也就是局域网所使用的地址段,在公网上不能被路由0.0.0.0
255.255.255.255
IP 地址:
网络号 (高位 bits):指明主机所在网络的编号
主机号 (低位 bits):作为主机在网络中的编号。
网络号相同的 IP 地址属于同一个网络。而网络还可以划分为若干子网(subnet),划分子网的方法是从主机号借用若干个比特作为子网号,剩下的主机位为主机号。
子网 Subnet
: 设备接口的 IP 地址具有同样的网络部分;没有路由器的介入,物理上能够相互到达
子网掩码 Subnet Mask
,子网掩码用来确定网络地址(包括网络号和子网号)和主机地址的长度。子网掩码长为 32 位比特,其中的 1 对应于 IP 地址中的网络号和子网号,而子网掩码中的 0 对应于主机号。有公式 ip_address & subnet_mask = network_address
下图中,一台路由器(具有三个接口)用于互联 7 台主机。
图中左侧的 3 个主机和它们连接的路由器接口,都有一个形如 233.1.1.xxx
的 IP 地址。用 IP 的术语说,互联这 3 个主机接口与 1 个互联网接口的网络形成一个子网(subnet)。IP 编址为这个子网分配一个地址 233.1.1.0/24
,其中 /24
记法,指示 32 比特中的最左侧 24 比特定义了子网地址。
使用子网掩码的分组转发
不划分子网时,路由表只有两项:目的网络地址和下一跳地址。使用子网划分后,路由表中将包括三项:目的网络地址、子网掩码和下一跳地址。
一个 A 类的 IP 地址,可以有 24bit 用于分配主机地址,因此可以支持$2^24$个主机(注意,实际上可接入主机要-2,因为有 2 个要留给 localhost 和广播地址),但是一个家庭或者组织往往不需要这么多的地址空间,造成浪费。
一个 C 类的 IP 地址,只有 8bit 用于分配主机地址,因此只能支持 256 个主机,又不太够用。因此,按传统 IP 地址分类方式分配 IP 被 CIDR 技术取代
CIDR,也被称为无类别域间路由选择(Classless Interdomain Routing,CIDR), 消除了传统的 A 类、B 类和 C 类地址的概念。使用斜线记法,又称为 CIDR 记法来区分网络前缀和主机号,即在 IP 地址后面加上一个斜线 /
,斜线后面用一个数字指定网络前缀的长度。CIDR 将网络前缀都相同的连续的 IP 地址组成 CIDR 地址块。
一个 CIDR 地址块可以表示分类 IP 的多个分类地址,这种地址的聚合称为路由聚合,又称为构造超网(superneting)。
下图为一个示例,
所有的 IP 地址都由 ICANN 规划,然后主要由国际组织 NIC(Network Information Center)具体负责统一分配。
目前全世界共有五个这样的网络信息中心(ARIN,LACNIC,RIPE NCC,AFRINIC,APNIC)
我国申请 IP 地址要通过 APNIC,APNIC 的总部设在日本东京大学。申请时要考虑申请哪一类的 IP 地址,然后向国内的代理机构提出。
Q
现有一公司已获得网络号为 202.1.1.0/24,如果该公司有 3 个部门,
(1)如果第 1 个部门有 60 台计算机,第二个部门有 20 台计算机,第三个部门有 16 台计算机,问如何分配地址?
(2)如果第 1 个部门有 120 台计算机,第 2 个部门有 60 台计算机,第 3 个部门有 60 台计算机,使用上述方法可以分配地址吗?使用 CIDR 方法如何分配地址?
A
(1)以最多台数的部门(60 台)为准,需要的最接近数为 2^6=64,故要从最后个字节借 8-6=2 位,
子网分别为 202.1.1.0, 202.1.1.64, 202.1.1.128, 202.1.1.192
,在这 4 个其中任选 3 个即可。掩码均为 255.255.255.192
。
(2)部门 1 有 120 台主机,需要用 7bit 表示 subnet host id,这样只剩下 1bit 表示子网。而 TCP/IP 协议不允许 subnet id 为全 1 或全 0,因此该策略无法满足。应采用 CIDR 法
首先以最小需求台数部门为准(60 台),此时主机号位数需要 6 位(因为 $60=<2^6-2$),则 subnet id 的位数为 8-6=2 位,然后将子网划分出来,子网分别为 202.1.1.0, 202.1.1.64, 202.1.1.128, 202.1.1.192
接下来,部门 2、3 可以直接在 4 个子网中任选两个,部门 1 选剩下 2 个以满足 120 台的要求(但这两个子网要连续,以便用 CIDR 法合并之,做超网)。比如 202.1.1.128、202.1.1.192
分别给部门 2、3,部门 1 用 202.1.1.0、202.1.1.64
最后将各部门 IP 段用 CIDR 超网形式描述,以便对外发布:
部门 1:202.1.1.0/25; (注意含义:表示前 25 位是网络号,且最后一个字节最高位为 0,后面 7 位是主机号)
部门 2:202.1.1.128/26; (最后一个字节最高两位为 10,后面 6 位是主机号)
部门 3:202.1.1.192/26; (最后一个字节最高两位为 11,后面 6 位是主机号)
将 202.1.1.128、202.1.1.192 给部门 1,202.1.1.0、202.1.1.64 分别给部门 2、3 亦可。此时答案为:
部门 1:202.1.1.0/26;
部门 2:202.1.1.64/26;
部门 3:202.1.1.128/25;
RFC950 参考规定:第一个子网(也就是“全 0 子网”)和最后一个子网(也就是“全 1 子网”)不可用,为的就是避免全 0 子网的网络地址和全 1 子网的广播地址分别与没有划分子网前的网络地址和广播地址相冲突,按照这种旧规定,2 个子网就要借 2 位,00,11 不能用。 但是在后来 RFC1878 中(CIDR),该项规定已被废止了,现在的设备基本上都普遍支持 RFC1878。尼电课程实验/作业/考试都基于新标准
对于第一个子网,网络地址和主网络的网络地址是重叠的,对于最后一个子网,广播地址和主网络的广播地址也是重叠的。即地址有二义性。因此 RFC950 规定 subnet id 不能全 1 或全 0,但如此一来子网划分的 IP 地址浪费严重。
后来 IETF 就研究出了其他一些技术,比如可变长子网掩码 VLSM,该技术是在子网上进一步划分子网,可提高 IP 地址资源的利用率;后来在此基础上研究出了无类别域间路由 CIDR,即消除了传统的 A/B/C 等分类以及划分子网,才是采用网络前缀和主机号的方式来分配 IP 地址,这使得 IP 地址的利用率更好。
主机如何得到 IP 地址?
DHCP
DHCP 是应用层协议。其分配的不仅仅是 IP 地址,还可分配:
报文格式
OP
若是 client 送给 server 的封包,设为 1,反向为 2;Htype
硬件类别,ethernet 为 1;Hlen
硬件长度,ethernet 为 6;Hops
若数据包需经过 router 传送,每站加 1,若在同一网内,为 0;Transaction
ID:事务 ID,是个随机数,用于客户和服务器之间匹配请求和相应消息;Seconds
由用户指定的时间,指开始地址获取和更新进行后的时间;Flags
从 0-15bits,最左一 bit 为 1 时表示 server 将以广播方式传送封包给 client,其余尚未使用;Ciaddr
用户 IP 地址;Yiaddr
客户 IP 地址;Siaddr
用于 bootstrap 过程中的 IP 地址;Giaddr
转发代理(网关)IP 地址;Chaddr
client 的硬件地址;Sname
可选 server 的名称,以 0x00 结尾;File
启动文件名;Options
,厂商标识,可选的参数字段Steps
DHCP 服务器被动打开 UDP 端口 67,等待客户端发来的报文。DHCP 客户端启动时,由于其还未配置 IP 地址,因此只能使用广播方式发送 Dhcpdiscover 包,即该数据包的源地址为 0.0.0.0,目标地址为 255.255.255.255
DHCP 客户从 UDP 端口 68 发送 DHCP Discover 报文。
凡收到 DHCP discover 报文的 DHCP 服务器 都发出 DHCP offer 报文,因此 DHCP 客户 可能收到多个 DHCP offer 报文
DHCP 客户从几个 DHCP 服务器中选择 其中的一个,并向所选择的 DHCP 服务 器发送 DHCP request 报文
被选择的 DHCP 服务器发送确认报文 DHCPACK,客户进入已绑定状态,并可 开始使用得到的临时 IP 地址了
DHCP 客户现在要根据服务器提供的租用期 T 设置两个计时器 T1 和 T2,它们的超时时间分别是 0.5T 和 0.875T。当超时时间到就要请求更新租用期。
租用期过了一半(T1 时间到),DHCP 发送 request 报文 DHCPREQUEST 要求更新租用期。
DHCP 服务器若不同意,则发回否认报文 DHCPNACK。这时 DHCP 客户必须立即停止使用原来的 IP 地址,而必须重新申请 IP 地址(回到步骤 2)
DHCP 服务器若同意,则发回确认报文 DHCPACK。DHCP 客户得到了新的租用期,重新设置计时器。若 DHCP 服务器不响应步骤 6 的 request 报文 DHCPREQUEST,则在租用期过了 87.5% 时,DHCP 客户必须重新发送请求报文 DHCPREQUEST(重复步骤 6),然后又继续后面的步骤。
DHCP 客户可随时提前终止服务器所提供的 租用期,这时只需向 DHCP 服务器发送释 放报文 DHCPRELEASE 即可。
对于外部网络而言,本地网络中的所有设备只共享一个 IPv4 地址。这样做有以下几点好处:
但同时,为与外部网络交互,需进行网络地址转换(NAT),执行 NAT,路由器
Nat 的一些局限——16bit 端口号使得一个局域网地址可以同时支持 60,000 个并发连接!
NAT 存在争议
Internet Control Message Protocol(ICMP,互联网控制消息协议),负责在网络设备间传递控制与错误信息,确保数据包能够顺利抵达目的地。互联网中丢包、路由错误、网络拥塞等状况时有发生。这时,ICMP 便如同一位经验丰富的“诊断医生”,通过发送特定的消息类型,帮助识别并报告这些网络问题。
ICMP 的基本运作原理
ICMP 位于 Internet 协议(IP)之上,属于 TCP/IP 协议栈的网络层。它并不直接参与数据的传输,而是作为 IP 协议的一个辅助工具,通过差错报告和询问机制来实现其功能。ICMP 报文通常封装在 IP 数据包内,包含类型、代码和校验和等字段,用以区分不同的消息类型和提供完整性检查。
差错报告:当数据包无法到达目标或遇到其他传输问题时,路由器或主机可以通过发送 ICMP 错误消息(如“目标不可达”、“超时”等)给源主机,告知发生了什么问题。
ICMP type | Code | Description |
---|---|---|
0 | 0 | echo reply (ping) |
3 | 0 | destination network unreachable |
3 | 1 | destination host unreachable |
3 | 2 | destination protocol unreachable |
3 | 3 | destination port unreachable |
3 | 6 | destination network unknown |
3 | 7 | destination host unknown |
4 | 0 | 源端抑制 source quench(congestion control) |
8 | 0 | echo request (ping) |
9 | 0 | router advertisement |
10 | 0 | router discovery |
11 | 0 | TTL expired |
12 | 0 | IP header bad |
ICMP 的实用价值
网络故障排除:对于网络管理员而言,通过分析 ICMP 反馈的信息,可以迅速定位网络故障,比如判断是网络拥塞还是链路故障导致的数据包丢失。
路径监测与测量:“Traceroute”利用 ICMP 的 TTL(Time to Live)字段递减特性,逐跳追踪数据包的传输路径,帮助理解网络拓扑结构及延迟情况。
可用性检查:“Ping”命令简单有效,成为检测远程主机是否可达的日常工具,广泛应用于网络维护和服务器监控中。
安全考量与限制
尽管 ICMP 对网络运维至关重要,但它也存在被滥用的风险,例如用于 DDoS 攻击中的 Smurf 攻击或放大攻击。因此,合理配置防火墙策略,对 ICMP 流量进行适当限制和监控,是保障网络安全的必要措施。
IPV6 报文格式
Priority: 表示流中分组的优先级
Flowlabel: 表示分组在同一个“stream”中 (“流”的概念尚未完全定义)
next hdr(header): 表示数据的上层协议
IPV6 地址表示
在 IPv6 中,地址分为 8 个段来表示,每段共 4 个字符
104.220.136.100.255.255.255.255.0.0.18.128.140.10.255.255
用冒号十六进制表示为:69DC:8864:FFFF:FFFF:0:1280:8C0A:FFFF
0
可用 ::
替换;当计算机拿到这个压缩后的地址,发现比正常的 128 位少了 n 位,计算机就会试图在::的地方补上 n 个 0,从结果中可以发现,当一个 IPv6 地址被压缩后,如果计算机出现两个或多个::的时候,计算机在将地址还原时,就可能出现多种情况。这将导致计算机还原后的地址不是压缩之前的地址,将导致地址错误,最终通信失败。所以在压缩 IPv6 地址时,一个地址中只能出现一个 ::
FF0C:0:0:0:0:0:B1
零压缩表示为:FF0C::B1
从 IPV4 到 IPV6 过渡
两种推荐方法:
双栈:一些路由器具有双重栈 (v6, v4) 能够在两种格式中转换
隧道: 在穿过 IPv4 路由器时,IPv6 分组作为 IPv4 分组的负载
特性 | IPv4 | IPv6 |
---|---|---|
地址空间 | 32位(约43亿地址) | 128位(近乎无限的地址) |
报头结构 | 20-60字节,可变长度 | 40字节,固定长度 |
报头校验和 | 由每个路由器计算和验证 | 已移除,由其他协议层保证 |
分片处理 | 由发送主机和路由器执行 | 仅由发送主机执行 |
选项字段 | 包含在报头中,处理复杂 | 作为扩展报头,处理高效 |
地址配置 | 手动或DHCP | 支持无状态自动配置(SLAAC) |
地址解析 | 使用ARP(广播) | 使用邻居发现协议(NDP) |
安全性 | 可选,通过IPsec实现 | 内置IPsec支持 |
本地通信 | 广播 | 多播 |
流量控制的相关算法与数据结构——Round Robin 轮流服务,Weighted Fair Quequing(WFQ)加权公平队列与 Leaky Bucket 漏桶限流
关于子网划分—为什么全 0 全 1 子网号不能使用
网络层数据平面 Network Layer:Data Plane