我读过一本书,上面说 MAC 地址(物理地址)每次跳转都会改变,但 IP 地址(逻辑地址)在图中保持不变。请帮我理解一下。谢谢
答案1
请记住,mac 地址仅具有本地意义。
当始发站(站 A)要传输数据包(假设要传输到站 Z)时,它会查看 Z 的 IP 地址、A 自己的 IP 地址和 A 的网络掩码。一旦确定 Z 不在本地子网上,它就会查看其路由表以查看是否可以到达 Z 所在的网络。大多数服务器都会为此设置一个默认路由,但可能会有多个路由,这些路由要么是静态配置的,要么是动态学习的。
一旦 A 在其路由表中找到 Z 的子网,它就会对可以到达 Z 的网关 (g1) 的 IP 地址执行 arp。A 现在拥有 g1 的 mac 地址。它将帧放在网络上,其中包含 A 的源 IP、z 的目标 IP、A 的源 mac 地址,但包含 g1 的目标 mac 地址。这就是它到达网关的方式。(IP 地址永远不会被触及)
因此,现在该帧已到达 g1。网关重复该过程,查看 Z 的子网是否本地连接。如果是,则它对 Z 的 mac 地址进行 arp。一旦找到该地址,它就会发送帧,其中包含 A 的源 IP、Z 的目标 IP、网关的出口接口源 mac 地址,但这次是 Z 的目标 mac 地址。
如果 Z 不在本地,并且有另一个路由器,则网关将对 g2 的 IP 执行 arp,并获取其 mac 地址。然后它将再次发送帧,这次使用 A 的源 IP、Z 的目标 IP、g1 的出口接口的源 mac 和 g2 的入口接口的目标 mac 地址。这种情况一直发生,直到数据包到达目的地。
基本上,源 mac 地址一直在变化,但是来自传输帧的最后一个设备,而目标 mac 地址一直在变化,但是是帧要发送到的下一个设备,直到最终成为实际的 Z 站。
此外,这只适用于全以太网世界。数据包还可以通过不同的物理介质传输,例如 T1 或 sonet,它们的工作方式与以太网不同,并且根本没有 mac 地址。(不过,该介质可能具有等效的东西)
答案2
为了提高可管理性和互操作性,网络协议被分层组织(您可能听说过“网络堆栈”或“网络协议堆栈”这个术语)。这种分层方法的参考模型是OSI 模型:
- 物理层(电缆、适配器......)
- 数据链路层(以太网)
- 网络层(IP)
- 传输层(TCP、UDP)
- 会话层
- 表示层
- 应用层
对于每一层,都有一个协议来定义同一层上的本地和远程组件之间的通信,并且每个组件仅定义/实现与其相邻组件(上方和下方)的接口。
在以太网(第 2 层)用途MAC 地址用于识别以太网帧连接到以太网的每个接口都会接收所有帧,但只处理发送到其自身 MAC 地址的帧(载波侦听/载波侦听)。以太网层通信不能超出广播域,因为 MAC 地址只能解决在该网络部分内。
当你想寻址以太网外的主机时,你无法解析其 MAC 地址,因此你需要在协议堆栈(第 3 层)中上移一层并使用不同的寻址机制 (IP)。互联网协议检查目的地是否在其自身范围内子网如果不是,则将其发送到路由器. 如果目标网络(例如 192.168.23.0/24)不存在于主机的路由表这就是默认网关,否则就是相应路由的网关地址所标识的路由器。
现在发生的情况是,发送主机在源字段中创建 IP 数据包,其源地址为自己的地址(例如 192.168.10.10),目标地址为目标地址(192.168.23.13),并将其传递到以太网层。在那里,数据包被封装在以太网帧中,源字段中是发送接口自己的 MAC 地址,路由器的目标字段中的 MAC 地址。
在路由器的以太网接口上,帧被重新组装成 IP 数据包并向上传递到 IP 层。路由器从目标 IP 地址看到数据包不是发送到路由器本身,因此它根据自己的路由表传递数据包。然后,数据包被传递到与下一个路由器的地址关联的接口,并重新封装在以太网帧中,但这次使用第一个路由器源字段中的 MAC 地址和第二个路由器目标字段中的 MAC 地址。
在数据包到达目的地的过程中,它会对经过的每个以太网段重复此过程。
答案3
当 IP 数据包到达路由器进行转发时,它会被封装在数据链路层帧中 - 通常是以太网帧。就以太网而言,路由器的接口是该帧的最终目的地,路由器接收并“使用”该帧。
路由决策完成后,IP 数据包准备发送,路由器将其重新封装为新的以太网帧。新帧的源 MAC 地址和目标 MAC 地址显然与之前不同。
您可以将整个过程想象成 IP 信封在更大的以太网信封中从一个路由器传递到另一个路由器。以太网信封被每个路由器撕开,路由器读取 IP 信封上的目标地址以做出路由决策(即确定下一个将信封中继到的路由器),然后将 IP 信封重新打包成新的以太网信封,然后再传递:
(链接自http://www.chipkin.com/newsletter/october-2009-newsletter/)