Summary:
- 网络层概述
- 路由器工作原理
- 网际协议:IPv4、网络地址转换、IPv6
网络层概述
网络层的作用是将 packet 从发送主机移动到接收主机。
- 转发 forwarding,数据平面实现
- 路由选择 routing,控制平面实现,确定 packet 从源到目的地的路径
每台路由器中有一个转发表 forwarding table,路由器检查到达的 packet header 的字段值,将其在转发表中索引,确定输出链路接口。
转发表是如何配置的?
- 路由选择算法:每个路由器都有一个路由选择组件,可以互相通信
- SDN (Software-Defined Networking)方法:远程控制器计算和向路由器分发转发表
网络服务模型 network service model
确保交付、latency 上界、有序、最小带宽、安全性, etc
路由器工作原理
路由器的 4 个组件:
- 输入端口:执行物理层和链路层功能;查找转发表决定输出端口
- 交换结构
- 输出端口
- 路由选择处理器:执行路由选择协议、计算转发表,或(在 SDN 中)和远程控制器通信
- 输入端口
路由器有 n 条链路,规定每个链路接口负责一个目的地址范围内所有 packet 的转发;路由器用 packet 目的地址前缀与表项进行匹配(多个匹配时使用最长前缀匹配规则),确定输出端口。
此后,还需要检查 packet 的版本号、检验和和 TTL,并且重写后两个字段;
最后,发送 packet 进入交换结构,如果其他输入端口的 packet 正在使用交换结构,可能就会出现阻塞-排队。 - 交换:经内存/总线/互联网络交换
- 排队
输入和输出端口都可能排队,队列增长到一定地步,路由器缓存用尽,无法存储到达的 packet,就会丢包
丢包和标记策略:主动队列管理 AQM 算法 - 分组调度:FCFS (FIFO) / priority queuing / 循环和加权公平排队
网际协议:IPv4/IPv6
IPv4 数据报格式:
- 服务类型 TOS:使不同类型的 IP datagram 能分开,提供特定等级的服务
- 标识符、标志、分片偏移:和 IP 分片有关,IPv6 不允许在路由器上分片
- 协议:datagram 到达目的地后,数据部分应该交给哪个特定的运输层协议
分片
一个链路层帧能承载的最大数据量 Maximum Transmission Unit (MTU) 限制了 IP datagram 的长度,但路径上每段链路可能有不同的链路层协议和不同 MTU
solution:将 datagram 分成片 fragment,用单独的链路层帧封装后发送,到达目的地运输层前再在主机中重组
- 同一个 datagram 的每个片有相同的标识号
- 最后一片的标志 bit=0,其他片的标志 bit=1
- 偏移字段指定该片应该放在 datagram 的哪个位置
IPv4 地址
一台主机只有一条链路连接到网络,路由器有多条链路,主机/路由器和链路之间有接口 interface
一个 IP 地址实际上和一个接口相关联,而不是和该接口的主机/路由器相关联。
IP 地址是 32 bit 的二进制数字,分为四个 8 bit 部分,由十进制书写
每个接口都有唯一的 IP 地址,由其连接的子网决定
IP 地址分为网络号 net-id 和主机号 host-id 部分,位于同一个物理网络、网络号相同的设备接口的网络形成一个子网 subnet
e.g. 所有形如 223.1.1. xxx 的 IP 地址接口形成一个子网,其地址为 223.1.1.0/24
其中 /24 称为子网掩码 network mask,指示 32bit 中最左侧 24bit 定义了子网地址,右侧 32-24=8bit 定义子网内部有 2^8 个地址。
子网掩码写成 32 位地址:
这样,要想找到某个 IP 地址的子网,要将其和路由表中所有的掩码做按位与运算,如果结果等于掩码对应的子网地址(网络号),它就属于这个子网。
子网是如何寻址的?
无类地址划分 Classless Inter-Domain Routing:形如 a.b.c.d/x 的 IP 地址的 x 最高比特构成其网络号,也称作该地址的(网络)前缀 prefix
一个组织通常会被分配前缀相同的地址,组织外部的路由器转发表仅考虑其前缀,内部路由器才会考虑剩余的 32-x bit
分类编址 classful addressing:网络号被限制为 8/16/24 bit,称为 A/B/C 类网络
另外,注意一些特殊的 IP 地址:
一台设备(如主机)是如何获取一个 IP 地址的?
- 子网从 ISP 获取一组地址
- 获取主机地址
- 静态:申请固定 IP 地址,手动配置
- 动态:动态主机配置协议 Dynamic Host Configuration (DHCP)
- 主机每次和网络连接时,自动分配到一个 IP 地址
- 主机还可以得到其他信息,如子网掩码、第一跳路由器地址(默认网关)、本地 DNS server 地址
DHCP 是一个 client-server 协议,client 即主机
给 client 分配地址的 4 个步骤:
- DHCP discover:主机从标识本机地址向限制广播地址发送,即在本子网广播
- DHCP offer:(可能是多个)DHCP server 广播响应,提供推荐的 IP 地址、子网掩码和 IP 地址有效时间
- DHCP request:client 从多个 server 中选择一个,响应,回显配置参数
- DHCP ACK
网络地址转换
网络地址转换 Network Address Translation (NAT):私有 IP 地址和公网 IP 地址的交互
NAT 路由器类似具有单一 IP 地址的单一设备,使路由器对外界隐藏了家庭网络的细节,所有离开和进入家庭网络的 message 都有同一个源/目的 IP 地址。
在内部借助端口号寻址:每次 NAT 路由器从内部主机向外转发时,都给它分配一个新的源端口号,将它的 IP 地址和转换前后的端口号填入 NAT 转换表的表项里;向内转发时,通过 NAT 转换表确定要转发给哪个内部主机
e.g. 专用地址 10.0.0.1,源端口号 3345,路由器分配新的源端口号 5001,向外转发;向内转发时读到目的端口号 5001,查表得到专用地址和目的端口号 3345。
IPv6 地址
IPv4 的地址空间要用尽了,因此开发了 IPv6
改进:地址容量 32->128;简化 40-bits 基本 header;流标签,可以为一条 flow 中对某些 datagram 赋予优先权,或者对来自某些应用的赋予更高优先权
一个基本 header、多个扩展 header (optional)
IPv6 地址表示为 8 组 16 进制字段,每个字段 0000~FFFF
-> 压缩:地址段中有时会出现连续的几组 0,可以用“::”代替,但一个地址中只能出现一次。 e.g.FF01:0:0:0:0:0:0:101=FF01::101
通用转发和 SDN
传统路由器的转发仅基于 packet 的目的 IP 地址(匹配 + 动作);而通用转发可以匹配 header 的多个字段,动作也不限于转发
流表 flow table:匹配 + 动作转发表,表项包括 header 字段值集合、counter(匹配的 packet 数量)、采取的动作集合
- 转发
- 负载均衡
- 重写 header(NAT)
- 阻挡或丢包(防火墙)