4 网络层-数据平面

4 网络层-数据平面

image-20220429111116397

4.1 导论

image-20220429111936600

image-20220429112347623

转发——数据平面,决定从哪个端口入,从哪个端口出,是局部功能

路由——控制平面,决定分组该怎么走,是全局功能

image-20220429112447141

转发和路由分别有传统方式的 SDN 方式,因此共有四种组合

传统方式是数据平面和控制平面强耦合在一起,在一个路由器上一起实现,并且控制平面的路由表是分布式地在不同的路由器各自计算的【因此要修改非常难】

传统方式:控制平面算出路由表,数据平面根据路由表和分组的目标 IP 地址进行转发 不可编程

image-20220429113624038

SDN 根据多个字段而不是仅仅根据 IP 可以有多个动作:转发、block、泛洪、修改字段,因此是可编程的

流表是网络操作系统(一个服务器)算出来,通过南向接口交给分组交换设备,分组交换设备把流表装载上之后就可以根据流表进行多个字段的匹配。因此控制平面是集中式的

这里的路由器叫做分组交换机

image-20220429114444557

网络服务模型network service model)定义了分组在发送与接收端系统之间的端到端运输特性

image-20220429115302243

(可见 IP 网络是尽力而为的,即什么都不保证。尽力而为服务看起来是根本无服务的一种委婉说法)

主机到主机的网络层连接不仅仅体现在端主机之上,而且体现在中间路径上经过的所有交换节点

TCP / IP 网络中 IP 网络层向上层提供的服务(不存在连接建立): 路由表由控制平面产生,交给 IP 协议,根据路由表对到来的分组进行转发,实现数据平面的功能

image-20220429115117104

对有一些网络,要提供连接建立的功能

4.2 路由器组成

image-20220429120911015

任何一个端口都可以既输入又输出混合在一起的,没有独立的输入/输出端口

每个端口有 3 个方框,分别为物理层,链路层,网络层。路由表要交给每个端口的网络层

指的是路由器的物理输入和输出接口,这完全 不同于第2、3章中所讨论的与网络应用程序和套接字相关联的软件端口

输入端口

image-20220430093745617

image-20220430094051788

当出现多个输入端口转到相同输出端口时,需要排队,因此会导致交换速率小于输入速率,所以需要排队

队头阻塞 HOL blocking head of the line blocking :队列的首个packet由于它的目的端口正忙而被延迟转发,导致后面的packets被blocked

交换结构

image-20220430104949033

交换速率应当是 N 倍于输入线路的输入速率( N 为输入端口数量)

通过内存交换

image-20220430105129633

通过 bus 两次

通过总线交换

image-20220430105514365

分组通过 bus 时要加上输出端口的地址,输出端口发现是自己的端口,那么就将其从这个端口输出

通过互联网络交换

image-20220430105713225

同时可以转发多个分组

输出端口

image-20220430110116587

队列中的分组发送顺序不一定是 FIFO 的,可以采用一些调度规则,实现按优先级发送

image-20220430110458097

输入和输出端口都有可能导致分组的丢弃

调度机制

image-20220430110602462

通常默认是 FIFO

image-20220430110730870

image-20220430110923709

image-20220430111048050

4.3 Internet Protocol

所有网络从IP 角度看都是 IP 网络,IP 是 over everything 的,IP 是在各种物理网络上运行的。能够成功的兼容不同的物理网络【不同的链路协议】让不同的链路协议可以组合在一起,在网络层都是 IP 协议,在链路层的不同跳上则是不同类型的链路协议,IP 的提出就是为了让当时不同类型的网络能够相互兼容地运行

image-20220430111344286

IP 协议根据分组头部的 DA 字段匹配路由表,实现数据平面的转发功能

IP 数据报格式

image-20220430111703747

20 B 的头部 + 可能的 option 【由 head len 字段记录头部总长】+ data

  • 版本号:在 IPv4 为 4【4 bit】

  • 首部长度 head len 的单位是 4 B ,因此如果head len = 5 ,那么表示 4*5 = 20 B 【4 bit】

  • 区分服务: 用来区分不同的数据报,以便按优先级获得更好的服务,但实际上一直没被用过【8 bit】

  • 总长度:IP 报头+数据的长度【16 bit】

  • 标识 identification:在IP软件在存储器中维持着一个计数器,每产生一个数据报,计数器就+1,并将此值赋值给标识字段。当IP数据报长度超过 MTU 而必须进行分片,这个标识字段的值就被复制到所有的数据报片的标识字段中。相同的标识字段的值使分片后的各个数据报片最后的能正确地重装成为原来的数据。【16 bit】

  • 标志 flag:目前只有两位有意义【3 bit】

    • 标志字段中的最低位为MF more fragments。MF=1即表示后面“还有分片”的数据报。MF=0表示的是这个数据报的最后一个。
    • 标志字段中的中间一位记为DF don’t fragment,当DF记为1时,表示的是“不能分片”。
    • 最高位:reversed bit
  • 片偏移:某片在原分组中的相对位置,便于后续接收时正确地重组。片偏移以8字节为单位。这就是说,每个分片长度一定是8字节的整数倍。【13 bit】

  • 生存时间 :数据报能在因特网中经过的路由器的最大数值是255【8 bit】

  • 上层协议 protocol:指出此数据携带的数据是使用何种协议,以便让目的 IP 层知道将数据部分上交到哪个处理过程。如TCP,UDP**[17]**等等【8 bit】

  • 首部检验和:检验头部是否正确【16 bit】

  • 源IP地址:【32 bit】

  • 目的IP地址:【32 bit】

分片和重组

image-20220430142315368

以太网对数据帧的长度都有一个限制,即 最大传输单元 MTU Maximum Transmission Unit1500 B

因此需要将大的 IP 数据报/包分片,但不能直接分片,要拷贝头部信息

image-20220430142132152

每一个片的载荷/数据部分【不包括头部】都一定是 8 B 的倍数,如上的 1480 B

每一片都具有相同的标识【用于确定哪些是一个组的】,但不同的偏移量,偏移量记录的是分片的数据部分在原来的数据部分的偏移量【均不涉及头部】

重组一定只在最终的目标主机上进行,减少对中间路由器的压力,同时,不同的片可能走不同的路径,也无法在中间路径上全部重组

如果有某分片丢失了,那么所有该标识的分片都会被目标主机丢弃,如果上层是 TCP,那么超时重发。因此分片会增加丢失的概率,导致重发增加,效率降低,因此不建议切分 IP 数据报。

TCP协议为了减少IP报被切分的概率,双方主机在握手阶段会交换自己的MSS

MSS是TCP层交互给IP层最大分段大小,不包含TCP报头,只包含数据所以TCP为了减少被切分的概率,就确定一个MSS限制每一次交互给IP层的数据大小。MSS数据大小去掉IP报头和TCP报头,IP报头和TCP报头都是20个字节(不考虑扩展项)。因此:MSS数据大小=MTU-20-20(MTU默认值是1500个字节,也可以是其它值)。

所以双方主机在建立连接的时候会交换自己的MSS大小值,最终大小取决于双方主机的较小值,如果一台主机的MSS是1200个字节,另一台主机的MSS是1300个字节,所以双方主机MSS都取1200个字节,那么双方通信的时候TCP层面发送的数据都是1200个字节。
https://blog.csdn.net/sjp11/article/details/124170051

image-20220430142925705

IP 编址

image-20220430143913198

IP 地址用来标识接口,如主机,IP 地址不是用来标识主机,而是标识主机连接的那个接口/点的,一个主机也可以有多个接口,包含多个 IP

子网

image-20220430144422811

IP 地址:

  • 子网部分(高位 bit)

  • 主机部分(低位 bit)

一个子网内部的主机的到达在 IP 层面一跳可达不需要借助路由器,可以借助交换机即可

链路层:在长途链路中采用点到点的连接,减少绕路;在局域网中采用多点连接即多个设备连到交换机上,经过交换机到达其他点

image-20220430144733795

image-20220430145144550

如上,有 6 个子网

IP 地址分类

image-20220430145244700

  • A 类地址:最高地址为0,27-2 = 126 个网络,注意减 2 是因为全 0 和全 1 的网络不使用,每个网络有 224-2 个主机

  • B 类地址:最高地址为 10,214-2 个网络,216-2 个主机

  • C 类地址:最高地址为 110,221-2 个网络,28-2个 主机

    ABC 类地址均为单播地址,D类地址为组播地址单播与组播、广播及任播有什么区别-电子发烧友网 (elecfans.com)

    组播解决了单播和广播方式效率低的问题,组播路由器借助组播路由协议为组播数据包建立树型路由,被传递的信息在尽可能远的分叉路口才开始复制和分发。

  • D 类地址:最高地址为 1110,228-2 个,D类地址不能出现在IP报文的源IP地址字段。

  • E 类地址:最高地址为 11110,为未来预留的

互联网的路由是**以网络为单位【而不是一个 IP 地址一个表项】**来路由信息的发布和计算的,一个子网在路由器中就是一个表项

而且如上面的子网图中,可以将 3 个子网聚集成一条向外发布 【即这些子网从更短的掩码或者从外部来看,也可以看作一个子网,因此只要是这些子网【即根据更短的掩码】的数据报,都发给这个路由器即可,接下来往哪个子网发,这个路由器会知道】,进一步减少在广域网中路由表表项的数目和计算的代价

特殊 IP 地址

image-20220430152710393

image-20220430154658524

  • 网络地址:{}={,0} 该地址用于标识网络,不能分配给主机,因此不能作为数据的源地址和目的地址。

  • 直接广播地址:{}={, -1} 向某个网络上所有的主机发送报文。直接广播地址只能作为目的地址。

  • 受限广播地址:{}={-1, -1} 受限广播地址是在本网络内部进行广播的一种广播地址。TCP/IP规定,32比特全为“1”的IP地址用于本网络内的广播。**受限广播地址只能作为目的地址。 **

    直接广播要求发送方必须知道信宿网络的网络号。但有些主机在启动时,往往并不知道本网络的网络号,这时候如果想要向本网络广播,只能采用受限广播地址(Limited Broadcast Address)。 https://www.bilibili.com/read/cv14336375

  • 回环地址:127开头,后面任意*【除了全0,全0表示网络地址和全1,全1表示该网络的广播地址】*到了 IP 层会直接返回

    image-20220430152840849

  • 0.0.0.0,特殊的源地址,表示的是网络上的所有主机,一般在写服务端程序绑定监听地址时常用此地址。

专用(内网) IP 地址

image-20220430154844277

内网地址用于区分局部网络中的不同设备

路由器不对目标地址是内网地址的分组进行转发,即不能在公网中转发,只能在内网中使用

因此 ping 上述的内网地址一定会超时,分组被丢弃。但 ping 除内网地址外的地址都是可以 ping 到的【也有可能超时,有些 IP 不能访问】,因为 IPv4 地址早已分配完了

CIDR

image-20220430155530440

B 类地址主机太多,C 类地址主机太少,因此都不太合适,所以产生了无类域间路由,不分类,可以任意划分前多少个 bit 为网络号,这样就可以控制主机数目适中。

但这样看到 IP 地址时就不能像按类划分那样看前面几位就能确定前面多少位是网络号了,因此需要将 IP 与子网掩码与操作,即可得到网络号

转发

image-20220430160426352

对于到来的 IP 数据报中的目标地址,需要对每一个表项进行掩码与并和对应的网络号对比,相同则从这个端口转发出去

如何获得 IP 地址

主机如何获得 IP 地址

image-20220430160854594

需要配置4个信息:IP、子网掩码、默认网关、local DNS

DHCP

Dynamic Host Configuration Protocol 动态主机配置协议

DHCP 是基于 UDP 的应用

image-20220430161109899

image-20220430161402186

自动申请IP地址的过程:

  1. 主机**广播请求【全1的 IP 广播】**寻找能够提供IP地址的DHCP服务器

    【DHCP 请求报文👉目的端口 67 (DHCP服务器)和源端口 68 (DHCP客户)的UDP报文段👉有广播 IP 目的地址(255.255.255.255)和源 IP 地址 0. 0. 0. 0 的 IP 数据报👉有目的 MAC 地址 FF : FF : FF : FF : FF : FF 和 源 MAC 地址的以太网帧】

  2. 服务器收到请求后,查看自己是否有可提供的IP地址(需要事先在DHCP服务器上配置地址池和可以提供的IP地址范围)。如果有,就回应可以提供的IP地址和可使用的时间(通常叫租期)

  3. 主机收到服务器回应的消息后,知道可以使用这个IP地址和租期,会发送确认请求

  4. 服务器收到来自主机的请求,再 ACK

为什么需要再发一次 request 呢?

因为可能有多个 DHCP 服务器,主机只需要选择一个 DHCP 提供的 IP 即可【一般第一个】,因此要告诉其余的 DHCP 服务器,不需要它们分配的 IP 了

机构如何获得 IP 地址池

image-20220430162535943

通过将 ISP 的网络号增加几位,如上增加 3 位,则前 20 位为网络号,后 3 位为子网号【可以分配给 8 个机构】,再后面为主机号,这样就能从 ISP 获取一个 IP 地址池

层次编址:可以路由聚集

image-20220430163526208

路由器 IP0 向前面的路由器 IPx 发布通告,凡是通过掩码(23)得到是 IP0 的,那么下一跳 hop 都是 IP0 路由器,IPx 需要转发到连接 IP0 的接口。

其他的同理,因此上图左下可见 IPx 的路由表。

而对于 IPx 它要把路由表信息发布给更前面的路由器 IPw,可以把路由表中每一条都转发,只不过在 IPw 中相应 IP 的下一跳会变成 IPx,但这样会导致越往上,路由表越大。

因此这里可以路由聚集,显然 IP0~IP3 都是从 IPx 划分出来的子网,因此 IPx 可以向 IPw 发布这样的信息,凡是掩码(20) 得到是 IPx 的都转发到 IPx路由器,等报文到了 IPx 中,它根据自己的路由表可以将其进行进一步的转发

要可以聚集才能聚集,如果不是由一个大的划分成小的,那么必须一条一条的发布通告

image-20220430164719591

当 IP1 被分到另外一个 ISP时,原来的 ISP 的路由器 IPx 即使有空洞,即并不是掩码(20)后为 IPx 的都应该转发给它,IP1 就不是,但为了减少表项数目,仍然可以进行路由聚集。在 IPy 中 IP1 不能聚集,因此需要单条地发布给上层 IPw。

因此在路由表项匹配时,可能会出现多个能够匹配的表项【如上 IPw 的第一和第二条都能匹配 200.23.18.1】*,要选择其中匹配长度最长的表项作为转发*

ISP 如何获取 IP 地址池

image-20220430162425118

ISP 则可以从 ICANN Internet Corporation for Assigned Names and Numbers 获取 IP 地址池

NAT

image-20220430165900248

image-20220430170049881

image-20220430170418853

内网可以访问到外网,但外网不能主动访问到内网,需要内网穿透

image-20220430171112883

image-20220430171153839

image-20220430171830343

image-20220430172053958

如 Skype

IPv6

image-20220430172244401

IPv4 的问题

  • 每到一个路由器,TTL要减去 1,因此首部校验和也要作相应的改变,会加重路由器负担

  • 会产生分片

  • IPv4 的头部没有机制对 QoS Quality of Service服务质量 的支持,即是尽力而为的

IPv5是一个实验性的资源预留协议,被称为因特网流协议(ST),目的是提供服务质量-QOS。

为什么有IPv4、IPv6,却没有IPv5?IPv10又是什么新鲜物种? - 知乎 (zhihu.com)

image-20220430173422178

头部固定 40 B,options被 next header 标识,放在 data 部分

image-20220430173733458

image-20220430174322411

只能平滑过渡

image-20220430174346683

4.4 通用转发和 SDN【了解】

传统方式的弊端

image-20220501153930425

传统方式:垂直集成:每个路由器既实现数据平面的功能又实现控制平面的功能。路由表粘合两个平面

image-20220501153802620

image-20220501154014259

image-20220501155022133

而在 SDN 中很容易实现,因为 SDN 可以匹配多个字段,而不是传统的仅仅为 DA 字段,因此可以区分出不同的主机通信等,实现流量分路

SDN ~2005

image-20220501154124348

CA control agent

image-20220501154429238

注意:这里的分组交换机就是路由器,不是链路层的交换机

image-20220501154625154

这里所说的网络操作系统是指 SDN 下的远程控制器,不是指 windows 等【SDN 控制器在逻辑上是集中的,但为了可拓展性、性能等也可以采用分布式实现】

SDN 体系结构的 4 个关键特征

  1. 通用“flow-based”基于流的匹配+行动

  2. 控制平面和数据平面分离

  3. 控制平面功能在数据交换设备外实现,由两个组件组成:一个 SDN 控制器或网络 OS;若干的网络控制应用

  4. 可编程控制:在远程控制器之上以网络应用的形式【如防火墙、负载均衡等】实现各种网络功能,SDN 控制器通过北向接口 API 和网络控制应用交互

    编程的结果形成流表,控制器通过南向接口 API (如 OpenFlow 标准)下发给分组交换机,南向接口同时支持分组交换机将自身的状态上报给 SDN 控制器

    OpenFlow协议运行在TCP之上,使用6653的默认端口号

image-20220501160327162

在SDN中数据平面交换机SDN控制器网络控制应用程序是分离的实体。因此可以由不同的厂商来生产,有利于竞争和更良好的业态

OpenFlow

image-20220501160357280image-20220501160508718

image-20220501160546054image-20220501160641579

如上,可以根据 MAC 进行转发,起到了交换机的作用

image-20220501160719695

几乎所有的网络设备都能通过匹配不同的流表+行动来实现

image-20220501160940364

  • 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
  • Copyrights © 2022-2024 zzb
  • RZ
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信