网络层:数据平面
网络层负责从发送主机到接受主机的报文段传输,这一阶段的数据包称为数据报
网络层设备:主机和路由器
网络层的两个功能:转发和路由选择(转发是一个短距离操作问题,路由选择是一个长距离规划问题)
网络层一般被分为数据平面和控制平面。数据平面负责实际的数据包转发,执行控制平面的决策;控制平面负责网络的管理和控制,决定数据包的转发路径。
因特网服务模型:尽力而为,什么都无法保证(无法保证成功将分组送到,端到端的时延和顺序还有最小流量都不能保证) - 网络中心尽可能简单,将复杂的部分留在边缘 - 简单的机制使得互联网可以广泛部署
路由器
路由器架构如下:

在路由器的输入端口处集成有物理层、链路层、网络层的功能。在输入端口的网络层固件中,其进行分布式的交换,完成匹配+转发的功能。
转发表中,使用最长前缀匹配算法:在查找给定目标地址的转发表条目时,使用与目标地址匹配的最长地址前缀。
交换结构:将数据包从输入链路传输到适当的输出链路。有三种主要的类型:
- 经内存交换
- 经总线交换
- 经互联网络交换
交换速率定义为数据包可以从输入传输到输出的速率

HOL阻塞:当一个数据包到达时,如果交换结构正在忙于处理另一个数据包,则该数据包必须等待,直到交换结构完成当前数据包的处理。(队列前端阻塞但是已经进队了)
排队调度策略:FIFO,RR,优先级,加权公平排队
网络协议IP
IPv4编址:CIDR - IP地址的任意长比特作为网络部分,地址格式是a.b.c.d/x,其中x是网络部分的长度
IPv6为了解决IPv4地址空间不足的问题,将IP地址长度从32比特增加到128比特。但是IPv4路由器不能处理IPv6数据报。解决方法是建隧道,IPv6数据报作为IPv4数据报的payload。
DHCP
当主机加入网络时,动态地从网络服务器获取IP地址
加入时先broadcast DHCP discover,DHCP服务器会给它分配一个IP,发送给客户端,客户端再发送DHCP request,确认使用这个IP,最后DHCP服务器再发送DHCP ACK,客户端确认使用这个IP。(注意,默认情况下,四个都是广播)
DHCP可以返回的不只是IP地址,还有客户机的第一跳路由器地址,DNS服务器的名称和IP地址,以及网络掩码(指示子网网段)
DHCP是应用层协议,使用UDP

获取IPv4地址
ISP会分配其地址空间的一部分给下面各个公司/组织的子网,公司/组织再分配给剩下的主机。
分层寻址:路由聚合 - 可以有效发布路由信息

NAT
由于IPv4地址空间不足,NAT(网络地址转换)被广泛使用。NAT将私有IP地址转换为公共IP地址,从而节省了IP地址。一个内网的机器共享一个公网IP,然后通过NAT转换为公网IP。NAT专用地址(10/8, 172.16/12, 192.168/16)
实现:NAT路由器是透明的,将每个传出数据报的(srcIP, port)转换为(NATIP, new_port),然后NAT路由器会有转换表,将所有目标是(NATIP, new_port)的数据包转换为目标为(srcIP, port)的数据报然后发到内网。
NAT跨越了网络层和运输层,不符合分离原则。饱受争议,但仍然广泛使用。
通用转发和SDN
通用转发:匹配加操作 - 基于目的地的转发:基于目的IP地址进行转发 - 通用转发 - 基于多个首部字段值进行匹配 - 匹配后的操作:删除/复制/修改/日志/分组
转发表也被称为流表。


匹配+操作的抽象统一了不同类型设备,防火墙/NAT/路由器/交换器都可以使用这个抽象。
可以利用流表编程规划路由路线。
习题中的注意点
传统的转发表只能完成基于目的地IP的转发。
写子网的时候CIDR不要图快,记得写出来验证一下有没有输错子网的二进制位到底有多少位。