【计算机网络:自顶向下方法】(四)网络层 : 数据平面 (IPV4 | IPV6 | 路由算法 )

【计算机网络:自顶向下方法 第7版 | 中科大 】
在这里插入图片描述

第4章 网络层 : 数据平面

4.1 导论

网络层服务
在这里插入图片描述
网络层功能

  • 转发: 将分组从路由器 的输入接口转发到合适 的输出接口 (局部)
  • 路由: 使用路由算法来 决定分组从发送主机到 目标接收主机的路径 (全局 )
    • 路由选择算法
    • 路由选择协议

数据平面

  •  本地,每个路由器功能
  •  决定从路由器输入端口 到达的分组如何转发到输出端口
  •  转发功能:
    • 传统方式:基于目标 地址+转发表
    • SDN方式:基于多个 字段 + 流

控制平面

  • 网络范围内的逻辑
  • 决定数据报如何在路由器之间 路由,决定数据报从源到目标 主机之间的端到端路径
  • 2个控制平面方法:
    • 传统的路由算法: 在路由器 中被实现
    • software-defined networking (SDN): 在远程的服务器中 实现

传统方式:路由和转发的相互作用 Vs SDN方式:逻辑集中的控制平面

  • 传统方式
    在这里插入图片描述
  • SDN 方式
    在这里插入图片描述

网络服务模型

  • 在某些网络架构中是第三个重要的功能 ATM, frame relay, X.25
  • 在分组传输之前,在两个主机之间,在通过一些 路由器所构成的路径上建立一个网络层连接 涉及到路由器
  • 网络层和传输层连接服务区别:
    • 网络层: 在2个主机之间,涉及到路径上的一些路由器
    • 传输层: 在2个进程之间,很可能只体现在端系统上 (TCP连接)
      在这里插入图片描述
      Q: 从发送方主机到接收方主机传输数据报的“通道” ,网络提供什么样的服务模型?
  • 对于单个数据报的服务: 可靠传送 延迟保证,如:少于 40ms的延迟
  • 对于数据报流的服务: 保序数据报传送 保证流的最小带宽 分组之间的延迟差

4.2 路由器组成

概况

在这里插入图片描述

  • 路由:运行路由选择算法/协议 (RIP, OSPF, BGP)-生成 路由表
  • 转发:从输入到输出链路交换数据报-根据路由表进行分组 的转发

输入端口功能

在这里插入图片描述

  • 基于目标的转发: 如果地址范围如果没有划分的特别规整,会发生什么?
  • **最长前缀匹配 longest prefix matching Destination Address Range** : 当给定目标地址查找转发表时,采用最长地址前 缀匹配的目标地址表项 . (IP地址部分详解 )

输入端口缓存

在这里插入图片描述

交换结构

  • 将分组从输入缓冲区传输到合适的输出端口
  • 交换速率:分组可以按照该速率从输入传输到输 出
    • 运行速度经常是输入/输出链路速率的若干倍
    • N 个输入端口:交换机构的交换速度是输入线路速度的N倍比较理想,才不会成为瓶颈
       3种典型的交换机构
      在这里插入图片描述

第一代路由器

  • 在CPU直接控制下的交换,采用传统的计算机
  • 分组被拷贝到系统内存,CPU从分组的头部提取出目标 地址,查找转发表,找到对应的输出端口,拷贝到输出 端口
  • 转发速率被内存的带宽限制 (数据报通过BUS两遍)
  • 一次只能转发一个分组
    在这里插入图片描述

通过总线交换

在这里插入图片描述

  • 数据报通过共享总线,从输入端 口转发到输出端口
  • 总线竞争: 交换速度受限于总线 带宽
  • 1 次处理一个分组
  • 1 Gbps bus , Cisco 1900; 32 Gbps bus, Cisco 5600;对于接 入或企业级路由器,速度足够( 但不适合区域或骨干网络)

通过互联网络(crossbar等)的交换

在这里插入图片描述
 同时并发转发多个分组,克服总线带宽限制
 Banyan(榕树)网络,crossbar(纵横) 和其它的互联网络被开发,将多个处理 器连接成多处理器
 当分组从端口A到达,转给端口Y;控 制器短接相应的两个总线
 高级设计:将数据报分片为固定长度的 信元,通过交换网络交换

输出端口

在这里插入图片描述
在这里插入图片描述
 假设交换速率Rswitch是Rline的N倍(N:输入端口的数量)
 当多个输入端口同时向输出端口发送时,缓冲该分组(当通 过交换网络到达的速率超过输出速率则缓存)
排队带来延迟,由于输出端口缓存溢出则丢弃数据报!

调度机制

在这里插入图片描述

  • 调度: 选择下一个要通过链路传输的分组

FIFO (first in first out) scheduling: 按照 分组到来的次序发送

  •  丢弃策略: (队列满的时候 )
    • tail drop: 丢弃刚到达的分组
    • priority: 根据优先权丢失/移除分组
    • random: 随机地丢弃/移除

调度策略:优先权

  • 优先权调度:发送最高优先 权的分组。
  • 多类,不同类别有不同的 优先权。
    • 类别可能依赖于标记或者其他的头部字段, e.g. IP source/dest, port numbers, ds,etc.
    • 先传高优先级的队列中的分 组,除非没有
    • 高(低)优先权中的分组传 输次序:FIFO

调度策略:其他的

Round Robin (RR) scheduling:

  • 多类
  • 循环扫描不同类型的队列, 发送完一类的一个分组 ,再发送下一个类的一个分组,循环所有类
  • Weighted Fair Queuing (WFQ) : 每个类在每一个循环中获得不同权重的服务量
    在这里插入图片描述

4.3 IP :Internet Protocol

IP:Internet Protocol

IPv4数据报结构

img

  • 版本(Version, 4bit
    对于IPv4,字段的值是4。

  • 首部长度(Header Length, IHL, 4bit
    首部长度说明首部有多少32位字(4字节)。一般为5,相当于5*4=20字节。

  • 服务类别(Type Of Service,8bit

  • 报文长度(Length, 16bit
    IP首部+数据部分的总长度

  • 标识(Identification, 16bit
    用于在IP层对数据报进行分片的时候,标识数据包。

  • 标志 (Flags, 3bit )

    这个3位字段用于控制和识别分片,它们是:

    • 位0:保留,必须为0;
    • 位1:禁止分片(Don’t Fragment,DF),当DF=0时才允许分片;
    • 位2:更多分片(More Fragment,MF),MF=1代表后面还有分片,MF=0 代表已经是最后一个分片。
      如果DF标志被设置为1,但路由要求必须分片报文,此报文会被丢弃。这个标志可被用于发往没有能力组装分片的主机。
      当一个报文被分片,除了最后一片外的所有分片都设置MF为1。最后一个片段具有非零片段偏移字段,将其与未分片数据包区分开,未分片的偏移字段为0。
  • 分片偏移 (Fragment Offset, 13bit
    这个13位字段指明了每个分片相对于原始报文开头的偏移量,以8字节作单位。

  • 存活时间(Time To Live,TTL, 8bit
    本数据报的TTL.

  • 协议 (Protocol, 8bit
    1—-icmp, 2—-igmp, 6—-tcp, 17—-udp, 89—-ospf

  • 首部检验和 (Header Checksum, 16bit
    IP首部的校验和

  • 源IP地址(Source IP, 32bit

  • 目的IP地址(Destination IP, 32bit

IPv4数据报分片

  • 网络链路有MTU(最大传送单元)— 最大可传输的链路的帧
    • 不同的链路类型有不同的MTU
  • 如果IP数据报 > MTU ,则分片,到目的地后再重组
  • IP头部字段用来标记

img

IP数据报分片示例

img

  • 本来要发送 4000 byte 的数据报(head部分 + data部分)

  • 链路的 MTU = 1500 bytes

  • 需要将数据分为3片来发送

  • length:片长度,包括了 20 bytes IP首部部分,最大为MTU

    • length为1500的数据报,实际包含 1500−20=1480 bytes1500−20=1480 ����� 的data部分
    • 最后一片的length为 (4000−20)−1480×2+20=1040(4000−20)−1480×2+20=1040
  • fragflag
    

    :3 bits

    • 第二个bit为 DF(Don’t Flag):为0则该数据报分片,为1则不分片
    • 第三个bit为 MF:为0则后面没有片了,为1则后面还有片
    • 前两片为 1(001),表示该IP数据报分片,且后面还有片
    • 最后一片为 0(000),表示该IP数据报分片,后面没片(即最后一片)
  • offset
    

    :data部分偏移量,以 8 bytes 为单位,只计算data部分

    • 第一片的offset为 0
    • 第二片的offset为 1480 bytes/8 bytes=1851480 �����/8 �����=185

IPv4编址

概述

  • IP地址:32位、主机和路由器接口的ID

  • 接口

    (interface):主机/路由器 和 物理链接 之间的连接

    • 路由器一般有多个接口
    • 主机一般有1到2个接口
  • 每个接口都有一个对应的IP地址

img

接口连接方式

  • 通过路由器连接
  • 有线以太网通过以太网交换机连接
  • 无线网络通过WiFi基站连接

子网(Subnet)

IP地址

  • 网络部分 —— 高位
  • 主机部分 —— 低位

子网

  • 子网部分相同
  • 可以不通过路由器到达彼此

把路由器去掉,剩下的每个区域都是一个子网。

img

上图中有6个子网。

分类编制(Classful Addressing)

  • A类
    • 网络部分前1位 —— 0
    • 网络部分 8 bits,主机部分 24 bits
    • IP地址范围:1.0.0.0127.255.255.255
  • B类
    • 网络部分前2位 —— 10
    • 网络部分 16 bits,主机部分 16 bits
    • IP地址范围:128.0.0.0191.255.255.255
  • C类
    • 网络部分前3位 —— 110
    • 网络部分 24 bits,主机部分 8 bits
    • IP地址范围:192.0.0.0223.255.255.255
  • D类
    • 前4位 —— 1110
    • 用于多播地址
  • E类
    • 前4位 —— 1111
    • 被留作将来使用

img

子网掩码(subnet mask)

  • IP地址采用点分十进制:例如 192.32.216.9
  • 分类编制导致了地址资源的浪费
  • 子网和子网掩码:可以减小地址资源的浪费

img

200.23.16.64/27中的27网络部分+子网部分 的位数

  • 子网掩码
    • 网络部分+子网部分 置1
    • 主机部分 置0
  • 子网的网络ID
    • 网络部分+子网部分 不变
    • 主机部分 置0

CIDR:无类的域间路由(Classless InterDomain Routing)

  • IP分为两个部分 —— 子网部分 + 主机部分
  • 子网部分可以是任意长度
  • 地址格式:a.b.c.d / x,其中x是子网部分位数
  • 网络部分称为前缀(prefix)

如何获取IP地址

主机如何获取IP地址

主机获取IP地址:

  • 硬编码:自己设置静态的IP设置
  • DHCP:动态主机配置(Dynamic Host Configuration Protocol)
      当主机连接网络时,允许主机从网络服务器动态获取IP地址。
DHCP
  • 即插即用
  • 可以更新IP
  • 地址重用:主机的IP只有在上线时才固定,下线即释放
  • 支持移动用户

当一台主机加入网络时,从子网中的DHCP服务器获取IP地址。

img

网络如何获取IP地址

从ISP处获取分配的IP地址。

img

img

ISP如何获取IP地址

ISP从ICANN组织获取IP地址

ICANN:Internet Corporation for Assigned Names and Numbers

  • 分配地址
  • 管理DNS
  • 分配域名、解决争议

NAT:网络地址转换(Network Address Translation)

  • 从这个本地网络出去的报文都有着:相同的源IP+不同的端口号
  • 对于外界网络来说,这个本地网络都是一个IP
    • 本地网络有内部地址,改变该内部地址不需要通知外部网络
    • 改变ISP不需要改变本地网络的内部地址
    • 内部地址在外部不可见(保障安全性)
  • 实现方式
    • 发送出去的报文:(源IP(内部的IP),端口号)—> (NAT IP(NAT统一的IP),新端口号)
      • 外部发来的报文的目的地址填写:(NAT IP(NAT统一的IP),新端口号)
    • NAT转换表:记住(源IP(内部的IP),端口号)<—> (NAT IP(NAT统一的IP),新端口号)的转换对
    • 收到的报文:根据NAT转换表,(NAT IP(NAT统一的IP),新端口号)—> (源IP(内部的IP),端口号)

img

  • 外部不知道内部的情况,所以外部不能发起通信
  • 预留给内部的IP地址:
    • 10.0.0.0~10.255.255.255(A类)
    • 176.16.0.0~172.31.255.255(B类)
    • 192.168.0.0~192.168.255.255(C类)
  • 可以有16bit的主机地址位(10.0.0.0~10.255.255.255),一个NAT支持内部60000+的连接
  • NAT存在争议
    • 路由器本来是在第3层,但NAT修改了端口号,而端口号包含在TCP/UDP的段结构里,即改了第4层的内容
    • 违反了端到端
    • 所以用IPv6来解决地址短缺

ICMP:因特网控制消息协议(Internet Control Message Protocol)

ICMP
  • 主机、路由器、网关来交流网络层信息
    • 报错:到达不了主机、网络、端口、协议等等
    • 用于探测:echo request/reply(使用ping)
  • IP的一部分,但体系结构在IP之上:ICMP消息搭载在IP数据报上
  • ICMP消息:type,code,引发错误的IP数据报首部和前8个字节
Type Code description 描述
0 0 echo reply (ping) echo响应 (被程序ping使用)
3 0 dest. network unreachable 目标网络不可达
3 1 dest host unreachable 目标主机不可达
3 2 dest protocol unreachable 目标协议不可达
3 3 dest port unreachable 目标端口不可达
3 6 dest network unknown 未知的目标网络
3 7 dest host unknown 未知的目标主机
4 0 source quench (congestion control - not used) 源端关闭(拥塞控制)
8 0 echo request (ping) Echo请求
9 0 route advertisement 路由通告
10 0 router discovery 路由器的发现/选择/请求
11 0 TTL expired TTL 超时
12 0 bad IP header IP 报首部参数错误
  • ICMP是管控制的IP的“兄弟”
  • ICMP被IP使用,同时作为网络层协议使用IP
  • ping、traceroute、path MTU discovery 都使用到了ICMP
    • ping:使用 ICMP Echo request/repley msgs
    • path MTU discovery
      • 发送一个大的IP数据报,该数据报的 don’t fragment 置 1(即不分片)
      • 减小数据报大小,直至成功(成功标志:没有接收到返回的ICMP消息)
Traceroute

Traceroute程序:跟踪从一台主机到其他主机之间的路由,用ICMP报文实现。

  • 源发送一系列 UDP报文段 到目的
    • 第一个数据报 TTL=1,第二个数据报 TTL=2,以此类推
    • 使用不常见的端口号
  • 当第n个数据报到达第n台主机时
    • 这个第n个数据报TTL刚好过期
    • 路由器丢弃该数据报
    • 路由器发送一个ICMP告警报文(type 11,code 0)给源
    • 该ICMP告警报文包括第n台路由器名字及其IP
  • 当该ICMP报文返回到源主机,源主机计算RTT(往返时延),得到第n台路由器名字及其IP
  • 标准的Traceroute程序用相同的TTL发送3个一组的分组,输出对每个TTL提供3个结果
  • 停止条件步骤
    • UDP数据报到达目的主机
    • 目的主机返回 ICMP端口不可到达报文(type 3,code 3)
    • 源主机接收到该ICMP报文,则停止

在Mac上可在app“系统信息”中的窗口->网络实用工具中使用Ping、Traceroute等工具。

IPv6

  • 动机
    • 初动机:解决32位IP地址空间分配完的问题
    • 更快处理/转发的头部格式
    • 头部支持QoS
  • IPv6数据报格式
    • 固定长度的头部:40 byte (IPv4头部长度不固定)
    • 不允许分片

IPv6数据报结构

img

  • 版本(Version, 4 bit
    对于IPv6,字段的值是6(0110)。

  • 流量类型(Traffic class,8 bit
    用来标识对应IPv6的通信流类别,类似于IPv4中的ToS。

  • 流标签(Flow label,20 bit
    用来标记报文的数据流类型,以便在网络层区分不同的报文。

  • 有效载荷长度(Payload length,16 bit
    给出了IPv6数据报中跟在定长的40 byte数据报头部后面的字节数量。

  • 下一个头部(Next Header,8 bit
    该字段标识数据报中的内容(数据字段)需要交付给哪个协议(如TCP或UDP)。无扩展的头部,Next Header指向TCP/UDP;有扩展的头部,Next Header指向的下一个头部比如路由选择。与IPv4头部 协议(Protocol)字段相同。
    img

  • 跳段数限制(Hop limit,8 bit

    生存时间,相当于IPv4中的TTL。转发数据报的每台路由器讲对该字段内容 -1,如果跳转限制计数到0时,则丢弃该数据报

  • 源IP地址(Source Address,128 bit

  • 目的IP地址(Destination Address,128 bit

  • 数据(Data)

IPv6相较于IPv4的部分改变

  • 去除Checksum:加快了转发速度

  • Options:依旧允许可选项,但是不放在头部,而是放在 Next Header 指出的位置上

  • ICMPv6

    :ICMP的IPv6版本

    • 增加新的 type:比如“Packet Too Big”
    • 包含多播组管理

IPv6地址

  • 三种类型:单播(unicast)、多播(multicast)、任意播(anycast)

  • 冒号划分的十六进制(128 bit)

    eg. 68E6:8C64:FFFF:FFFF:0:1180:960A:FFFF

  • 0的压缩

    用双冒号::表示一组0或多组连续的0,但只能出现一次。

    • FF05:0:0:0:0:0:0:B3 = FF05::B3
    • 0:0:0:0:0:0:128.10.2.1 = ::128.10.2.1(IPv4和IPv6兼容的IP)
    • 12AB:0:0:CD30:0:0:0:0 = 12AB::CD30:0:0:0:0 = 12AB:0:0:CD30::(如果出现两个多个0,随意压一个都行)

单播(Unicast address)

单播的地址格式(一共 128 bit):

  • 全球路由前缀(Global routing prefix,48 bit

    前3位为001,分配给公司和组织。

  • 子网ID(Subnet ID,16 bit

    如果是小公司,只需要1个子网的话,全设为0

  • 接口ID(Interface ID,64 bit

    基于 EUI-64

IPv4到IPv6的迁移

  • 现在的网络既有IPv4,也有IPv6。世界上的所有网从IPv4到IPv6需要很长的转换时间。
  • 两种IPv4到IPv6的迁移
    • 双栈(Dual Stack):一些路由器可以兼容IPv4和IPv6
    • 隧道(Tunneling):当IPv6穿过IPv4的路由器上时,将IPv6作为载荷承载在IPv4上

双栈(Dual Stack)

  • 早期的设计
  • 一些路由器有双栈(IPv4 & IPv6),可以翻译这两种格式

img

隧道(Tunneling)

当IPv6穿过IPv4的路由器上时,将IPv6作为载荷承载在IPv4上。就是像一个连接两个IPv6路由器的IPv4隧道

img

4.4 通用转发和 SDN

传统

在这里插入图片描述

  • 网络层功能: 转发:对于从某个端口 到来的分组转发到合适的 输出端口 路由:决定分组从源端 到目标端的路径 路由算法
  • 类比: 旅行  转发:一个多岔路口的 进入和转出过程  路由:规划从源到目标 的旅行路径
    每个路由器上都有实现路由算法元件(它们之间需要相互交 互)- 形成传统IP实现方式的控制平面
    在这里插入图片描述
  • 路由器的网络层功能:
    • IP转发:对于到来的分组按照路由表决定如何转发,数 据平面
  • 路由:决定路径,计算路由表;处在控制平面

SDN:逻辑上集中的控制平面

  • 一个不同的(通常是远程)控制器和CA交互,控制器决定分组 转发的逻辑(可编程),CA所在设备执行逻辑。
    在这里插入图片描述

SDN的主要思路

  • 网络设备数据平面和控制平面分离
  • 数据平面-分组交换机
    • 将路由器、交换机和目前大多数网络设备的功能进一步抽 象成:按照流表(由控制平面设置的控制逻辑)进行PDU (帧、分组)的动作(包括转发、丢弃、拷贝、泛洪、阻 塞)
    • 统一化设备功能:SDN交换机(分组交换机),执行控制 逻辑
  • 控制平面-控制器+网络应用
    • 分离、集中
    • 计算和下发控制逻辑:流表

优点

水平集成控制平面的开放实现(而非私有实 现),创造出好的产业生态,促进发展
集中式实现控制逻辑,网络管理容易
基于流表的匹配+行动的工作方式允许“可编程的”分组交换机

在这里插入图片描述
通用转发和SDN OpenFlow数据平面抽象 每个路由器包含一个流表(被逻辑上集中的控制器计算和分发)

OpenFlow数据平面抽象

一种网络通信协议,应用于SDN架构中控制器和转发器之间的通信。

  • 流: 由分组(帧)头部字段所定义
  • 通用转发: 简单的分组处理规则
    • 模式: 将分组头部字段和流表进行匹配
    • 行动:对于匹配上的分组,可以是丢弃、转发、修改、 将匹配的分组发送给控制器
    • 优先权Priority: 几个模式匹配了,优先采用哪个,消除歧 义
    • 计数器Counters: #bytes 以及#packets
      路由器中的流表定义了路由器的匹配+行动规则 (流表由控制器计算并下发 )

OpenFlow抽象

  •  match+action: 统一化各种网络设备提供的功能
    在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_49486457/article/details/130345299
今日推荐