关于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. c++形参和实参同名时,如何单步执行观察形参的变化。

    c++形参和实参同名时,如何单步执行观察形参的变化? 方法:当程序运行到函数中时,添加变量观察即可.

  2. unity3d基础02

    调试: 在MonoDevelop里可以断点调试,注意绑定unity进程 使用Debug.Log()打印信息 创建游戏对象: GameObject test = GameObject.CreatePri ...

  3. 针对电信乌龙事件的深度测试: 广州电信错误将深圳地区189的号码在3G升级4G申请时从广州网厅发货,造成深圳用户收到4G卡后无法激活,深圳电信找不到订单

    广州电信错误将深圳地区189的3G升级4G申请从中国电信广州网厅发货(智能卡号:8986 1114 9002 0851  742X S  电话号码 189),造成用户收到4G卡后无法激活,深圳电信找不 ...

  4. MouseJack:利用15美元的工具和15行代码控制无线鼠标和键盘

    Bastille的研究团队发现了一种针对蓝牙键盘鼠标的攻击,攻击者可以利用漏洞控制你的电脑操作.研究团队将此攻击命名为MouseJack. 七大厂商皆中招 软件工程师马克纽林说:“利用假冒的无线电脑鼠 ...

  5. PHP中的抽象类和接口

    PHP抽象类和抽象方法的应用 抽象类 接口 多态 抽象类是以特殊的类,接口是一种特殊的抽象类声明抽象类和接口,以及一些需要的技术抽象类:    什么是抽象方法?        定义:如果一个类中的方法 ...

  6. 2016年11-29 mysql数据库

    php搭建环境:WAMP APPSERVERLAM架构:linux系统,apache服务器管理软件,mysql数据库,php语言 php apache.net iisjava tomcat mysql ...

  7. iOS-MVC详解

    MVC与模板概念的理解 MVC(Model View Controller)模型-视图-控制器 MVC本来是存在于Deskt op程序中的,M是指数据模型,V是指用户界面,C则是控制器.使用MVC 的 ...

  8. js取配置文件内容

    使用 jQuery.i18n.properties 实现 Web 前端的国际化 http://www.ibm.com/developerworks/cn/web/1305_hezj_jqueryi18 ...

  9. 用 GitHub 来部署静态网页 ꒰・◡・๑꒱

    http://segmentfault.com/a/1190000002765287 在尝试过用 GitHub 部署静态 HTML 网页后,觉得其实挺容易的,这里简单说说如何用 GitHub 来完成部 ...

  10. andorid中Html.fromHtml方法

    在android中,有一个容易遗忘的Html.fromhtml方法,意思是可以将比如文本框中的字符串进行HTML格式化,支持的还是很多的, 但要注意的是要在string.xml中用<!--cda ...