1. 网络层概述

1.1 网络层功能

两大部分与两大功能
  • 数据平面:从其输入链路向其输出链路转发数据包,即路由器的功能
  • 控制平面:协调路由器的转发操作,使得数据报沿着源和目的地之间的路由器最终进行端到端传输
功能主体操作实现时间尺度
转发(forwarding)数据平面将分组从一个输入链路接口转移到适当的输出链路接口的路由器本地操作硬件:转发表纳秒
路由选择(routing)控制平面确定分组从发送方流向接收方采取的端到端路径的网络范围处理过程软件:路由选择算法毫秒或秒

网络层的报文称为数据报(Datagram)

1.2 网络服务模型

网络服务模型 :定义了网络层中分组在发送与接收主机之间的端到端传输特性
  • 确保交付:确保分组将最终到达目的地
  • 时延上限:确保规定时间内分组能够到达目的地
  • 有序交付:确保分组以发送的顺序到达目的地
  • 带宽下限:确保网络提供的带宽至少满足某个下限值
  • 安全性:在源加密并在目的地解密

因特网的网络服务:尽力而为服务(best-effort),既不保证按序,也不保证交付,既不保证时延,也不保证带宽(实际上就是无服务

2. 路由器工作原理

2.1 路由器部件

2.1.1 输入端口

输入端口操作
  • 查找:使用转发表查找输出端口(最核心最重要)
  • 物理层处理:信号转换、信号解调
  • 链路层处理:帧解封装、地址解析、错误检测
  • 检查和更新数据报首部字段:包括验证协议版本、检验和计算、TTL字段的检查和更新
  • 更新网络管理计数器:如接收到IP数据报的数目和丢弃的数据报数量

查找规则
  • 影子副本(shadow copy):指在每个输入端口上维护转发表的本地副本,使得每个端口可以独立地做出转发决策,而不需要实时依赖集中式路由处理器
  • 前缀匹配(prefix):路由器使用分组目的地址的前缀与该表中的表项进行匹配
  • 最长前缀匹配规则(longest prefix matching rule):在该表中寻找最长的匹配项,并向最长前缀匹配相关联的链路接口转发分组

实践中,使用快速查找算法和嵌入式内存设计来加速查找

2.1.2 交换结构

负责在输入端口和输出端口之间高效地转发数据包

交换方式操作性质
经内存交换分组首先被存储到内存中,由CPU完成发送到输出端口依赖CPU和内存,速度非常慢
经总线交换通过一个共享的总线在输入端口和输出端口之间传递并发转发,一次只有一个分组能跨域总线,总线的带宽决定了交换速度
经互联网交换利用纵横式交换机,通过控制交叉开关进行分组转发并行转发,高吞吐量和低延迟

2.1.3 输出端口

取出已经存放在输出端口内存中的分组并将其发送到输出链路上

2.2 排队

输入/输出排队:分组缓存在输入/输出端口队列中等待交换/传输

  • 流量突发:短时间内到达大量分组
  • 网络拥塞:端口处理能力有限,无法同时处理多个分组
  • 队列头部阻塞(Head-of-Line Blocking,HOL):排在前面的分组阻塞了后续分组的处理

缓存大小的传统经验方法:缓存数量(B) = 平均往返时延(RTT) × 链路容量(C)

缓存太小:丢包
  • 丢包率太高:缓存不足以存储所有传入的数据包
  • 性能下降:频繁重传增加网络延迟
缓存太大:缓存膨胀(bufferbloat)
  • 过大的缓存会让路由器从一个转发设备变成一个存储设备,分组到达路由器之后就一直留在缓存中排队,长时间内路由器既不会转发该分组,也不会告知发送方网络拥塞
  • 路由器的缓存只是用于辅助转发,用于处理一定程度的流量突发,如果流量大到完全超过路由器的处理能力,那么路由器应该丢包以告知发送方降低发送速率或改变路由路径,而不是缓存大量分组,给发送方造成一种路由器性能过剩的错觉

2.3 调度

分组调度器(scheduler):输出端口的分组调度器确保数据包按照特定的规则和优先级被发送,从而优化网络性能和服务质量

2.3.1 先来先服务/先进先出

FCFS/FIFO:分组按照到达的顺序被调度离开

2.3.2 优先权排队

priority queuing:根据优先级将分组分配到不同的队列,调度器优先从队列非空的最高优先权中选择一个分组传输,同一优先级队列中选择FIFO方式

非抢占式(non-preemptive):一旦分组开始传输,就不能被打断

2.3.3 轮询调度/循环排队

Round Robin:分组先被分到不同的类,调度器在这些类之间轮流提供传输服务

保持工作排队(work-conserving):有分组在排队的时候,不允许链路空闲,即如果当前类没有分组,会立即检查下一个类

2.3.4 WFQ

加权公平排队(Weighted Fair Queuing,WFQ):类似循环排队,但是每个类根据自身情况会被分配到一个权值,调度器根据权值决定传输的带宽份额

2.3.5 网络中立性

网络中立性(Net Neutrality):是一个政策,主张互联网服务提供商(ISP)应平等对待所有互联网流量,不得因内容、应用、服务、用户或来源的不同而区别对待,具有以下原则:

  • 无阻塞:不得屏蔽合法的内容、应用、服务
  • 无限流:不得损害或降低内容、应用、服务的合法互联网流量
  • 无付费优先:ISP不能直接或间接地使某些流量优于其他流量

实际上,这只是一个愿景或者说是提倡,大部分互联网公司并没有遵循这些原则,如百度云盘

3. IPv4

3.1 IPv4数据报格式

如果IPv4数据包没有选项,则大小为20字节

字段长度/比特功能
版本(Verision)4指定IP协议版本,IPv4的值为4
首部长度(Header Length)4指示IP首部的长度,以32位字为单位
服务类型(Type of Service,TOS)8表示数据报所需的服务质量
数据报长度(Total Length)16指定整个IP数据报的长度,以8位字节为单位
标识(Identification)16唯一标识每个IP数据报,用于分片的重新组装
标志(Flags)3控制和标识数据报的分片
片偏移(Fragment Offset)13指示分片在原始数据报中的位置,用于重新组装
寿命(Time to Live,TTL)8限制数据报在网络中的生存时间,防止无限循环
协议号(Protocol)8指示IP数据报所承载的运输层协议
首部检验和(Header Checksum)16用于检测IP首部在传输过程中是否发生错误
源IP地址(Source IP)32发送方的IP地址
目的IP地址(Destination IP)32接收方的IP地址
选项(Options)可变,每项32位提供IP数据报的附加功能和控制
数据(Data)可变实际的负载数据

协议号值为6表示数据部分要交给TCP,协议号值为17表示数据部分要交给UDP
协议号是网络层和运输层绑定的黏合剂,端口号是运输层和应用层绑定的黏合剂

3.2 IPv4编址

3.2.1 子网

接口(interface):主机和路由器与物理链路之间的边界

从技术上讲,一个IP地址与一个接口相关联,而不是与一个设备相关联!!!

点分十进制计法(dotted-decimal notation):地址中的每个字节用它的十进制形式书写,各字节间以句点隔开

IP地址193.32.216.9的二级制记法是11000001 00100000 11011000 00001001

子网掩码(Subnet Mask):是一个32位数字,用于确定IP地址中哪些部分是子网标识,哪些部分是主机标识

子网掩码如果是255.255.225.0,即11111111 11111111 11111111 00000000,表示前24位用于子网标识,也可以记作/24

子网(Subnet):是较大网络中的一个分段区域,由一组IP地址构成,用于更精细地组织和管理网络

有两个地址始终预留用于特殊用途

  • 0.0.0.0:用作本地地址
  • 255.255.255.255:用作广播地址

3.2.2 分类编址

分类编址(classful addressing):IP地址的网络部分被限制为8位、16位和24位,分别被称为A、B和C类网络

局限性:一个C类网络仅能容纳254台主机(8位),一个B类网络却可以容纳65534台主机(16位),如果有一个组织具有2000台主机,使用C类网络太小,而使用B类网络又无法充分利用

3.2.3 无类别域间路由选择

无类别域间路由选择(Classless Interdomain Routing,CIDR):使用IP地址/前缀长度a.b.c.d/x的形式来表示子网地址,前x位用于子网部分,其余位数用于主机部分,子网内的所有设备都共享相同的子网地址

  • 灵活度高:可以进行不同大小的子网划分
  • 地址聚合(address aggregation):支持将多个小的地址块表示为一个更大的地址块(例如将192.168.1.0/24192.168.2.0/24聚合为192.168.0.0/22
  • 路由优化:当外部路由器转发外部数据报到组织时,只需要考虑前缀x位即可

3.3 IPv4地址分配

如何获取一块地址?
联系互联网服务提供商(ISP),申请IP地址块,一旦ISP同意,会提供可用的IP地址块和相关的配置信息

3.3.1 DHCP协议

动态主机配置协议(Dynamic Host Configuration Protocol,DHCP):用于主机自动分配得到IP地址及其他网络配置参数(子网掩码,默认网关,本地DNS服务器地址等),无需人工干预

因为DHCP支持主机每连接到一个新的网络后,都能够自动分配到对应的IP地址并实现网络配置,无需任何手动操作,因此又被称为即插即用协议(plug-and-play)和零配置(zeroconf)协议

客户-服务器协议
  • 客户:新到达的主机
  • 服务器:子网中的DHCP服务器
  • DHCP中继代理:配置在路由器上,如果当前子网没有DHCP服务器,可以通过中继代理与其它子网的DHCP服务器通信,以此实现DHCP服务

IP地址池:是DHCP服务器管理的一组IP地址,其跟踪每个IP地址的状态用于动态分配

  • 可用(Available):未被分配给任何客户端,处于可供分配的状态
  • 分配(Allocated):已分配给客户端,正在使用中,租约期间内不能再分配给其他主机
  • 保留(Reserved):保留给某些特定设备,确保这些设备每次连接获得相同IP地址

3.3.2 DHCP报文格式

字段长度/字节含义
op(Operate)1指定报文类型,1表示请求,2表示响应
htype(Hardware Type)1指定硬件地址类型,1表示以太网
hlen(Hardware Address Length)1指定硬件地址的长度,以太网是6字节
hops1报文经过的DHCP中继代理的跳数
xid(Transaction ID)4客户端产生的随机数,用于匹配请求和应答报文
secs(Seconds)2客户端启动DHCP进程的时间
flags2设置一些特殊选项,最高位1是广播,0是单播
ciaddr(Client IP)4客户端的IP地址
yiaddr(Your IP)4服务器分配给客户端的IP地址
siaddr(Server IP)4服务器的IP地址
giaddr(Gateway IP)4中继代理的IP地址
chaddr(Client Hardware)16客户端的硬件地址
sname(Server Name)64服务器主机名
file128服务器为client指定的启动配置文件名及路径信息
options变长网络配置参数

选项字段:采取CLV结构(Code-Length-Value),其中code和length都是1字节,value变长

CodeValue
1提供网络的子网掩码
3指定默认网关的IP地址
6指定DNS服务器的IP地址
51指定客户端的IP地址租约时间
53DHCP报文类型,详情见下
54指定DHCP服务器的IP地址

3.3.4 DHCP报文类型

报文类型Code说明
Discover1客户端发送的广播请求,用于查找可用的DHCP服务器
Offer2DHCP服务器响应客户端的Discover报文,提供IP地址和其他配置信息
Request3客户端请求Offer中的IP地址
Decline4客户端通知DHCP服务器,它收到的IP地址不可用
ACK5DHCP服务器确认客户端的Request报文,分配指定的IP地址并提供其他配置
NAK6DHCP服务器拒绝客户端的Request报文
Release7客户端通知DHCP服务器,它已经释放了之前分配的IP地址
Inform8客户端请求额外的配置信息,但不需要IP地址的分配

3.3.4 DHCP交互

  1. 发现Discover:客户端将Discover报文通过端口67广播,以寻找DHCP服务器

  2. 提供Offer:所有收到Discover报文的DHCP服务器都会返回一个DHCP Offer报文,包含多个IP地址以及对应的配置参数

  3. 请求Request:客户端从收到的多个DHCP Offer报文中选择一个,发送DHCP Request报文响应该服务器,请求其中一个IP地址

  4. 确认ACK:服务器收到DHCP Request报文后,发送DHCP ACK报文响应,确认客户端的IP地址分配,并提供进一步的配置信息

  • src: 0.0.0.0,68:客户端在没有分配IP地址之前都使用本地地址0.0.0.0,且端口68是DHCP客户端监听的端口
  • dest: 255.255.255.255,67:每个报文都是采取广播255.255.255.255,且端口67是DHCP服务器监听的端口

为什么采用广播?

  • DHCP Discover:客户端不知道服务器的IP地址
  • DHCP Offer:客户端没有IP地址
  • DHCP Request:客户端需要通知未被选择的服务器,释放那些被拒绝的IP地址
  • DHCP ACK:使用单播进行确认(也可以使用广播)

3.3.5 DHCP续约

  1. 客户端会在特定时间(通常是租约时间剩余50%和12.5%),向DHCP服务器发送一个Request报文请求续租
  2. 服务器响应一个ACK报文,确认续租并重新约定一个租约时间
  3. 当客户端不再需要IP地址或者租约到期,会发送Release报文通知DHCP服务器释放IP地址

4. NAT

网络地址转换(Network Address Translation,NAT):部署在路由器上,用于实现私有网络中的主机与互联网通信

  • 私有网络:用于专用网络和局域网(LAN),在互联网中不可路由,有三个特定地址空间10.0.0.0/8172.16.0.0/12192.168.0.0/16
  • 公有网络:用于互联网和广域网(WAN),在互联网中是可路由的,具有全球唯一性
NAT的意义
  • 不同私有网络中的IP地址是可以重复的:因为这些地址只在各自的私有网络中有效,在互联网中不可路由,不会导致地址冲突
  • 私有网络中的主机需要通过NAT路由器与互联网通信:因为NAT路由器的IP地址是公有网络的,它不仅可以访问互联网,也可以访问私有网络
NAT转换表 :记录了内部私有IP地址和端口与外部公共IP地址和端口之间的映射关系
  1. 发起请求:私有网络中的客户主机发起访问互联网中目标服务器的请求到NAT
  2. 地址转换:NAT路由器将内部私有IP地址和端口号转换为公共IP地址和端口号,并将映射关系记录在NAT转换表中
  3. 转发请求:NAT设备将转换后请求发送到互联网中的目标服务器
  4. 接收响应:目标服务器处理请求并发送响应到NAT路由器
  5. 地址转换:NAT路由器根据先前记录的表项信息,将公共IP地址和端口号映射回原始的私有IP地址和端口号
  6. 转发响应:NAT设备将转换后响应发送到私有网络中的客户主机

5. IPv6

5.1 IPv6数据报格式

字段长度/比特含义
版本(Version)4指示IP协议版本,IPv6的值为6
流量类型(Traffic Class)8类似TOS,用于分类数据报
流量标签(Traffic Label)20用于标识数据流,支持流量的优先级处理
有效载荷长度(Payload Length)16指示数据部分长度
下一首部(Next Header)8指示数据报要交付给哪个协议(TCPorUDP)
跳限制(Hop Limit)8类似TTL,限制数据包路由次数
源地址(Source IP)128指示数据报发送者的地址
目的地址(Destination IP)128指示数据报接收者的地址
数据(Data)变长有效载荷
IPv6与IPv4的差别
  • 扩大的地址容量:IPv6使用128比特地址(这不可能用完!)
  • 取消选项:IPv6取消选项字段,固定40字节
  • 取消分片:IPv6不允许在中间路由器上进行分片与组装操作,只能在源和目的地进行,简化了路由器工作
  • 取消检验和:网络层检验的功能实属多余,可以依靠运输层进行检验,而且检验是一件耗时的操作
  • 流(flow):通过流标签标识特定的数据流并进行优先处理,如优化流量控制和服务质量

5.2 IPv6编址

表示方法:128比特,用冒号分隔的8组4位16进制数

  • 省略前导0:省略4位16进制数前导的0,如2001:0db8:0000:0000:0000:0000:0000:0001可以简化为 2001:db8:0:0:0:0:0:1
  • 压缩连续0:连续的0组可以用::表示,如2001:0db8:0000:0042:0000:0000:0000:1234可以简化为 2001:db8:0:42::1234

IPv6编址的其他知识在此不作介绍,主要是分析IPv4

5.3 IPv6迁移

隧道(tunneling):将IPv6的数据报封装在IPv4的数据报内,即IPv4的有效载荷是IPv6的数据报,虽然逻辑上是使用IPv6的通信,但实际上是使用IPv4的通信

改变网络层协议是极其困难的,因为网络层协议是互联网架构中的最核心部分,向上要调整运输层,向下要调整链路层,以及大部分应用和服务都基于网络层协议来设计,牵一发而动全身

6. 泛化转发

流表 :flow table是OpenFlow中定义的一种数据接口,用于实现泛化转发,即“匹配+操作”的模式
  • 首部字段值的集合:协议栈中的多个首部字段的集合
  • 计数器集合:用于跟踪与流表条目匹配的分组数量以及更新时间
  • 操作集合:指定当数据包匹配流表条目时,网络设备应执行的动作

匹配 :允许对运输层、网络层和链路层的首部字段进行匹配

在OpenFlow的不同版本中,流表匹配的字段支持逐渐增强,可以匹配的项目越来越多

操作 :决定了应用于流表项匹配的分组的处理
  • 转发:将入分组转发到一个或多个特定的输出端口
  • 丢弃:丢弃匹配的分组,常用于阻止错误或恶意的分组通过网络
  • 修改:在转发到输出端口之前,重写分组的首部字段

7. 中间盒

中间盒(middlebox):在源主机和目的主机之间的数据路径上,执行除了IP路由器正常标准功能之外的其他功能的任何中间的盒子

提供的服务
  • NAT:隐藏内部网络的结构、专用网络寻址、重写数据报
  • 安全:使用防火墙和入侵检测系统扥防御措施,监控和控制进出网络的分组,保护网络免受未经授权的访问和攻击
  • 性能增强:通过不同的技术来优化数据传输和处理,如实现压缩、缓存、负载均衡、搜索引擎查询等服务

防火墙(firewall):检查首部字段,拒绝可疑的数据报进入内部网络

入侵检测系统(Intrusion Detection System,IDS):执行深度分组检查(Deep Packet Inspection,DPI),不仅检查分组的首部字段,还检查其有效载荷,将这些内容与特征数据库匹配,如果有匹配项,则产生一个告警

8. 互联网架构原则

互联网架构原则:目标是连接,工具是因特网协议,智能是端到端而不是隐藏在网络中

IP沙漏:在物理层、链路层、运输层和应用层可能具有许多协议,但是在网络层只有一个网际协议IP,因此又称为“跨越层”,实现了隐藏底层技术的实现,并为上层提供了统一的服务接口

端到端原则:网络的智能和复杂性应该集中在端点设备上,而不是在网络核心中,即网络的基础设施应该尽量保持简单,将复杂的功能和处理留给应用程序和终端设备

去中心化(Decentralization):在网络中,没有单一的中心控制点,而是将控制和决策分布在多个节点上