ip与mac-数据包传输过程学习

你管这破玩意叫网络?

内容来源于飞天闪客,以前没有学习过网络的相关基础知识,只会去瞎设置,现在终于是弄明白了。

多台电脑之间想要通信,可以直接通过一条网线进行连接。但是随着网线的增加,这个就会比较繁杂了。
在这里插入图片描述
所以就有了集线器这样的设备。
在这里插入图片描述
集线器会将包不做任何处理的分给每个设备。这样的话就不知道包是谁发给谁的了,但是每个设备都有自己的mac物理地址,数据中再加上从哪个mac来,发送到目标mac地址就好了。
在这里插入图片描述
当然,这个时候,其他电脑其实还是可以看到不属于自己的包的数据的内容,所以就有了新的需求:将包只发给一个设备就好了——更加智能的集线器:交换机。
在这里插入图片描述
交换机内部维护着一张mac地址表,记录了每个设备的mac地址和对应的交换机端口号。这个时候包在传递的时候就会根据包信息,将包数据传输给对应的端口。
但是最开始的时候mac表是空的,是怎么样一点点维护起来的呢?
在这里插入图片描述
一开始的时候交换机就是一个集线器,不过它知道学习,把流经自己的数据包携带的信息记录下来了,然后就学习到对应的mac映射表:
在这里插入图片描述
这基本就是现在常用的单交换机的形式,但是交换机的端口也不够用了怎么办呢?于是就有了多个交换机之间的通信。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这个时候一个端口对应的mac地址也就会变多了,所以要维护的mac地址表也就会逐渐增加,此时应该怎么办呢?
那这时就又有了新的设备了,在交换机与交换机之间连接一个新的设备。没错,就是大家非常常见的路由器了。
在这里插入图片描述
它的功能就是作为一台独立的mac地址设备,将数据包作一次性转发。路由器每个端口都是由独立的mac地址。
左边的端口6对应路由器的mac地址,那问题是端口6的数据怎么先发给路由器的呢(原本是要发给E,F,G,H这四个设备的)?
此时就引入了ip地址的概念了192.168.0.1。此时我们再来看完整的发布过程:
在这里插入图片描述
一包数据带有对应的源mac,目标mac。源ip,目标ip等信息。
a与b通信时,直接可以通过交换机获得信息,通过源mac和目标mac就可以传递。
a与c通信时,a需要先把数据发给路由器,然后再转交给c。
a要给c,过程中先给到路由器,所以数据链路层的目标mac要是路由器的mac地址,网络层的ip必须时a的ip到c的ip。
先看传给路由器的时候,数据是:
在这里插入图片描述
由于数据先给路由器,此时的目标mac和目标ip对应如上所示。接下来路由器给到c的时候,有个神奇的过程,它会把目标mac自动变成目标ip对应的mac地址。
在这里插入图片描述
那么问题就来了,如果a给c发送数据,怎么知道需要路由器转发数据呢?
这里就涉及到子网的概念,如果源ip与目标ip再同一个子网,直接将包通过交换机发出去。如果源ip与目标ip不在同一个子网,就会交给路由器去处理。是否在同一个子网又是通过掩码去判断的,也就是说192.68.0开头的就是同一个子网,否则就不是同一个子网。
掩码常用255.255.255.0,将原ip与掩码进行与运算,相等就是同一个子网。计算结果如下:
在这里插入图片描述
第二个问题,a怎么知道哪个是路由器的呢?
有一个默认网关的概念,默认网关就是一个ip地址。当遇到不是在同一个子网的电脑时,先把包发给默认网关对应的ip地址,所以就会先给路由器的ip地址。
在这里插入图片描述
还有一个问题,数据包在发送时是需要mac地址和ip地址的,现在虽然有了ip的相关数据了,但是没有mac地址。

此时是一个叫ARP协议的东西,这个机制会把ip与mac地址进行对应,同样,需要先进行一次映射。这个协议是广泛使用的,交换机和路由器都会要通过ARP协议维护一个ip与mac的映射表。
在这里插入图片描述
对于交换机来说,还有一个路由表,对应的是ip和端口,把目标ip范围得到,查表得到端口。当然也是存在ARP协议的,将mac地址获取到。
在这里插入图片描述
最后我们来完整看一下数据包的传输过程。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
涉及到的三张表分别是mac地址表(交换机)-映射mac地址和端口,路由表-映射ip和端口,arp缓存表(电脑和路由器中都有)-映射ip和mac地址

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

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

相关文章

数值分析知识重构

数值分析知识重构 一 Question 请构造一下数值分析中的误差概念以及每一个具体数值方法的误差是如何估计的? 二 Question 已知 n 1 n1 n1个数据点 ( x i , y i ) , i 0 , 1 , ⋯ , n (x_i,y_i),i0,1,\cdots,n (xi​,yi​),i0,1,⋯,n,请使用多种方法建立数据之间…

使用 Qt QGraphicsView/QGraphicsScene 绘制色轮

使用 Qt QGraphicsView/QGraphicsScene 绘制色轮 本文介绍如何在 Qt 中利用 QGraphicsView 和 QGraphicsScene 实现基础圆形绘制,以及进阶的色轮(Color Wheel)效果。 色轮是色彩选择器的常见控件,广泛应用于图形设计、绘画和 UI …

移除链表元素数据结构oj题(力扣题206)

目录 题目描述: 题目解读(分析) 解决代码 题目描述: 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val val 的节点,并返回 新的头节点 。 题目解读(分析&#…

GLPK(GNU线性规划工具包)中建模语言MathProg的使用

GNU MathProg是一种用于描述线性数学规划模型的建模语言。用GNU MathProg语言编写的模型描述由一组语句和数据块组成。 在MathProg中,模型以集合、参数、变量、约束和目标(sets, parameters, variables, constraints, objectives称为模型对象)的形式进行描述。 在Ma…

《Python星球日记》 第77天:模型部署与总结

名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 一、模型部署技术1. 模型文件导出不同模型格式对比2. 使用Flask构建RESTful API3. 使用FastAPI构建高性能API4. 部署优化与最佳实践二、部署架构…

【JavaWeb】MySQL(准备篇)

1 MySQL安装 1.1 解压 下载完成后我们得到的是一个压缩包(所有文件均在文末安装包中),将其解压,我们就可以得到MySQL 8.0.34 的软件本体了(就是一个文件夹),我们可以把它放在你想安装的位置 。 1.2 配置 1.2.1 配置…

国产数据库工具突围:SQLynx如何解决Navicat的三大痛点?深度体验报告

引言:Navicat的"中国困境" 当开发者面对达梦数据库的存储过程调试,或是在人大金仓中处理复杂查询时,Navicat突然变得力不从心——这不是个例。 真实痛点:某政务系统迁移至OceanBase后,开发团队发现Navicat无…

ETL数据集成产品选型需要关注哪些方面?

ETL(Extract,Transform,Load)工具作为数据仓库和数据分析流程中的关键环节,其选型对于企业的数据战略实施有着深远的影响。谷云科技在 ETL 领域耕耘多年,通过自身产品的实践应用,对 ETL 产品选型…

数据结构实验10.1:内部排序的基本运算

文章目录 一,实验目的二,实验内容1. 数据生成与初始化2. 排序算法实现(1)直接插入排序(2)二分插入排序(3)希尔排序(4)冒泡排序(5)快速…

从秒开到丝滑体验!WebAssembly助力ZKmall商城重构 B2B2C 商城性能基线

在 B2B2C 电商领域,用户对页面加载速度与交互流畅度的要求日益严苛。传统 Web 技术在处理复杂业务逻辑、海量数据渲染时,常出现卡顿、延迟等问题,导致用户流失。ZKmall 商城创新性地引入 WebAssembly(简称 Wasm)技术&a…

FD+Mysql的Insert时的字段赋值乱码问题

方法一 FDQuery4.SQL.Text : INSERT INTO 信息表 (中心, 分组) values(:中心,:分组); FDQuery4.Params[0].DataType : ftWideString; //必须加这个数据类型的定义,否则会有乱码 FDQuery4.Params[1].DataType : ftWideString; //ftstring就不行,必须是…

vue2.0 组件生命周期

个人简介 👨‍💻‍个人主页: 魔术师 📖学习方向: 主攻前端方向,正逐渐往全栈发展 🚴个人状态: 研发工程师,现效力于政务服务网事业 🇨🇳人生格言&…

使用GmSSL v3.1.1实现SM2证书认证

1、首先使用gmssl命令生成根证书、客户端公私钥,然后使用根证书签发客户端证书; 2、然后编写代码完成认证功能,使用根证书验证客户端证书是否由自己签发,然后使用客户端证书验证客户端私钥对随机数的签名是否正确。 第一部分生成根…

升级mysql (rpm安装)

#备份以防万一 备份配置文件: /etc/my.cnf.d/server.cnf 备份数据: mysqldump -u your_username -p --all-databases > all_databases.sql #停止 systemctl stop mysql #卸载旧版 yum remove mariadb #安装新版( 通过yum安装报错,死活安装不了,只能rpm安装) 下载地址…

深入理解pip:Python包管理的核心工具与实战指南

# 深入理解pip:Python包管理的核心工具与实战指南 在Python开发中,第三方库是提升效率的关键。而pip作为Python官方的包管理工具,承担着安装、卸载、升级和管理库的重要职责。本文将全面解析pip的核心命令,结合实例演示用法&#…

Linux配置SSH密钥认证

介绍 配置SS秘钥认证后,可以通过shell脚本免密删除文件或执行命令。 # 生成密钥对(如果还没有) ssh-keygen -t rsa# 将公钥复制到服务器 ssh-copy-id "$remote_user$remote_host"

python打卡第30天

知识点回顾: 一,导入官方库的三种手段。 使用 import 直接导入整个模块 import module_name 使用 from ... import ... 导入特定功能 from module_name import function_name 使用 as 关键字重命名模块或功能 import module_name as alias # 或 from mod…

Java基础(网络编程)

一、概述 目的:网络通信: 1、设备和设备 2、进程和进程 1)不同设备之间 2)本地设备之间 需要解决的问题: 如何准确地发送到对方的主机 - IP地址 - 唯一的定位网络中的一台主机 如何准确的发送到对方主机的进程 -…

第二届parloo杯的RSA_Quartic_Quandary

(害,还是太菜了,上去秒了一道题之后就动不了了,今晚做个记录,一点点的往回拾起吧) # from Crypto.Util.number import getPrime, bytes_to_long # import math # # FLAG b************** # # # def gene…

RLᵛ_ Better Test-Time Scaling by Unifying LLM Reasoners With Verifiers

RLᵛ: Better Test-Time Scaling by Unifying LLM Reasoners With Verifiers 在人工智能领域,大语言模型(LLM)的推理能力提升一直是研究热点。今天要解读的论文提出了一种全新的强化学习框架RLᵛ,通过融合推理与验证能力&#xf…