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 输出端口处理


缓存管理:交换结构交付速率高于输出链路速率时
调度原则:输出端口有权选择报文的发送顺序
最后输出的是电信号

输出端口缓冲区溢出还是会导致分组的排队和丢失

如何设置缓冲区?

其中的R是交换结构的输入速率

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