计网-网络层-数据平面
4.1 网络层概述
目标:实现主机与主机之间的通信
地位
- 为运输层提供支持
- 由路由器实现
网络层的主要功能
- 选路、设置转发表(控制层面)
- 根据转发表和分组头部信息,转发分组(数据层面)
- 对于面向连接的网络层服务,提供连接建立的功能(IP不属于这一类)
- 分组交换机的分类
- 根据链路层首部信息转发:链路层节点交换机(MAC地址,局部网络)
- 根据网络层首部信息进行转发:路由器
网络层可能提供的服务
- 确保交付
- 具有时延上界的确保交付
- 有序分组交付
- 确保最小带宽
- 确保最大实验抖动
- 安全传输
- ATM Asynchronous Transfer Mode 异步传输模式
4.2 路由器工作原理
路由器的功能
运行路由算法/协议
转发
4.2.1 输入端口和基于目的地转发
输入端口
位流级的接收:将电信号转化为二进制字节流
帧 链路层中的数据计量单位? 帧头-数据报-帧尾
拆封之后,能从帧中获取数据报的相关信息
转发
- 基于目标的转发(只受到目的IP影响)
- 通用转发(受首部影响)
基于目标的转发
前缀匹配:将一定范围的目的IP分配到同一个链路接口
最长前缀匹配规则:在前缀匹配表中寻找最长的匹配项
输入端口排队
线头阻塞
输入端口把多个数据发送到了同一个输入端口,那么单个时间内只能传一个报文
输入缓冲区溢出
4.2.2 交换
三种方式:
memoryI(内存)
bus(总线)
crossbar(互联网络)
经内存交换
- 在CPU的控制下进行
- 受限于内存的带宽
- 一次转发一个分组
经总线交换
- 问题:受限于总线的带宽
- 一次一个分组
经内联网络
- 克服总线带宽限制
- 链路不冲突的话支持并发
4.2.3 输出端口处理
缓存管理:交换结构交付速率高于输出链路速率时
调度原则:输出端口有权选择报文的发送顺序
最后输出的是电信号
输出端口缓冲区溢出还是会导致分组的排队和丢失
如何设置缓冲区?
4.2.4 何时出现排队
4.2.5 分组调度
1、先进先出(FCFS/FIFO)
丢弃策略
- 尾部丢弃:丢弃到达的数据包
- 优先级丢弃
- 随机丢弃
2、优先权排队
优先发送高优先级的队列中的元素、
维护多个不同优先级的队列
3、循环和加权公平排队
RR(Round Robin)
多个类
循环扫描不同类的队列,轮流给每个类发送数据包
WFQ(Weighed Fair Queuing)
每个类在一个周期中获取一定量的服务
分组丢弃策略
- 被动队列管理
- 弃尾策略
- 删除一个或多个已排队分组
- 主动队列管理:随机早期检测RED
4.3 网际协议
4.3.1 IPv4数据包格式
#TBS 书本P217
固定部分大小为20字节
标志位
0 DF MF
DF(Dont fragment):标记当前数据报要(0)不要(1)分片
MF:标记当前数据包是(0)不是(1)最后一个数据报
IP分片和重组
分片原因:网络链路具有MTU,而且不同链路的MTU还不同
分片在传输过程中,重组只发生在目的主机
注意标志位对分片的描述
有了这些标志位,数据报可以乱序到达
4.3.2 IPv4编址
IP对应的是接口,而不能完全代表主机本身
路由器、主机都可以有多个接口,因此,一个主机可以有多个接口
IP地址只与接口有关,关于接口之间的连接关系,在6、7章会提及
IP地址的结构
网络号+主机号
子网:
设备接口有相同的网络号,能够直接互相访问
IP分类
(减2是因为全0和全1要保留)
A类:0xxxxxxx
网络号$2^7 - 2 = 126$
主机号$2^{24}-2$
B类:10xxxxxx
网络号$2^{14}$
C类:110xxxxx
D类:1110+组播地址
E类11110+保留地址
子网的划分
当某个机构获取了一个IP地址块之后,其可以从主机号中借用一部分作为地址号
子网掩码
对外隐藏子网的存在,对内知识网络号和子网号的位置
获得方法:通过在网络号和子网号相应的位置全置为1,主机号相应的位置全置为0
默认子网掩码
网络地址和广播地址
子网网络地址:主机号(host-id)所有比特都为0
子网广播地址:主机号(host-id)所有比特都为1
$$网络地址 = (IP地址) AND (子网掩码)$$
$$广播地址 = (IP地址)OR(子网掩码的反码)$$
引入子网掩码之后的寻址
1、检查分组目的IP地址中的网络号,如果网络号不是本网络,就从路由表中找到相应的转发节点将其转发出去
2、检查子网号
路由器转发分组的算法
IP 地址的扩展-构建超网
从网络号中借用一部分作为主机号
CIDR
网络前缀+主机号
转发的时候遵循最长前缀匹配
层次编址-路由聚合
同一个组织对因特网展现一个特定的IP范围,所有在这个IP范围内的流量发送给这个组织,由组织负责进一步分发
ICANN
- 分配IP地址
- 管理DNS
- 分配域名、解决域名纠纷
IP地址的获取
手动分配
DHCP(动态主机配置协议)
- 应用层服务,负责IP地址的动态获取
- 使用UDP协议进行工作
- 端口:
67:DHCP Server
68: DHCP Client
546: DHCPv6 Client
- 流程
- 主机广播DHCP发现报文
- DHCP服务器使用DHCP提供报文来应答(应该使用广播)(内含分配的IP地址)
- 主机使用DHCP请求报文请求IP地址(回复服务器接受这个IP地址)
- DHCP服务器使用DHCP ACK应答(正式分配到IP地址)
4.3.3网络地址转换
NAT(Network Address Translation)
出口流量用不同的源端口号对应不同主机
实现:
- 发送数据报:
- 源IP、端口号替换为NAT IP以及新的端口号
- 发送
- 接受数据报
- 根据NAT转换表将端口号和目的IP转换回来并转发
两类地址
本地地址
- 10/8
- 172.16/12
- 192.168/16
全球地址
三种地址转换方式
- 静态NAT:一个本地地址对应一个全球地址
- 动态NAT:一个全球地址对应多个本地地址
- 端口NAT:一个本地地址的端口对应一个全球地址的端口
NAT转换中存在的问题
客户端如果希望与内网特定主机通信该怎么办?
- 使用端口NAT,在路由器中静态配置通信端口与目的主机的映射
- 通用即插即用UPnP
- Internet Gateway DeviceIGD协议
- 内部主机通过IGB协议
- 了解公共IP地址
- 向路由器注册/移除映射记录
(内部IP地址,内部端口号)→(公共IP地址 ,公共端口号)
- 内部主机通过某种渠道向外部应用程序公开
(公共IP地址,公共端口号)
- 中继(用于skype)
ICMP 因特网控制报文协议
- 用于主机、路由器、网关之间交换网络层信息
- 位于IP层之上(封装在IP报文中)
4.3.4 IPv6
去除了校验和
扩大了地址空间
首部40字节
……
IPv4到IPv6的迁移
- 设立标志日,统一迁移
- 双栈技术
- 基于协议的转换
- 同时支持IPv6和IPv4,能够用IPv6的传输段就用IPv6传,不支持的就转换成IPv4,直到再次遇到能用IPv6的又转换回来
- 隧道技术
- 基于数据的封装和提取
- 将IPv6的报文当作数据,封装成IPv4的格式,在IPv4的网络中传输,传输到某个节点后将IPv6提取出来
4.4 (泛化转发和SDN)
#TBS