网络基础三——IP协议补充和Mac帧协议
全球网络及网段划分的理解
根据国家组织地区人口综合评估进行IP地址范围的划分;
假设前8位用来区分不同的国家,国际路由器负责全球数据传输,子网掩码为IP/8;次6位区分不同的省份,国内路由器负责全国数据的传输,子网掩码为IP/14,国际路由器也可以参与;再往后4位区分不同的市,由省内路由器负责全省的数据传输,子网掩码为IP/18;最后根据主机号形成一个完整的IP地址;
IP报文传输的过程中,通过IP目的地址和子网掩码不断地进行路由转发,最终发送到目标主机;公网IP地址会根据国家省市划分出不同的网段;在全国范围内通信是由运营商来进行维护的;
一般网民使用的都是私有IP地址,而家用路由器是可以构建子网的;当普通人上网时,会将数据先传输到家用路由器,然后传输到运营商路由器,再传输到公网被接收,最后实现了通信;
一个路由器是由至少两个IP地址的,一个用于子网内部路由LAN口IP,一个用于跨网络传输WAN口IP,家用路由器的WAN口IP就是运营商路由器构建的子网中的一个IP;每一个IP报文在传输时会先进行判断,如果目的IP是在子网内,源IP地址就会不会替换,如果要跨网络传输就需要将子网IP替换成WAN口IP;
私有IP不断被替换的过程就是NAT技术;
通过公网 + 私有(可重复)构成了互联网;
当发送的目标IP是跨国的时候,运营商接收到报文就会丢掉,不允许发送出去;私有根据入网数量的多少,从高到低选用10.*,172.16.*,192.168.*的私有IP划分;
3.6路由
route
#查看路由表
#1.Destination,表示当前连接的网络号;
#2.Gateway,表示下一跳的路由器;
#3.Genmask,表示子网掩码;
#4.UG,U表示正在使用,G表示该条目是路由器;
#5.Iface,表示本地的网络接口,通过网络将数据报文发送出去;
查询路由表的过程其实就是拿着目标主机的IP & Genmask 得到一个网络号,然后和Destination对比,如果是就使用对应的网络接口将数据发送出去并进入下一跳,否则继续向下查询路由表,如果都找不到就发送到默认路由器(同网段的可以跨网络传输的路由器);最终就会到达入口路由器;入口路由器到达目标主机使用Mac地址实现;
4.IP分片与组装
实际上在一台主机中,报文并没有直接糖果网络层转发出去,而是继续交给了自己的下一层协议,最后查询路由表决定是发送给同网段主机还是路由器;
数据链路层一般不能发送过大的报文,所以要求上层不能一次交付过大的报文(TCP的发送缓冲区发送报文是一个一个进行);
ifconfig
#mtu表示的是Mac帧有效载荷最大是1500字节;
如果I发送的IP报文过大就会在IP层进行分片转发,目标路由器收全之后就会进行组装形成一个完整的报文;
在IP报头中具有相关切片和组装的字段;
16位标识,不同的IP报文对应的16位标识是不一样的,但是分片之后的报文16位标识是一样的;
3位标志,第1位不使用,第2位标志为0/1表示允许/不允许分片,第3位标志表示结束标志,当前是否是最后一个小包,0/1表示是/不是最后一个小包;
13位片偏移,原始报文被分成了若干片,表示此分片在原来报文的偏移量;
当原始报文被分片后,每一个分片都要进行添加报头;对于分片的组装,先将具有相同16位标识的IP分片聚集在一起,然后根据片偏移将分片排序,最后完成组装;
1.分片问题,一般报文片偏移量不为0,则说明报文被分片了,特殊第一个分片偏移量为0,但是它的第3位标志为1,表示此报文分片且不是报文结尾分片,如果两个都为0则说明是正常报文;
2.分片丢失问题,如果丢失了第一个分片则因为所有的分片没有0,识别出第一个分片丢失;如果丢失了最后一个分片则因为没有一个第3位标志为0,被识别出最后一个分片丢失;当前分片的片偏移量与前一个分片的长度不一样时,则说明当前分片之前已经有报文分片丢失;
解决上述问题就可以保证将所有的分片聚在一起,然后排序组装;其实一般是不建议IP报文进行分片的,因为只要有分片丢失,就会造成所有分片都被丢弃,重新发送所有切片,增加了丢包的概率;但是Mac帧规定了上层不能交付过大的报文,所以应该在传输层就保证数据报文较小;
二、以太网
通过网络层判断是将数据报文发送到同网段的主机还是跨网络发送到下一跳;想要进行跨网络传输或者同网段主机间通信,就需要确保设备之间数据帧的传输;所以数据链路层解决的就是如何让直接相连的主机设备进行数据交付;
每个主机除了要有公网或者私有IP地址之外,还需要有对应的网卡,而路由器则是有至少两张网卡,不同的网卡配对不同的IP就可以集连不同的网段;每一个网卡都对应着唯一的一个Mac地址;
ether以太网,表示的是48位的Mac地址;Mac地址的主要作用是区分同一子网中不同的主机;
1.Mac帧报文格式
1.Mac帧报文通过使用定长报头进行解包和分用;
2.Mac帧根据类型来进行分用,如:0800表示交付给IP协议,0806交付给ARP协议,8035交付给RARP协议;
数据大小范围,46-1500字节;
2.局域网通信的原理
在局域网中的所以主机都可以收到发送到局域网的数据帧,但是通过对比Mac地址决定是丢弃数据帧还是接收数据帧;
在局域网中是会存在数据碰撞问题的,需要使用碰撞避免算法减少碰撞次数,原理就是进行休眠,使得发送时间可以叉开,并且在休眠时其他主机可以发送数据帧;当检测到碰撞发生时,进行碰撞避免,之后进行数据帧的重发;
局域网的特点是任何时间只能有一个主机发送数据帧,换句话说就是局域网是一个临界资源;
一个主机要跨网络发送到远端主机就要通过路由器不断地路由到下一个网段;而经过路由器时会进行Mac帧的解包和重新封装;换句话说Mac帧只是在局域网中有效;
主机数越多,发生碰撞的概率越大,所以需要增加交换机,进行碰撞域的划分,减少碰撞的发生;1.如果发生了碰撞,通信双方主机进行了休眠,交换机识别到了此碰撞域的不发送数据,就可以让其他碰撞域的主机进行发送数据帧;2.检测到不是跨碰撞域的通信,变相地减少了其他碰撞域发生碰撞的概率;3.跨碰撞域的通信就和原来进行的局域网通信是一样的,只不过多经过了交换机设备;单次发送的数据帧尽量不要太大,否则会使得与局域网通信的时间变长,导致发生碰撞的可能性增加;
Mac帧协议为了减少碰撞概率,所以要求上层IP协议发送的IP报文不能过大,可以进行IP分片,但是分片增大丢包概率所以不建议分片,这时候就需要上层TCP协议来保证数据段小一些,使得IP报文小,进而使得Mac帧小;如:TCP和IP都使用标准报头20字节,则TCP单次发送的数据段的有效载荷最多只有1460字节;1460字节就是MMS(max segment size),要求TCP的发送缓冲区要分割成一个一个的数据段;
MMS是TCP的一个方案,数据链路层的方案是MTU(max transmisson unit),有效载荷最大为1500字节,1500字节为MTU;
由于设备的差异MMS和MTU可能不一样,还是会出现分片的情况,所以需要通信双方协商,使得MMS尽量保持一致;即TCP通信时会进行三次握手,协商MMS,取较小值为最终的MMS;
3.跨网络通信
所谓的跨网络传输实际上就是连续多个子网路由实现;最终路由到入口路由器时要进行,解包和重新封装,封装时需要知道目标主机的Mac地址;目标主机的Mac地址是未知的,所以需要使用ARP协议(局域网协议,划分在了数据链路层)将目标主机的IP地址转换成Mac地址;
相关文章:

网络基础三——IP协议补充和Mac帧协议
全球网络及网段划分的理解 根据国家组织地区人口综合评估进行IP地址范围的划分; 假设前8位用来区分不同的国家,国际路由器负责全球数据传输,子网掩码为IP/8;次6位区分不同的省份,国内路由器负责全国数据的传输…...

人工智能——深度学习
4. 深度学习 4.1. 概念 深度学习是一种机器学习的分支,旨在通过构建和训练多层神经网络模型来实现数据的高级特征表达和复杂模式识别。与传统机器学习算法相比,深度学习具有以下特点: 多层表示学习:深度学习使用深层神经网络&a…...

postgresql uuid
示例数据库版本PG16,对于参照官方文档截图,可以在最上方切换到对应版本查看,相差不大。 方法一:自带函数 select gen_random_uuid(); 去掉四个斜杠,简化成32位 select replace(gen_random_uuid()::text, -, ); 官网介绍…...

【azure笔记 1】容器实例管理python sdk封装
容器实例管理python sdk封装 测试结果 说明 这是根据我的需求写的,所以有些参数是写死的,比如cpu核数和内存,你可以根据你的需要自行修改。前置条件: 当前环境已安装python3.8以上版本和azure cli并且已经登陆到你的账户 依赖安…...
Nestjs 中定义既可以捕获错误(Error)和又可以异常(Exception)的过滤器
Nestjs 中,使用基于 HttpException 定义过滤器的话,只能捕获 Http 带状态码(statusCode)的 Exception,不能捕获 throw new Error(‘xxx’) 抛出的错误。 以下是使用实现 ExceptionFilter 接口定义的一个不特定于平台(express 或 fastify,即无论使用这两个web服务框架的…...

GitHub 仓库 (repository) Branch - SSH clone URL - Clone in Desktop - Download ZIP
GitHub 仓库 [repository] Branch - SSH clone URL - Clone in Desktop - Download ZIP 1. Branch2. SSH clone URL3. Clone in Desktop4. Download ZIPReferences 1. Branch 显示当前分支的名称。从这里可以切换仓库内分支,查看其他分支的文件。 2. SSH clo…...

Training - 使用 WandB 配置 可视化 模型训练参数
欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://blog.csdn.net/caroline_wendy/article/details/137529140 WandB (Weights&Biases) 是轻量级的在线模型训练可视化工具,类似于 TensorBoard,可以帮助用户跟踪…...

N1922A是德科技N1922A功率传感器
181/2461/8938产品概述: N192XA 传感器是首款通过将直流参考源和开关电路集成到功率传感器中来提供内部调零和校准的传感器。此功能消除了与使用外部校准源相关的多个连接,从而最大限度地减少了连接器磨损、测试时间和测量不确定性。 连接到 DUT 时进行…...

最简洁的Docker环境配置
Docker环境配置 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Mac、Linux或Windows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不…...

Docker内更新Jenkins详细讲解
很多小伙伴在Docker中使用Jenkins时更新遇到困难,本次结合自己的实际经验,详细讲解。根据官网Jenkins了解以下内容: 一、Jenkins 是什么? Jenkins是一款开源 CI&CD 软件,用于自动化各种任务,包括构建、测…...

基于遗传模拟退火混合优化算法的车间作业最优调度matlab仿真,输出甘特图
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 4.1遗传算法与模拟退火算法简介 4.2 GSAHO算法应用于JSSP 5.完整程序 1.程序功能描述 车间作业调度问题(Job Shop Scheduling Problem, JSSP)是一种典型的生产调度问…...

Mac 安装 brew brew cask 遇到的问题以及解决办法
安装Homebrew和Homebrew Cask是在Mac上管理软件包的常用方法。虽然大多数情况下安装这两个工具是比较简单的,但有时候也可能遇到一些问题。下面是一些常见的问题以及解决办法: 问题1:无法安装Homebrew 解决办法: 1.确保你的Mac已连…...

Vitalik Buterin香港主旨演讲:协议过去10年迅速发展,但存在效率、安全两大问题
2024 香港 Web3 嘉年华期间,以太坊联合创始人 Vitalik Buterin 在由DRK Lab主办的“Web3 学者峰会 2024”上发表主旨演讲《Reaching the Limits of Protocol Design》。 他介绍到,2010年代,基于基本密码学的协议是哈希、签名。随后ÿ…...
【leetcode】大数相加
题目链接:415. 字符串相加 - 力扣(LeetCode) 计算两个大数的和,从末尾开始逐个字符相加,记录进位 class Solution { public:string addStrings(string num1, string num2) {int i num1.size() - 1, j num2.size() …...
数据检索的优化之道:B树与B+树的深度解析与应用探索
1、引言 在信息时代,数据检索的速度和效率对于任何依赖数据处理的系统来说都至关重要。无论是在线搜索引擎、数据库管理系统还是文件存储系统,快速准确地检索所需数据都是核心需求。传统的线性数据结构在处理大规模数据集时往往力不从心,因此…...
替换服务器的SSL证书有什么影响?
SSL证书是保护网站和用户数据安全的重要组成部分。然而,出于一些原因,网站管理员可能需要替换服务器的SSL证书。替换SSL证书可能会对网站的运行和安全产生一些影响。本文旨在介绍替换服务器SSL证书的影响和相关注意事项,帮助网站管理员更好地…...
java中可变参数和简单游戏
可变参数: 就是一种特殊形参,定义在方法,构造器的形参列表中,格式是:数据类型...参数名称 可变参数的好处: 灵活的接收数据 特点:可以不传数据给它,可以传一个数据或者多个数据给它…...

软考高级架构师:TCP/IP 协议 和 OSI 七层模型
一、AI 讲解 TCP/IP 协议族是一组计算机网络通信协议的集合,其中TCP和IP是两个核心协议。TCP/IP 协议族通常被用来参照互联网的基础通信架构。与之相对的OSI七层模型,是一个更为理论化的网络通信模型,它将网络通信分为七个层次。 TCP/IP 与…...

【微服务】------常见模型的分析与比较
DDD 分层架构 整洁架构 整洁架构又名“洋葱架构”。为什么叫它洋葱架构?看看下面这张图你就明白了。整洁架构的层就像洋葱片一样,它体现了分层的设计思想。 整洁架构最主要的原则是依赖原则,它定义了各层的依赖关系,越往里依赖越…...
C#实现HTTP上传文件的方法
/// <summary> /// Http上传文件 /// </summary> public static string HttpUploadFile(string url, string path) {// 设置参数HttpWebRequest request WebRequest.Create(url) as HttpWebRequest;CookieContainer cookieContainer new CookieContainer();reque…...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...
AtCoder 第409场初级竞赛 A~E题解
A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

Python爬虫(一):爬虫伪装
一、网站防爬机制概述 在当今互联网环境中,具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类: 身份验证机制:直接将未经授权的爬虫阻挡在外反爬技术体系:通过各种技术手段增加爬虫获取数据的难度…...
工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配
AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...
【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分
一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...

蓝桥杯3498 01串的熵
问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798, 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...

GC1808高性能24位立体声音频ADC芯片解析
1. 芯片概述 GC1808是一款24位立体声音频模数转换器(ADC),支持8kHz~96kHz采样率,集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器,适用于高保真音频采集场景。 2. 核心特性 高精度:24位分辨率,…...
Angular微前端架构:Module Federation + ngx-build-plus (Webpack)
以下是一个完整的 Angular 微前端示例,其中使用的是 Module Federation 和 npx-build-plus 实现了主应用(Shell)与子应用(Remote)的集成。 🛠️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...
【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制
使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下,限制某个 IP 的访问频率是非常重要的,可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案,使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...