网络层概述
主要任务:实现网络互联,进而实现数据包在各个网络之间的传输
主要问题:
- 网络层向传输层提供怎样的服务(可靠or不可靠)
- 网络层寻址问题
核心功能
- 转发(forwarding):将分组从路由器的输出端口转移到合适的输出端口
- 路由器转发表(确定在本路由器如何转发分组)
- 路由(routing):确定分组从源到目的经过的路径
- 路由算法(协议)(routing algorithms):确定通过网络的端到端路径
- 连接建立(ATM、帧中继、X.25)
- 数据分组传输之前两端主机需要首先建立虚拟/逻辑连接
- 网络设备(如路由器)参与连接的建立
- 数据分组传输之前两端主机需要首先建立虚拟/逻辑连接
服务模型
- 无连接服务(connecting-less service)
- 不事先为系列分组的传输确定传输路径
- 每个分组独立确定传输路径
- 不同分组可能传输路径不同
- 数据报网络(datagram network)
- 连接服务
- 首先为系列分组的传输确定从源到目的经过的路径
- 然后沿该路径(连接)传输系列分组
- 系列分组传输路径相同
- 传输结束后拆除连接
- 虚电路网络(virtual-circuit network)
虚电路网络
虚电路
虚电路:一条从源主机到目的主机。类似于电路的路径(逻辑连接)
- 分组交换
- 每个分组的传输利用链路的全部带宽
- 源到目的路径经过的网络层设备共同完成虚电路功能
数据报网络
- 网络层无连接
- 每个分组携带目的地址
- 路由器根据分组的目的地址转发分组
- 基于路由协议/算法构建转发表
- 检索转发表
- 每个分组独立选路
转发表
最长前缀匹配优先
IPv4协议
Internet网络层
IP数据报
- 版本号:IP协议的版本号
- 首部长度:IP分组首部长度
- 服务类型(TOS):指示期望获得哪种类型的服务
- 1998年改名为区分服务
- 只有网络提供区分服务(DiffServ)时使用
- 一般情况下不使用,通常IP分组的该字段的值为00H
- 总长度:IP分组的总字节数(首部+数据)
- 最大IP分组的总长度:65535B
- 最小的IP分组首部:20B
- IP分组可以封装的最大数据:65535 - 20 = 65515B
- 生存时间(TTL):IP分组在网络中可以通过的路由器数(或跳步数)
- 路由器转发一次分组,TTL减一
- 如果TTL = 0,路由器则丢弃该IP分组
- 协议:指示IP分组封装的是哪个协议的数据包
- 实现复用/分解
- 6——TCP
- 17——UDP
- 首部校验和:实现对IP分组首部的差错检验
- 计算校验和时,该字段置全0
- 采用反码算数运算求和,和的反码作为首部校验和字段
- 源IP地址、目的IP地址:分别标识发送分组的源主机/路由器(网络接口)和接收分组的目的主机/路由器(网络接口)的IP地址
- 选项字段:携带安全、源选路径、时间戳和路有记录等内容(很少使用)
- 填充:补齐首部(32位)
IP数据分片
最大传输单元(MTU):网络链路层存在MTU——链路层数据帧可封装数据的上限
IP分片与重组
大IP分组向较小MTU链路转发时,可以被“分片”
- 一个IP分组分为多片IP分组
- IP分片到达目的主机后进行“重组”
IP首部的相关字段用于标识分片以及确定分片的相对顺序
- 总长度、标识、标志位和片偏移
标识:标识一个IP分组
- IP协议利用一个计数器,每产生IP分组计数器加1,作为该IP分组的标识
标志位:
保留 DF(Don’t Fragment) MF(More Fragment) DF = 1:禁止分片;
DF = 0:允许分片MF = 1:非最后一片;
MF = 0:最后一片(或未分片)片偏移:一个IP分组分片封装原IP分组数据的相对偏移量
- 片偏移字段以8字节为单位
IP编址
接口
interface:主机/路由器与物理链路的连接
- 实现网络层功能
- 路由器通常有多个接口
- 主机通常只有一个或两个接口(如:有线的以太网接口,无线的802.11接口)
IP地址
32比特(IPv4):编号标识主机、路由器的接口
- IP地址与每个接口关联
- 网络号(NetID)——高位比特
- 主机号(HostID)——低位比特
有类IP地址
IP子网
- IP地址具有相同网络号的设备接口
- 不跨越路由器(第三及以上层网络设备)可以彼此物理联通的接口
子网划分
- 网络号(NetID)——高位比特
- 子网号(SubID)——原网络主机号部分比特
- 主机号(HostID)——低位比特
子网掩码
- 形如IP地址
- 32位
- 点分十进制形式
- 取值
- NetID、SubID位全取1
- HostID全取0
- 例如
- A网的默认子网掩码为:255.0.0.0
- B网的默认子网掩码为:255.255.0.0
- C网的默认子网掩码为:255.255.255.0
- 借用3比特划分子网的B网的子网掩码为:255.255.224.0
子网地址+子网掩码->准确确定子网大小
应用
将IP分组的目的IP地址与子网掩码按位与运算,提取子网地址
CIDR
无类域间路由(Classless InterDomain Routing)
- 消除传统的A、B、C类地址界限
- NetID+SubID→Network Prefix 可以任意长度
- 融合子网地址与子网掩码,方便子网划分
- 无类地址格式:a.b.c.d/x ,其中x为前缀长度
- 提高IPv4地址空间分配效率
- 提高路由效率
- 将多个子网聚合为一个较大的子网
- 构造超网(supernetting)
- 路由聚合(route aggregation)
DHCP协议
获取IP地址
- 静态配置
- DHCP
DHCP(Dynamic Host Configuration Protocol)动态主机配置协议
- 从服务器动态获取:
- IP地址
- 子网掩码
- 默认网关地址
- DNS服务器名称与IP地址
- “即插即用”
- 允许地址重用
- 支持在用地址续租
- 支持移动用户加入网络
工作过程
NAT
NAT(Network Address Translate)网络地址转换
- 只需从ISP申请一个IP地址
- IPv4地址耗尽
- 本地网络设备IP地址的变更,无需通告外界网络
- 变更ISP时,无需修改内部网络设备IP地址
- 内部网络设备对外界网络不可见,即不可直接寻址(安全)
实现:
- 替换
- 利用(NAT IP地址,新端口号)替换每个外出IP数据报的(源IP地址,源端口号)
- 记录
- 将每对(NAT IP地址,新端口号)与(源IP地址,源端口号)的替换信息存储到NAT转换表中
- 替换
- 根据NAT转换表,利用(源IP地址,源端口号)替换每进入内网IP数据报的(目的IP地址,目的端口号),即(NAT IP地址,新端口号)
关于NAT穿透的技术
ICMP协议
ICMP(Internet Control Message Protocol)互联网控制报文协议
支持主机或路由器:
- 差错(或异常)报告
- 网络探询
两类ICMP报文
- 差错报告报文:
- 目的不可达
- 源抑制(Source Quench)
- 超时/超期
- 参数问题
- 重定向
- 网络探询报文
- 回声(Echo)请求与应答报文(Reply)
- 时间戳请求与应答报文
ICMP报文:类型+编码(查表)
报文格式
差错报告报文
IPv6协议
最初动机:IPv4地址空间已经分配殆尽
其他动机:
- 快速处理/转发数据报
- 支持QoS
IPv6数据报格式:
- 固定长度的40字节基本首部
- 不允许分片
对比IPv4
- 校验和:彻底移除,以减少每跳处理时间
- 选项:允许,但是从基本首部移出,定义多个选项首部,通过“下一个字段首部”字段指示
- ICMPv6:新版ICMP
- 附加报文类型
- 多播组管理功能
……