第四章
网络层概述
两种功能
- 转发。当一个分组到达某路由器的一条输入链路时,该路由器必须将该分组移动到适当的输出链路。这个是数据平面的唯一功能。当然也可能被现有的路由器阻挡或者可能是冗余的并经过多条出链路发送。
- 路由选择。当分组从发送方流向接收方时,网络层决定这些分组采用的路由or路径。这是在控制平面中实现。
转发这个路由器本地动作时间尺度很短,常用硬件实现。路由选择是确定分组从源到目的地的端到端路径的网络范围处理过程,时间尺度长(几秒),软件实现。转发就是走一个立交桥,路由选择就是规划路径。
控制平面的方法
传统方法:
路由选择算法决定了插入该路由转发表的内容。路由选择算法运行在每台路由器上。
SDN(软件定义网络)方法:
这是路由选择厂商的传统方法。远程控制器计算和分发转发表供使用。
网络服务模型
因特网的网络层只提供尽力而为服务……
路由器工作原理
路由器结构
如图。在输入端口还要执行查找功能,决定输出端口。
输入端口、输出端口、交换结构几乎总是用硬件实现。交换可以用内存/总线/互联网络之类的。
输入端口
输入端口,线路端接(物理层)、数据链路处理(链路层)、查找转发排队。
转发表
转发表通常用最长前缀匹配规则。
输出端口
排队
输入排队:交换结构不能快得让所有到达分组无时延地通过它传送。有时候一个分组的输出端口没有竞争,但是统一输入端口前面的分组应为竞争而等待导致它也要等待,这叫线路前部HOL阻塞。
当然也有输出排队。
现在研究出缓存需要的数据量是$\dfrac{\mathrm{RTT}\times C}{\sqrt N}$。$N$是tcp连接数量。
分组调度
先进先出:FCFS(也称FIFO)
优先权排队:分几个优先权类,先执行高优先权的,同权就fifo。
循环和加权公平排队:分组被分类,每个类轮着来,但是不允许链路空闲(保持工作排队)。
网际协议:IPv4、寻址、IPv6及其他
ipv4数据报
- 版本号
- 首部长度
- 服务类型
- 数据报长度(总长度)。理论最大长度65535,但很少超过1500
- 标识、标志、片偏移(和ip分片有关)
- 寿命TTL。TTL减为0时数据报必须丢弃。
- 协议。通常到达目的地才有用,6是tcp,17是udp。
- 首部检验和。只对首部计算检验和。每台路由器都要重新计算并写入检验和。
- 源和目的ip地址
- 选项(如果有)
- 数据(有效载荷)
一个ip数据报首部20字节(如果没有选项),加上20字节tcp首部,则每个(没有分片的)数据报共有40字节首部。
数据报分片
由于最大传输单元MTU,数据报可能会被分片。但是数据报的重新组装在端系统中。发送方生成一个数据报,就贴上一个标识号,标识号每次+1。具有相同标识的多个分片,最后一个片的标志bit为0,其他的为1。为了让端系统按正确位置组装,偏移字段指定该片该房在初始ip数据报的哪个位置。
ipv4编址
主机和物理链路之间的边界叫接口。一个ip地址和一个接口相关联。
如图,左边三个主机接口和一个路由器接口的网络形成一个子网,为223.1.1.0/24
,24是子网掩码。就是最左边24bit定义了子网地址。
因特网的地址分配策略是无类别域间路由选择CIDR。
一个组织通常有一块连续的地址。
剩下的$32-x$比特可以认为是区分内部设备的。
广播地址255.255.255.255
,目的地是它时,报文会交付给同一个网络中的所有主机。
路由聚合
单个网络前缀可以通告多个网络,这就是地址聚合/路由聚合/路由摘要。
如果有人想路由选择到200.23.18.0/23
里的某个地址,那使用最长前缀匹配,会朝着ISPs-R-Us前进。
动态主机配置协议
dhcp是个即插即用/零配置协议。子网中要有一台dhcp服务器(或者dhcp中继代理,通常是一台路由器)
- dhcp服务器发现。客户广播一条dhcp发现报文,向端口67。
- dhcp服务器提供。dhcp服务器广播一个dhcp提供报文。
- dhcp请求。客户从一个或多个服务器提供中选一个,并以dhcp请求报文响应那个服务器。
- dhcp ack。服务器用dhcp ack报文证实要求的参数。
网络地址转换
nat路由器对外界的行为就如同一个具有单一ip地址的单一设备。用一个nat转换表。
IPv6
地址容量扩大了。还引入了任播地址,将数据报交付给一组主机中的任意一个。
首部长度固定40字节。
流量类型类似于ipv4中的服务类型。
下一个首部:数据字段交付给哪个协议(tcp、udp)
跳限制:转发数据报的每台路由器对该字段的内容减一。到0丢弃。
ipv6没有分片/重新组装,没有首部检验和,没有首部了。
一种从ipv4到ipv6的过渡方法是建隧道,不支持ipv6的地方把ipv6数据报套在ipv4里头。
通用转发和SDN
匹配加动作转发表在openflow中称为流表,包括首部字段值的集合,计数器集合,动作集合。
可以实现简单转发,负载均衡,充当防火墙等功能,具体看书吧。