计算机网络 - 网络层的数据平面
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交换有三个典型的结构
- memory
- bus
- crossbar
内存交换
在CPU直接控制下的交换,分组被拷贝到系统内存,CPU从分组的头部提取出目标地址,查找转发表,找到对应的输出端口,拷贝到输出端口
问题是转发速率被内存的宽带限制, 数据报通过BUS两遍, 一次只能转发一个分组
通过总线交换
数据报通过共享总线, 从输入端口发到输出端口. 这个可以类比大转盘, 车辆可以都进入大转盘, 到达了合适的口之后就出来(当然这个车每次只能进来一辆!)
问题是有总线竞争, 就是交换素的会被总线带宽限制, 每次只能处理一个分组
通过crossbar的交换
这个 就是intercept netwrok, 只有output不一样, 就可以同时转发
输出端口
数据到了输出端口就会被存放到output的内存中, 然后会把它们转发到output link. 包括了scheduling, de-queing
为什么要有Queuing
输入端: 当Switching的速度小于所有input口的汇聚速率的时候, 就需要输入口的queue.
输出端: 当数据从Switching到达的速度比传输速度快时候 (比如所有inputs都走到同一个output)
需要多大的缓存呢
- 拇指规则(经验性规则):平均缓存大小=典型的RTT(例如:250ms)倍于链路
容量C - 最近的一些推荐: 有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: 这里有两次地址装换
- 主机10.0.0.1 → 128.119.40, 80会转换成10.0.0.1, 3345
- 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
- src=1.2.., dest=3.4.5.* → drop
- src = ..., dest=3.4.. → forward(2)
- 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, 把数据平面和控制平面做分离
相关文章:

计算机网络 - 网络层的数据平面
Overview 首先Network Layer负责的是host to host的传输, 然后可以分为两个平面, 控制平面以及数据平面. 数据平面: 负责forward datagrams from input to output links 决定路由器从input到output 转发功能: 基于目标地址 转发表 SDN方式基于多个字段流表 控制平面: 调…...

《Spring Guides系列学习》guide41 - guide45
要想全面快速学习Spring的内容,最好的方法肯定是先去Spring官网去查阅文档,在Spring官网中找到了适合新手了解的官网Guides,一共68篇,打算全部过一遍,能尽量全面的了解Spring框架的每个特性和功能。 接着上篇看过的gu…...

数据库基础——1.数据库概述
从这篇文章我们开始学习数据库的相关知识 目录 1.为什么要使用数据库 2.数据库与数据库管理系统 2.1相关概念 2.2数据库与数据库管理系统的关系 编辑2.3常见的数据库管理系统 2.4常见的数据库介绍 3.MySQL介绍 3.1概述 3.2关于MySQL8.0 3.3 Oracle vs MySQL 4.RD…...

2023 光亚展|乐鑫将携 AI、Wi-Fi 6、私有云和 Matter 方案精彩亮相
2023 广州国际照明展览会(光亚展)将于 6 月 9 至 12 日在广州琶洲展馆启幕。本届展会以“光未来”为主题,畅想未来生活方式的无限可能。乐鑫科技 (688018.SH) 将在 B 区 9.2 号厅 D55 展位,带来具有前瞻性的智能照明解决方案和实体…...

用反射设计通用的实例化对象方案
需求 对象的相关信息存储在javabean.properties文件中,通过读取properties文件中的信息,实例化对象,要求程序不能硬编码,即程序可以通用,针对不同的对象,都可以实例化。仅需修改配置文件,不需要…...

破坏单例模式--存在的问题---问题的解决
目录 破坏单例模式--存在的问题---问题的解决 问题演示 破坏单例模式: 序列化 反射 序列化反序列化: 代码: 运行结果: 反射 代码: 运行结果: 问题的解决 序列化、反序列方式破坏单例模式的解…...

SpringCloud微服务踩坑系列-java.lang.IllegalStateException
异常如下: 2023-05-24 08:47:10.764 ERROR 118400 --- [nio-8084-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exceptio…...

Linux-地址空间
文章目录 问题引入操作系统宏观认识操作系统与进程程序地址空间进程地址空间问题解释 问题引入 在Linux操作系统中、vim编译器下,出现了变量同地址但不同值的现象。 下面以解释该现象产生的原因为主线,在过程中学习Linux操作系统的知识。 运行代码展示…...

【EKS】基于Amazon EKS搭建kubernetes集群
文章目录 前言 | 亚马逊云科技 re:Invent前沿资讯一、介绍篇🎨什么是AWS 云计算什么是Amazon EKS 二、部署篇🔨1、创建集群VPC2、创建集群子网3、创建IGW网关4、创建路由表与子网绑定5、EKS集群创建6、创建kubeconfig配置文件7、添加计算节点组8、查看EK…...

Tomcat安装与启动和配置
目录 Tomcat 简介 Tomcat 安装 Tomcat 启动和配置 文件夹作用 启动,关闭Tomcat; 常见问题 配置 环境变量 IDEA中配置Tomcat Tomcat 简介 Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在…...

ruoyi-vue版本(十八)创建自己的项目,使用若依里面的技术,多数据源的实现
目录 1 创建自己的项目2 连接MySQL数据库(多数据源)2.1 若依实现多数据源2.1.1 主要思想2.2 第三方的依赖的实现1 创建自己的项目 1 创建一个空文件夹 2 idea 里面创建项目...

C++-stack题型->最小栈,栈的压入与弹出,逆波兰表达式
目录 最小栈 栈的压入与弹出 逆波兰表达式 最小栈 155. 最小栈 - 力扣(Leetcode) 设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。 实现 MinStack 类: MinStack() 初始化堆栈对象。void …...

【计算机网络实验】BGP和OSPF协议仿真实验
实验内容 BGP和OSPF协议仿真实验 实验目的 (1)学习BGP协议的配置方法; (2)验证BGP协议的工作原理; (3)掌握网络自治系统的划分方法; (4)验证…...

提升日期处理效率:day.js 实战经验分享
theme: smartblue 本文简介 点赞 关注 收藏 学会了 本文主要介绍我在工作中使用 day.js 较多的方法。本文并不能代替 day.js 官方文档,日常工作中该查文档的还是要查文档。本文是写给刚接触 day.js 的工友,让这部分工友能更顺利上手 day.js。本文不涉…...

mysql中的count(1)、count(*)、count(id)哪个更快?
今天和大家聊一下mysql中的count()方法 我们日常开发中,经常会用到count()命令,有的人用count(*),有的人用count(1),还有的人用count(id),那么这几种写法都有什么区别呢?哪种方法效率更高呢?今…...
cf1750E Bracket Cost
前言: 好久没训练了,来做道计数题找找感觉。**期末毁我青春 大意: 定义对于一个括号串 s的值,为通过最小次数以下操作使 s 实现括号匹配的操作次数。 选择一个子串,循环右移一位。在任意一个位置插入一个任意括号。 求一个括…...

Vue+springboot医院住院挂号登记收费系统7ui9s
医院信息管理系统的开发过程中,采用B / S架构,主要使用java语言进行开发,结合最新流行的springboot框架。使用Mysql数据库和idea开发环境。该医院信息管理系统包括用户、医生和管理员。其主要功能包括用户管理、医生管理、医生信息管理、预约…...
大前端之Koa2学习
Koa2框架介绍 Koa2是一个基于Node.js的Web框架,它使用了ES6的语法和async/await特性,使得编写异步代码更加简单和优雅。Koa2的核心思想是中间件,它允许开发者将应用程序拆分成小的、可重用的部分,从而使得代码更加模块化和易于维…...
Qml实现Dock浮动、停靠功能
纯Qml实现Dock浮动、停靠功能 效果展示github地址:介绍环境Demo代码参数说明API说明 效果展示 Qml Dock效果演示 github地址: https://github.com/longtwilight/QmlDock 介绍 这是一个使用纯qml实现的Dock组件,它支持停靠、浮动、窗体分离、窗体独立、大小调整等…...

最新版本 Stable Diffusion 开源 AI 绘画工具之微调模型篇
✨ 目录 🎈 模型种类🎈 变分自动编码器 / VAE🎈 美学梯度 / Aesthetic Gradients🎈 大型语言模型的低阶自适应 / LoRA🎈 超网络模型 / Hypernetwork🎈 微调模型 / LyCORIS 🎈 模型种类 当你打开…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件
在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件
今天呢,博主的学习进度也是步入了Java Mybatis 框架,目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学,希望能对大家有所帮助,也特别欢迎大家指点不足之处,小生很乐意接受正确的建议&…...

【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...
五年级数学知识边界总结思考-下册
目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解:由来、作用与意义**一、知识点核心内容****二、知识点的由来:从生活实践到数学抽象****三、知识的作用:解决实际问题的工具****四、学习的意义:培养核心素养…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...
Pinocchio 库详解及其在足式机器人上的应用
Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库,专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性,并提供了一个通用的框架&…...
Java详解LeetCode 热题 100(26):LeetCode 142. 环形链表 II(Linked List Cycle II)详解
文章目录 1. 题目描述1.1 链表节点定义 2. 理解题目2.1 问题可视化2.2 核心挑战 3. 解法一:HashSet 标记访问法3.1 算法思路3.2 Java代码实现3.3 详细执行过程演示3.4 执行结果示例3.5 复杂度分析3.6 优缺点分析 4. 解法二:Floyd 快慢指针法(…...
用递归算法解锁「子集」问题 —— LeetCode 78题解析
文章目录 一、题目介绍二、递归思路详解:从决策树开始理解三、解法一:二叉决策树 DFS四、解法二:组合式回溯写法(推荐)五、解法对比 递归算法是编程中一种非常强大且常见的思想,它能够优雅地解决很多复杂的…...
CppCon 2015 学习:REFLECTION TECHNIQUES IN C++
关于 Reflection(反射) 这个概念,总结一下: Reflection(反射)是什么? 反射是对类型的自我检查能力(Introspection) 可以查看类的成员变量、成员函数等信息。反射允许枚…...