关于MAC地址和IP地址在传输过程中变与不变的问题:

  结论:MAC地址在同一个广播域传输过程中是不变的,在跨越广播域的时候会发生改变的;而IP地址在传输过程中是不会改变的(除NAT的时候),总结为 路由转发MAC不变,IP变。

我们知道的几个概念:

  首先我们要知道,MAC地址是用于同意物理或逻辑第2层网络上的设备间进行通信的;

  而第三层地址(IP地址)是可以在多个网络设备之间通信的。

下面我们来分析一下:

  MAC地址是在同一个广播域有效的,那么去了另外一个广播域(网段)MAC地址肯定要改变的;

  在同一个广播域中数据帧的mac地址是不会变的,因为所有交换机应该都知道该广播域中的所有主机的MAC地址(如果不知道会通过被动广播的方式来学习到)。既然知道所有的MAC地址,那么当我交换机收到数据帧的时候就看一下目标MAC地址,然后对照一下MAC地址表,从对应的接口仍出去就好了。

  IP地址是在整个网络中有效的,整个Internet网络就相当于是一个大的地图,同样知道所有的IP地址如何到达,那么在传输过程中源ip和目的ip也是不会改变的。当路由器收到数据包的时候,检查数据包的目的IP地址,然后查找路由表(路由转发表),选择合适的接口发出去。

图中A-R4-R2-B 假设有数据帧X,传输过程中:

  A到R4:MAC地址(存在的话)源地址是A,目的地址是R4;

  R4到R2:MAC地址(存在的话)源地址是R4,目的地址是R2;

  R2到B:MAC地址(存在的话)源地址是R2,目的地址是B;

在没有经过NAT情况下,源IP地址和目的IP地址在整个传输过程是不能改变的。

  A到R4:IP地址 源地址是A,目的地址是R4;

  R4到R2:IP地址 源地址是A,目的地址是R4;

  R2到B:IP地址 源地址是A,目的地址是R4;

网络-数据包在路由转发过程中MAC地址和IP地址,变与不变的更多相关文章

  1. 转:数据包经由路由转发时源、目的IP地址及MAC地址变化情况

    数据包经由路由转发时源.目的IP地址及MAC地址变化情况.  IP数据包经由路由转发的时候源ip,目的ip,源MAC,目的mac是否发生改变,如何改变?   A—–(B1-B2)—–(C1-C2)—— ...

  2. 【VS开发】使用WinPcap编程(4)——把网络数据包存储到一个文件中

    这里用到的数据结构是pcap_dumper_t,这也是一个相当于文件描述符的东西,我们在用的时候先指定pcap_dumper_t *dumpfp; 使用两个函数来存储网络数据,一个是pcap_dump ...

  3. lwip:网络数据包读取和解析过程

    1. 程序的某处(poll or interrupt)在有数据可读时调用ethernetif_input,该函数依次调用以下函数: 1.1 low_level_input(),将网络数据读入内存: 1 ...

  4. Linux 中的网络数据包捕获

    Linux 中的网络数据包捕获 Ashish Chaurasia, 工程师 简介: 本教程介绍了捕获和操纵数据包的不同机制.安全应用程序,如 VPN.防火墙和嗅探器,以及网络应用程序,如路由程序,都依 ...

  5. sk_buff封装和解封装网络数据包的过程详解

    转自:http://www.2cto.com/os/201502/376226.html 可以说sk_buff结构体是Linux网络协议栈的核心中的核心,几乎所有的操作都是围绕sk_buff这个结构体 ...

  6. sk_buff封装和解封装网络数据包的过程详解(转载)

    http://dog250.blog.51cto.com/2466061/1612791 可以说sk_buff结构体是Linux网络协议栈的核心中的核心,几乎所有的操作都是围绕sk_buff这个结构体 ...

  7. Linux网络 - 数据包的接收过程【转】

    转自:https://segmentfault.com/a/1190000008836467 本文将介绍在Linux系统中,数据包是如何一步一步从网卡传到进程手中的. 如果英文没有问题,强烈建议阅读后 ...

  8. Linux内核中网络数据包的接收-第一部分 概念和框架

    与网络数据包的发送不同,网络收包是异步的的.由于你不确定谁会在什么时候突然发一个网络包给你.因此这个网络收包逻辑事实上包括两件事:1.数据包到来后的通知2.收到通知并从数据包中获取数据这两件事发生在协 ...

  9. [转]Linux网络 - 数据包的接收过程

    转, 原文: https://segmentfault.com/a/1190000008836467 ------------------------------------------------- ...

随机推荐

  1. T-sql语句

    在用代码编辑数据库时,首先要启动WAMPSERVER 1.创建表 create table Car ( Code varchar(50) primary key , Name varchar(50) ...

  2. iOS: 枚举类型 enum,NS_ENUM,NS_OPTIONS

    一般情况下,我们采用C风格的enum关键字可以定义枚举类型. enum{ UIViewAnimationTransitionNone, UIViewAnimationTransitionFlipFro ...

  3. keil(持续更新)

    1函数格式提示 2  cording时有警告和错误提示 3 类的成员 提示

  4. (转)html5开发之viewport使用

    原文:http://www.php100.com/html/webkaifa/HTML5/2012/0831/10979.html 随着高端手机(Andriod,Iphone,Ipod,WinPhon ...

  5. hdu 2091

    PS:PE了两次....又是这种奇怪的输出格式....两个三角形直接有空行.. 代码: #include "stdio.h" void ou(int n,char a); void ...

  6. javascript笔记2-引用类型

    引用类型是一种数据结构,用于将数据和功能组织在一起.它描述的是一类对象所具有的属性和方法.Object是一个基础类型,Array是数组类型,Date是日期类型,RegExp是正则表达式类型,等. Ob ...

  7. UITouch的用法

    UITouch一般无法直接获取,是通过UIView的touchesBegan等函数获得. //这四个方法是UIResponder中得方法 // Generally, all responders wh ...

  8. linux命令:rm

    1.介绍: rm用来删除文件或者目录,对于链接文件,只删除了链接,不删除源文件.rm是一个非常危险的命令,像rm -rf /这个命令运行后,后果不堪设想. 2.命令格式: rm [选项] 文件/目录 ...

  9. 关于OC队列

    GCD中有三种队列类型: The main queue: 与主线程功能相同.实际上,提交至main queue的任务会在主线程中执行.main queue可以调用dispatch_get_main_q ...

  10. 决策树模型 ID3/C4.5/CART算法比较

    决策树模型在监督学习中非常常见,可用于分类(二分类.多分类)和回归.虽然将多棵弱决策树的Bagging.Random Forest.Boosting等tree ensembel 模型更为常见,但是“完 ...