计算机网络 - 网络层的数据平面
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 🎈 模型种类 当你打开…...

路径规划算法:基于哈里斯鹰优化的路径规划算法- 附代码
路径规划算法:基于哈里斯鹰优化的路径规划算法- 附代码 文章目录 路径规划算法:基于哈里斯鹰优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要:本文主要介绍利用智能优化…...

Web 应用程序防火墙 (WAF) 相关知识介绍
Web应用程序防火墙 (WAF) 如何工作? Web应用防护系统(也称为:网站应用级入侵防御系统。英文:Web Application Firewall,简称:WAF)。利用国际上公认的一种说法:Web应用防火墙是通过执…...

docker快速部署hue+hue集成hive
首先需要安装hive,hive的安装在HIVE的安装与配置_EEEurekaaa!的博客-CSDN博客 安装完成之后,使用脚本命令启动hdfs和hive的相关服务。 一、安装docker # 安装yum-config-manager配置工具 $ yum -y install yum-utils # 设置yum源 $ yum-co…...

基于java SpringBoot和Vue uniapp的校园信息交流小程序
随着信息社会的网络化和计算机科学的广泛普及和迅速普及应用,具有综合智能的我国校园信息教育网络已成为推动中小学科学教育及其实践科学发展的信息技术手段。迅速推进了信息化改革,改善了高校信息交流的网络环境,提高了信息教育平台的管理水…...

数据包伪造替换、会话劫持、https劫持之探索和测试
(一)数据包替换攻击 该攻击过程如下:伪造服务器响应客户端的数据包。监听客户端的数据包,用预先伪造的数据包,伪装成服务器返回的数据发送给客户端。 因为攻击者跟目标在同一个局域网,所以攻击者发送的数…...

正则表达式集合
目录 一、校验数字的表达式 1. 数字 2. n位的数字 3. 至少n位的数字 4. m-n位的数字 5. 零和非零开头的数字 6. 非零开头的最多带两位小数的数字 7. 带1-2位小数的正数或负数 8. 正数、负数、和小数 9. 有两位小数的正实数 10. 有1~3位小数的正实数 11. 非零的正整…...

Django框架中models对象转换为json的方法
在django框架中输出api接口时一般都是输出json数据但是通过orm获取的数据库数据一般都是object所以需要转换成json数据,一般有一下3种情况 1.models对象使用“all()”时 from django.http import HttpResponse from django.core import serializers from TestMode…...

利用Servlet编写第一个“hello world“
利用Servlet编写第一个"hello world" 🔎创建 Maven 项目🔎引入依赖🔎创建目录🔎编写代码🔎打包代码🔎部署🔎程序验证🔎结尾 🔎创建 Maven 项目 Maven 是一个构…...

python 爬虫之js逆向爬虫详解
随着网站前端技术的不断发展,越来越多的网站采用JS进行渲染,并加上了一些反爬机制,导致传统的爬虫技术有些力不从心。本文将为大家介绍如何进行JS逆向爬虫,并且不少于1000字。 一、JS逆向爬虫的介绍 JS逆向是一种分析反爬机制的…...

SpringBoot:WebSocket实现消息撤回、图片撤回
下面只是讲述一下实现思路,代码基本没有哈!有时间单独发表一篇关于websocket的相关操作的博客。 1. 消息撤回、图片撤回 个人觉得关于撤回,需要下述几个过程: 发送的消息的标签上可以定义一个属性,这个属性的值应该是…...