【网络】数据在同网段和跨网段通信流程

在这里插入图片描述

情景一:同一广播域内,两台主机通信过程:
当NO要和N1通信时,假如N0知道N1的IP但却不知道它的MAC地址,那NO就会发送一个ARP的广播请求<1>(里面源IP是NO 目标IP是N1 源MAC是N0 目标MAC是12个F)给同一广播域中的所有成员,当交换机SW0从自己的1接口上收到这个广播包,然后它会读取这个帧的源MAC地址和目标MAC地址,由于交换机SW0刚启动加电时,它的MAC表为空的。所以它会把NO的MAC地址与之相对应的接口1放到一张表里,这张表就是MAC地址表<2>。然后他再从别的接口广播这个数据帧<3>,当别的主机收到这个广播时,查看目标IP不是自己的,就会丢弃此包。如果N1接收到这个数据帧,它检查目标IP和这个的IP是一样的,就会回应这个ARP请求(单播)<5>,把自己的IP和MAC封装成源IP和源MAC,N0的IP和N0的MAC地址为目标IP与目标MAC,并记录NO的MAC与IP,放进自己的ARP缓存表中<4>。此时,这个应答包经过交换机SWO时,它又会检查源MAC、目标MAC,把N1的MAC和自己接口2放进MAC地址表中<6>,再查看自己的MAC地址表,发现存在目标MAC与自己的1接口对应(由于刚开始有记录过N0的MAC),那它就会直接把这个应答包从接口1送出去了<7>。主机N0收到这个包后发现目标MAC是自己,就会处理这个包。并把N1的MAC与IP放进自己的ARP缓存表中<8>。这时主机N0就知道N1的MAC地址了,以后要发送数据,就直接把N1的IP与MAC封装进帧中进行点对点的发送了<9>。

情景二:跨路由,两台主机的通信过程:
当NO要和N2通信时,此时NO会检查N2的IP地址跟自己是否处在同一网段<0>,由于N2和自己处在不同网段,所以,N0会把数据包发给它的网关<1>,也就是R0上的e0/0接口了。源IP和源MAC地址是N0自己的,目标IP是N2的,目标MAC是R0上接口e0/0的(如果N0不知道e0/0的MAC,就会跟情景一相似,发个ARP广播来得到e0/0的MAC地址)。当这个数据包到达R0时,路由器R0会查看目标IP的是否是自己,由于目标不是自己,所以,会查看自己的路由表<2>,找出到达N2网段的路由;如果没有相关条目,就直接丢弃。当查看路由表后发现到达N2网段的出接口是e0/1。于是,把数据包转到e0/1接口上,再由接口e0/1传给R1<3>。这个过程,数据包的源IP是N0 源MAC是e0/1 目标IP是N2 目标MAC是R1的e0/1接口IP 。

当R1收到这个数据包后,同样也要检查包的目标IP是否是自己,它会主动查找自己的路由表<4>,发现目标IP跟自己e0/0接口处在同一网段,于是就把包传到e0/0接口上去发给N2<5>(假如R1上的ARP缓存表中没有N2的MAC,则接口e0/0会发送一个ARP广播给跟它相连的广播域中;这个ARP广播包的源IP是接口e0/0的IP 源MAC也是e0/0的MAC 目标IP是N2 目标MAC为12个F),假如N2的MAC地址已经在R1的ARP缓存中了,那就会直接把数据包封装成:源IP为N0 源MAC为R1的e0/0 目标IP为N2 目标MAC为N2了。

到了这里,包的跨路由传输就会结束了,当包到达N2,做反向操作即可把包发给N0了。

总结:

  • 同一广播域中,数据包的源/目标IP;源/目标MAC都是真实的两台主机上的IP与MAC地址。
  • 跨路由中,数据包的源/目标IP始终不会发生变化,但源/目标MAC会根据所经过的路由接口不同而发生相应变化。

扩展解释:
1.为什么跨网段需要修改源mac地址?
需要修改源MAC地址是因为在跨路由时,数据包需要经过不同的网络接口进行转发。每个网络接口都有自己的MAC地址,用于在局域网中唯一标识设备。当数据包从一个网络接口转发到另一个网络接口时,需要将源MAC地址修改为当前路由接口的MAC地址,以确保数据包能够正确到达目标主机。

如果不修改源MAC地址,而是保持不变,那么数据包在经过路由器时,目标主机可能无法正确识别数据包的来源,因为目标主机可能不在同一个局域网中,无法直接与源主机通信。通过修改源MAC地址,可以使数据包在跨越不同网络时,能够正确地被目标主机接收和处理。

另外,修改源MAC地址还可以提高网络安全性。通过修改源MAC地址,可以隐藏源主机的真实身份,防止攻击者通过分析MAC地址来追踪源主机的位置或进行其他恶意行为。

因此,为了确保数据包能够正确到达目标主机,并提高网络安全性,需要在跨路由时修改源MAC地址。

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

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

相关文章

VUE中常用的4种高级方法

1. provide/inject provide/inject 是 Vue.js 中用于跨组件传递数据的一种高级技术&#xff0c;它可以将数据注入到一个组件中&#xff0c;然后让它的所有子孙组件都可以访问到这个数据。通常情况下&#xff0c;我们在父组件中使用 provide 来提供数据&#xff0c;然后在子孙组…

Learn OpenGL 08 颜色+基础光照+材质+光照贴图

我们在现实生活中看到某一物体的颜色并不是这个物体真正拥有的颜色&#xff0c;而是它所反射的(Reflected)颜色。物体的颜色为物体从一个光源反射各个颜色分量的大小。 创建光照场景 首先需要创建一个光源&#xff0c;因为我们以及有一个立方体数据&#xff0c;我们只需要进行…

LEETCODE3

法一:记忆化递归 int climbStairsRecursive(int n, int* memo) {if (n < 2) {return n;}if (memo[n] > 0) {return memo[n];}memo[n] climbStairsRecursive(n - 1, memo) climbStairsRecursive(n - 2, memo);return memo[n]; }int climbStairs(int n) {int* memo (in…

代码随想录训练营Day21:● 530.二叉搜索树的最小绝对差 ● 501.二叉搜索树中的众数 ● 236. 二叉树的最近公共祖先

530.二叉搜索树的最小绝对差 题目链接 https://leetcode.cn/problems/minimum-absolute-difference-in-bst/description/ 题目描述 思路 遇到在二叉搜索树上求什么最值&#xff0c;求差值之类的&#xff0c;都要思考一下二叉搜索树可是有序的&#xff0c;要利用好这一特点。…

【More Effective C++】条款24:了解虚函数的成本

每个包含了虚函数的class会包含一个虚函数表&#xff0c;对于C1和C2的虚函数表的结构如下&#xff1a; 非虚函数不会加入到虚函数表中子类中如果对虚函数重写&#xff0c;虚函数表中会覆盖父类的虚函数 C1::~C1()C1::~f1()C1::~f2()C1::~f3() C2::~C2()C2::~f1()C1::~f2()C1:…

Java 拦截器Interceptor详解

1、拦截器概念 先看一下web请求的流程。 &#xff08;1&#xff09;、当浏览器发送一个请求时&#xff0c;请求到达tomcat容器&#xff0c;tomcat容器会区分静态还是动态资源。 &#xff08;2&#xff09;、动态请求会先经过过滤器链filter&#xff0c;直到全部过滤完成之后&am…

MySQL 事务的原理以及长事务的预防和处置

transaction_isolation 隔离级别 读未提交 读提交 视图是在每个 SQL 语句开始执行的时候创建的 可重复读 视图是在事务启动时创建的&#xff0c;整个事务存在期间都用这个视图 串行化…

Claude3系统解读与使用测评

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

Character类中的方法总结

Character.isDigit(char ch): 检查指定的字符是否是一个数字。 Character.isWhitespace(char ch): 检查指定的字符是否是一个空白字符。空白字符包括空格、制表符、换页符等。 Character.isUpperCase(char ch): 检查指定的字符是否是大写字母。 Character.isLowerCase(char ch)…

3/12/24交换排序、插入排序、选择排序、归并排序

目录 交换排序 冒泡排序 快速排序 插入排序 直接插入排序 选择排序 简单选择排序 堆排序 归并排序 各种排序的时间复杂度、空间复杂度、稳定性和复杂度 快排真题2016 选排真题2022 排序算法分为交换类排序、插入类排序、选择类排序、归并类排序。 交换排序 交换排…

2024基于协同过滤算法springboot微信订餐小程序项目

项目介绍 基于springboot开发的订餐小程序,用户在微信小程序里面进行注册登录,点餐,收藏,评论等,管理员在后台网页端进行对菜品,分类,订单,用户,角色,评论等进行管理,小程序界面通过协同过滤算法给用户推荐菜品 技术栈 后端:springboot+JPA+Mysql8+redis+maven+…

Django 学习笔记(Day1)

「写在前面」 本文为千锋教育 Django 教程的学习笔记。本着自己学习、分享他人的态度&#xff0c;分享学习笔记&#xff0c;希望能对大家有所帮助。 目录 0 课程介绍 1 Django 快速入门 1.1 Django 介绍 1.2 Django 安装 1.3 创建 Django 项目 1.4 运行 Django 项目 1.5 数据迁…

Linux-gdb调试

文章目录 前言查看&#xff08;显示&#xff09;源代码 list/l运行程序run/r打断点b查看断点删除断点打开/关闭断点逐过程 逐语句查看变量常显示continuefinishuntil修改指定变量退出gdb 前言 GDB&#xff0c;即GNU调试器&#xff08;GNU Debugger&#xff09;&#xff0c;是G…

命令行跑stanford-corenlp

在 https://nlp.stanford.edu/software/stanford-corenlp-4.5.6.zip 下载stanford-corenlp-4.5.6.zip 在 https://stanfordnlp.github.io/CoreNLP/human-languages.html 下载model的jar 然后stanford-corenlp-4.5.6.zip解压&#xff0c;把比如stanford-corenlp-4.5.6-models-…

细粒度IP定位参文27(HGNN):Identifying user geolocation(2022年)

[27] F. Zhou, T. Wang, T. Zhong, and G. Trajcevski, “Identifying user geolocation with hierarchical graph neural networks and explainable fusion,” Inf. Fusion, vol. 81, pp. 1–13, 2022. (用层次图、神经网络和可解释的融合来识别用户的地理定位) 论文地址:…

Matlab工具箱实现相机标定

Matlab工具箱实现张正友相机标定_分别使用蔡氏与张正友标定法完成标定,并与matlab工具箱及(外参)实测结果对照。结-CSDN博客 使用Matlab做相机标定&#xff08;获取相机的内外参数矩阵&#xff09;_matlab相机标定结束后如何显示图片的平移矩阵-CSDN博客 【一文弄懂】张正友标…

QML 控件添加键盘事件

在QML中&#xff0c;可以使用Keys类型来处理键盘事件。以下是一个简单的示例&#xff0c;演示如何在QML控件中添加键盘事件&#xff1a; import QtQuick 2.12 import QtQuick.Window 2.12Window {visible: truewidth: 640height: 480title: qsTr("Hello World")Recta…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的常见车型识别系统(Python+PySide6界面+训练代码)

摘要&#xff1a;本文深入探讨了如何应用深度学习技术开发一个先进的常见车型识别系统。该系统核心采用最新的YOLOv8算法&#xff0c;并与早期的YOLOv7、YOLOv6、YOLOv5等版本进行性能比较&#xff0c;主要评估指标包括mAP和F1 Score等。详细解析了YOLOv8的工作机制&#xff0c…

5.Java并发编程—JUC线程池架构

JUC线程池架构 在Java开发中&#xff0c;线程的创建和销毁对系统性能有一定的开销&#xff0c;需要JVM和操作系统的配合完成大量的工作。 JVM对线程的创建和销毁&#xff1a; 线程的创建需要JVM分配内存、初始化线程栈和线程上下文等资源&#xff0c;这些操作会带来一定的时间和…

【ARM架构】讲解

ARM ARM架构&#xff0c;全称为Advanced RISC Machine&#xff08;先进的精简指令集机器&#xff09;&#xff0c;原先称为Acorn RISC Machine&#xff0c;是一种基于精简指令集计算&#xff08;RISC&#xff09;的计算机处理器架构&#xff0c;它被广泛应用在移动设备如智能手…