计算机网络 - 网络层的数据平面

news2024/11/22 14:38:34

Overview

首先Network Layer负责的是host to host的传输, 然后可以分为两个平面, 控制平面以及数据平面.

数据平面: 负责forward datagrams from input to output links

决定路由器从input到output

转发功能:

基于目标地址 + 转发表

SDN方式基于多个字段+流表

控制平面: 调控local, router的forwarding actions, 这个平面涉及很多路由选择的算法

传统的控制平面: pre-router控制平面, 每一个路由都有单独路由器算法元件, 在控制平面上进行交互

SDN: 远程控制器与本地代理(CA)交互

总的来说, Network layer负责转发和路由

转发就像trip中的中转站, 就是知道下一站怎么走就行了. 网络中是将分组从路由器的输入接口转发到合适的输出接口

路由就像trip中的路径规划, 在一个更加宏观的层面上规划trip. 使用路由算法决定分组从主机到目标接收主机的路径

网络服务模型

在网络这个服务之下提供的是best effort的模型 - 也就是没有保证数据的正确性

路由的组成

简单的路由体系就是

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

在这里插入图片描述

输入端口

在物理层通过bit的接收 → 在链路层解封装 → 在网络层根据头部信息找地址找到合适的输出, 包括了基于目标的转发和通用转发

基于目标的转发

通过最长前缀匹配, 然后决定了output端口, 然后就会交给switching

Switching

Switching核心功能就是转发

其中switching交换有三个典型的结构

  1. memory
  2. bus
  3. crossbar
    在这里插入图片描述

内存交换

在CPU直接控制下的交换,分组被拷贝到系统内存,CPU从分组的头部提取出目标地址,查找转发表,找到对应的输出端口,拷贝到输出端口

问题是转发速率被内存的宽带限制, 数据报通过BUS两遍, 一次只能转发一个分组

在这里插入图片描述

通过总线交换

数据报通过共享总线, 从输入端口发到输出端口. 这个可以类比大转盘, 车辆可以都进入大转盘, 到达了合适的口之后就出来(当然这个车每次只能进来一辆!)

问题是有总线竞争, 就是交换素的会被总线带宽限制, 每次只能处理一个分组
在这里插入图片描述

通过crossbar的交换

这个 就是intercept netwrok, 只有output不一样, 就可以同时转发
在这里插入图片描述

输出端口

数据到了输出端口就会被存放到output的内存中, 然后会把它们转发到output link. 包括了scheduling, de-queing
在这里插入图片描述

为什么要有Queuing

输入端: 当Switching的速度小于所有input口的汇聚速率的时候, 就需要输入口的queue.

输出端: 当数据从Switching到达的速度比传输速度快时候 (比如所有inputs都走到同一个output)

需要多大的缓存呢

  1. 拇指规则(经验性规则):平均缓存大小=典型的RTT(例如:250ms)倍于链路
    容量C
  2. 最近的一些推荐: 有N(非常大)个流,缓存大小等于 RTT * C / sqrt(N)

在输出端口会有调度的算法

调度就是选择什么样的一个链路传输的分组

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

优先权调度: 优先级高的先发送

Round Robin: 循环扫描不同类型的队列, 发送完一类的分组再发送下一类

The Intenet Protocol (IP)

IPv4

在这里插入图片描述

IPv4有一个分片和重组的功能, 不过在IPv6中就没有了

IP编址

IP地址: 32位标识, 对主机或者路由器的接口编址, 也就是一个IP地址对应一个接口

在这里插入图片描述

子网

子网的IP地址的高位相同, 无需路由器接入, 子网内各主机你可以在物理上相互直接到达

在这里插入图片描述

IP地址分类

ClassA/B/C
在这里插入图片描述

特殊IP地址

本机本子网: 全部为0

广播地址: 全部为1

CIDR 无类域间路由

地址格式为 a.b.c.d/x, 其中 x 是 地址中子网号的长度

在这里插入图片描述

子网掩码

32bits, 其中1表示子网部分, 0表示主机部分

比如 A类的网络:255.0.0.0 :11111111 00000000 0000000 00000000

DHCP - Dynamic Host Configuration Protocol

动态获得host的地址, 允许主机在加入网络的时候,动态地从服务器那里获 得IP地址

DHCP工作概况

主机广播DHCP discover

DHCP服务器用DHCP offer提供相应

主机请求IP地址, 发送DHCP request

DHCP发送地址, DHCP ack报文

在这里插入图片描述

如何过得一个IP地址

从ISP获得地址块中分配一个小地址块, 然后再分给内部不同的设备. 这个分配是通过ICANN管理的

路由聚集 route aggregation

路由会汇聚成一个点, 所有离开本地网络的数据报居右一个相同的原地址NAT IP address, 但是具有不同的端口号
在这里插入图片描述

动机: 本地网络只有一个有效IP地址

  • 不需要从ISP分配一块地址,可用一个IP地址用于所有的(局域网)设备–省钱
  • 可以在局域网改变设备的地址情况下而无须通知外界
  • 内部的设备没有明确的地址, 安全

NAT: Network Address Translation

因为对外只有一个地址, 对内有很多主机, 那么就需要一个对ip地址的转换

外出数据包:替换源地址和端口号为NAT IP地址 和新的端口号,目标IP和端口不变

进入数据包:替换目标IP地址和端口号,采用存 储在NAT表中的mapping表项
在这里插入图片描述

NOTE: 这里有两次地址装换

  1. 主机10.0.0.1 → 128.119.40, 80会转换成10.0.0.1, 3345
  2. 10.0.0.1, 3345 出去的时候会转换成 138.76.29.7, 5001

于是收到的返回地址是138.76.29.7, 5001, 在转成10.0.0.1, 3345交给host

port是16bit的, 也就是说可以最多有6万个设备同时链接

争议: 对NAT是有争议的, 因为违反了end-to-end 原则, 端口信息做了处理, 同时带来了NAT穿越的问题

IPv6

初始动机: 32-bit地址空间将会被很快用完, 另外动机头部格式改变加速处理和转发
在这里插入图片描述

和IPv4对比的变化

  • checksum被移除, 降低每一段中的处理速度
  • ICMPv6: 增加报文package too big让发送端发送跟小的报文, 就不需要IP protocol来做分片跟重组了

IPv4到IPv6的平移

隧道: 在IPv4路由器之间传输的IPv4数据包中携带IPv6的数据报
在这里插入图片描述

SDN

传统方式垂直集成 → 昂贵, 不便于创新的生态

SDN: 控制器跟分组转发分离

OpenFlow数据平面的抽象

根据Match的IP地址, 做Action

  1. src=1.2.., dest=3.4.5.* → drop
  2. src = ..., dest=3.4.. → forward(2)
  3. src=10.1.2.3, dest=... → send to controller

总结

这里主要讲了Network Layout的数据平面, 包括数据的input → switch → output, 然后因为数据会拥堵, 所以需要input和output都需要cache, cache的大小大概是RTT * C / sqrt(N), 对于swtich, 有基于内存的交换, 基于bus的交换, 还有基于crossbar的交换, 基于crossbar的交换速度最好. 然后, 还将到了IP协议, 包括ip的报文, 以及IPv4, 怎么分地址, 包括classic A/B/C 还有无类域间路由, 地址格式为 a.b.c.d/x. 有地地址之后, 对于一个系统内部的ip地址分配可以做动态分配, 也就是DHCP, 包括了到了怎么做Network Address Translation. 之后也讲到了IPv6以及SDN, 把数据平面和控制平面做分离

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/575663.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第10届蓝桥杯Scratch省赛真题集锦

编程题 第 1 题 问答题 击鼓游戏 题目说明 准备工作: 将复台背景设置为“spotight-stage”,添加一个“Belerina"角色、两个“Drum1"角色和两个“Drum2”角色,并按照图 7-1 的位置摆放。角色“Beleina"的造型和颜色的设置须如图 7-1所示&a…

美女放电还是整形-从《人月神话》误译谈状态机图

DDD领域驱动设计批评文集 欢迎加入“软件方法建模师”群 《软件方法》各章合集 在重审《人月神话》中译本的过程中,发现一处较严重的误译。 原文是: the first milepost is not reached until two months have elapsed. 原译为: 两个月…

Java中常量基础知识

1 问题 什么是字面常量? 2 方法 拿第一行输出语句来说,这行代码输出了 “hello” 这个字符串,无论何时何地运行程序,输出的这个字符串都不会变,这就是字面常量。 定义:常量即程序运行期间,固定不…

chatgpt网站优选集合

目录 chatGpt 国内镜像网站集合 chatgpt接入微信 chatgpt接入谷歌浏览器 chatgptAI绘画 最后 chatGpt 这个说实话,不用我介绍大家也都懂。不如玩一个有意思的,这里我让chatGpt自己介绍一下他自己: 嗨,大家好,我是…

C++ [STL之vector模拟实现]

本文已收录至《C语言和高级数据结构》专栏! 作者:ARMCSKGT STL之vector模拟实现 前言正文空间结构默认成员函数构造函数拷贝构造函数赋值重载析构函数关于数据拷贝问题 迭代器容量操作查询容量容量操作 数据访问下标访问头尾数据访问 数据增删尾插尾删重…

学懂缓存雪崩,缓存击穿,缓存穿透仅需一篇,基于Redis讲解

在了解缓存雪崩、击穿、穿透这三个问题前,我们需要知道为什么我们需要缓存。在了解这三个问题后,我们也必须知道使用Redis时,如何解决这些问题。 所以我将按照"为什么我们需要缓存"、"什么是缓存雪崩、击穿、穿透"、&qu…

Linux学习笔记 --- Linux基础命令Part1

一. Linux的目录结构 目标:1. 掌握Linux系统的目录结构 2. 掌握Linux系统的路径表达形式 1.1 Linux系统的目录结构 我们知道,在操作系统中,文件系统的目录结构一般都是树形结构。Linux的目录结构是一个树型结构Windows 系统可以拥有多…

如何使用wireShark抓取还原文件

简介 WireShark的追踪流功能可以帮我们抓取从网络上下载的各种文件,接下来就演示下如何抓取并且进行还原。 使用Nginx搭建文件存储服务器 只要是通过http网站下载的包,都可以通过追踪流工具进行抓取。这里为了演示,临时搭建一个Nginx文件存…

Yolov8涨点技巧:MobileViTAttention助力小目标检测,涨点显著,MobileViT移动端轻量通用视觉transformer

在​crack缺陷检测项目原始0.739提升至 0.772 ,涨点明显,博主多个数据集亲测有效,实现暴力涨点; 现有博客都是将MobileViT作为backbone引入Yolov5,因此存在的问题点是训练显存要求巨大,本文引入自注意力的Vision Transformer(ViTs):MobileViTAttention 1. MobileViT介绍…

English Learning - L3 作业打卡 Lesson3 Day18 2023.5.22 周一

English Learning - L3 作业打卡 Lesson3 Day18 2023.5.22 周一 引言🍉句1: People said my mother was “a good egg”.成分划分弱读连读语调 🍉句2: She would always help anyone in need.成分划分连读语调 🍉句3: We never had to “walk…

1、MQTT协议入门以及mosquitto示例

1.什么是MQTT MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的"轻量级"通讯协议,该协议构建于TCP/IP协议上&#xf…

一款好看的markdown编辑器:md-editor-v3

文章目录 md-eidtor-v3地址其它markdown编辑器🎄 md-editor-v3⭐️ 功能一览📦 安装💡 用法✍🏻 编辑器模式📖 仅预览模式 🗺 预览图🎁 Apis🔖 MdPreivew Props🔩 MdEdit…

c++基础概念,const与指针、引用的关系,auto,decltype关键字能干啥总得了解吧。总得按照需求自定义创建实体类,自己编写头文件吧

const限定符 有时我们希望定义这样一种变量,它的值不能被改变。例如,用一个变量来表示缓冲区的大小。使用变量的好处是当我们觉得缓冲区大小不再合适时,很容易对其进行调整。另一方面,也应随时警惕防止程序一不小心改变了这个值。…

邂逅Webpack和打包过程

1 认识webpack工具 2 webpack基本打包 3 webpack配置文件 4 编写和打包CSS文件 5 编写和打包LESS文件 6 postcss工具处理CSS 从脚手架打包成普通的htmlcssjs文件 内置模块path: 拼接路径 const path require("path")const filepath "C://abc/…

Systrace系列9 —— MainThread 和 RenderThread 解读

本文是介绍 Android App 中的 MainThread 和 RenderThread,也就是大家熟悉的主线程和渲染线程。文章会从 Systrace 的角度来看 MainThread 和 RenderThread 的工作流程,以及涉及到的相关知识:卡顿、软件渲染、掉帧计算等。 这里以滑动列表为例 ,我们截取主线程和渲染线程一…

InnoDB 在可重复读 RR 隔离级别下,能解决幻读问题吗?

InnoDB 在可重复读 RR 隔离级别下,能解决幻读问题吗? MySQL 在「可重复读」隔离级别下,可以很大程度上避免幻读现象的发生(注意是很大程度避免,并不是彻底避免),所以 MySQL 并不会使用「串行化」…

Pycharm中配置不了conda解释器

我安装的是pytorch的CPU版本,在Pycharm中配置conda环境时,每次添加完都不显示,搜遍了很多方法都没用。最后成功解决,这里将一些方法进行总结,方便大家解决问题。 我的情况和解决 问题情况以及显示 1.在Pycharm的日志…

GATK最佳实践之数据预处理SnakeMake流程

<~生~信~交~流~与~合~作~请~关~注~公~众~号生信探索> 写的数据预处理snakemake流程其实包括在每个单独的分析中比如种系遗传变异和肿瘤变异流程中&#xff0c;这里单独拿出来做演示用&#xff0c;因为数据预处理是通用的&#xff0c;在call变异之前需要处理好数据。 数据…

Java中如何使用策略模式减少 if / else 分支的使用

目录 1、策略模式 1.1 、策略模式包含三个角色&#xff1a; 2、需求 2.1 、传统方式 2.2 、策略模式实现 2.2.1 、新建PolicyPatternController.java 2.2.2 、Express.java(实体类) 2.2.3 、定义一个接口&#xff1a;PolicyPatternService.java 2.2.4 、定义3个实现类…

Python根据经纬度在地图上显示(folium)

Python根据经纬度在地图上显示&#xff08;folium&#xff09; 一、folium介绍1.folium.Map参数简要介绍2.folium.Marker参数介绍 二、Python根据经纬度在地图上显示&#xff08;示例&#xff09;1.经纬度坐标标记2.经纬度坐标分组标记 一、folium介绍 1.folium.Map参数简要介…