我正在读一本书,说MAC地址(物理地址)会改变每一跳,但IP地址(逻辑地址)将保持相同的图像。 请帮我理解一下。 谢谢

请记住,mac地址只在本地有意义。
当始发站(站A)发送一个数据包(到站z可以说)时,它查看Z的IP地址A的自己的IP地址和A的networking掩码。 一旦确定Z不在本地子网中,它就会在其路由表中查看是否可以访问Z所在的networking。 大多数服务器都会有一个默认的路由,但可能有多条路由,可以静态configuration,也可以dynamic学习。
一旦A在其路由表中findZ的子网,它就会执行一个可以到达Z的网关(g1)的IP地址的ARP。A现在具有g1的MAC地址。 它把帧放在networking上,A的源IP,z的目的IP,A的源MAC地址,但是g1的目的MAC地址。 这是如何到达网关。 (IP地址永远不会被触摸)
所以,现在这个框架已经到了g1。 网关重复这个过程,看看Z的子网是否是本地连接的。 如果是这样,它是Z的MAC地址的ARP。 一旦有了,它会发送带有A的源IP,Z的目标IP,网关的出口接口源MAC地址的帧,但这次是Z的目的地MAC地址。
它不是本地的,还有另外一个路由器,那么网关会把g2的ip包起来,得到它的mac地址。 然后它将再次发送帧,这次是A的源IP,Z的目标IP,g1的出口接口的源MAC,以及g2的入口接口的目的MAC地址。 这一直在发生,直到数据包到达目的地。
基本上,源MAC地址不断变化,但是来自最后一个发送帧的设备,并且目的地MAC地址不断变化,而是下一个发送帧的设备,直到它最终成为实际的站点Z.
而且,这只是在以太网世界。 数据包也可以在不同的物理介质上传输,比如T1或者SONET,它们的工作方式与以太网不同,根本没有MAC地址。 (尽pipe可能有相当于这种媒介的东西)
为了增强可pipe理性和互操作性,networking协议分层组织(您可能听说过“networking协议栈”或“networking协议协议栈”)。 这种分层方法的参考模型是OSI模型 :
对于每一层,都有一个协议来定义同一层上的本地和远程组件之间的通信,每个组件只定义/实现与其相邻组件(上下文)的接口。
以太网中的通信 (第2层)使用MAC地址来标识以太网帧的源和目的地。 连接到以太网的每个接口都会收到所有帧,但只处理发送到其自己的MAC地址( CSMA / CD )的那些帧。 以太网级别的通信不能超出广播域 ,因为MAC地址只能在该网段内解决 。
当你想在你的以太网之外寻址一个主机时,你不能parsing它的MAC地址,所以你在协议栈(第3层)上升了一层,并使用不同的寻址机制(IP)。 互联网协议检查目的地是否在其自己的子网内 ,如果不是,则将其发送到路由器 。 如果目的networking(如192.168.23.0/24)不在作为默认网关的主机路由表中 ,则不存在,否则由相应路由的网关地址标识该路由器。
现在发生的事情是,发送主机在源IP地址中创build自己的地址(例如192.168.10.10),并在目标字段中创build目标地址(192.168.23.13),并将其传递到以太网层。 在那里,数据包被封装在以太网帧中,发送接口自己的MAC地址在源字段中, 路由器的 MAC地址在目标字段中。
在路由器的以太网接口上,帧被重新组装成一个IP包,并传递到IP层。 路由器从目的地的IP地址看到数据包没有被发送到路由器本身,所以它根据自己的路由表传递数据包。 然后,数据包被传递到与下一个路由器地址相关的接口,并重新封装在以太网帧中,但是这次在源字段中使用第一个路由器的 MAC地址,在目标字段中使用第二个路由器的 MAC地址。
这个过程对于数据包在到达目的地的path上的每个以太网段重复进行。
当IP数据包到达路由器进行转发时,会将其封装在数据链路层帧(通常是以太网帧)中。 就以太网而言,路由器的接口是帧的最终目的地,路由器接收和“消耗”帧。
路由决策完成后,IP数据包准备好发出,路由器重新封装成一个新的以太网帧。 显然,这个新的帧将具有与以前不同的源和目的地MAC地址。
您可以将整个stream程想象成一个更大的以太网信封中从路由器传送到路由器的IP信封。 以太网信封被每个路由器撕开,路由器读取IP信封上的目的地地址以做出路由决定(即,确定下一个路由器中继信封),并且在将IP信封重新打包成新的以太网信封之前传递它:

(链接从http://www.chipkin.com/newsletter/october-2009-newsletter/ )