13

据我所知,数据包经过的所有 MAC 地址都在数据包中。这是因为每个进入特定路径的数据包也应该以相似的路径返回。那么,如果服务器的路由器知道客户端的mac地址(全部),为什么服务器页面(如aspx)不能有这个信息?

请给个解释。(不要只是告诉我我错了)。

如果我理解正确,客户端会发送一个包含其 MAC 地址的数据包。当数据包通过代理(如客户端路由器)时,代理的地址也被添加到数据包中。等等。

以下是 Wikipedia 关于 TCP/IP 数据线层的片段:
http ://en.wikipedia.org/wiki/TCP/IP_model#Data_Link_Layer

数据链路层用于在同一链路上的两个不同主机的 Internet 层接口之间移动数据包。在给定链路上发送和接收数据包的过程既可以在网卡的软件设备驱动程序中进行控制,也可以在固件或专用芯片组中进行控制。这些将执行数据链路功能,例如添加数据包标头以准备传输,然后通过物理介质实际传输帧。TCP/IP 模型包括将 Internet 协议中使用的网络寻址方法转换为数据链路寻址的规范,例如媒体访问控制 (MAC),但是低于该级别的所有其他方面都隐含地假定存在于链路层中,但没有明确定义。

4

9 回答 9

25

实际上,存储在数据包中的 MAC 地址在数据包传输的每一跳中都会发生变化。

MAC 是媒体访问控制的简写,媒体是指本地通信媒体。虽然源和目标 IP 地址在整个旅程中保持不变(并用于长途路由决策),但源和目标 MAC 地址仅指示下一跳。

因此,存储在您的服务器接收的数据包中的 MAC 地址应该是您的接入点路由器或您的提供商设备的 MAC 地址。

您可能想看看OSI 层模型封装

于 2010-05-18T06:02:44.700 回答
3

您将 IP 堆栈和物理堆栈之间的关系颠倒过来了。MAC 地址位于包装IP 信息的部分,而不是相反。因此,当我从我的计算机向您的计算机发送一些东西时,我的 LAN(在这种情况下为以太网)中的物理网段会环绕 IP 内容并包括我的 MAC。然后路由器提取IP 信息并在此过程中使用其自己的 MAC 将其向前和向上(在这种情况下再次通过以太网)传递到我的 DSL 调制解调器。DSL 调制解调器解开 IP 内容,并使用它使用的任何协议(当时不知道也不关心)将其发送到电话线上......好吧,你明白了。每个物理链路跳都使用底层物理层为本地传输附加的任何额外信息来包装和解包 IP 信息。

于 2010-05-18T06:14:20.670 回答
2

在 IPv6 中,如果将 IPv6 地址编码为 64 位主机地址,则实际上可能会从 IPv6 地址中获取计算机的 MAC 地址。

另请参阅如何避免在使用 IPv6 时暴露我的 MAC 地址?在超级用户上。

于 2011-02-09T19:39:57.050 回答
1

保留的源和目标IP地址。网络间的思想基本上是基于跳到跳的传递。中间路由器/主机只理解 MAC 地址。据我所知,路由表应该理解机器地址。

如果 MAC 地址可以在数据包的整个传输过程中保留;这意味着不需要发明互联网协议地址。而且所有的互联网都只会使用 MAC 地址 :-)

只有当服务器和客户端都驻留在同一个本地网络上(两台主机都通过一些 L1 媒体连接)时,您才能实现您想要的。

话虽如此,您的应用程序看起来有点像 Web 服务器,它告诉我它不必在同一个网络上。

仍然如果您想要接收主机的源主机的MAC地址;想把它作为有效载荷发送吗?

添加:

世界各地的网络不必是相同的类型(即以太网、帧中继等)。网络层为我们提供了路由的灵活性,没有区分底层(数据链路层)或者我应该说底层 L1 技术。简而言之,IP 将为我们提供内部网络,而数据链路层(MAC 地址出现的地方)将负责微观级别(即本地网络)的通信。这就是 Mac 和 IP 地址共存的合理原因!:-)

于 2010-07-22T13:52:10.193 回答
1

没有“服务器的路由器”。数据包可能从许多路由器到达服务器。

没有“客户端的路由器”。数据包可以从客户端发送到许多路由器。

唯一可以看到 MAC 地址的设备是位于同一 LAN 上的设备 - 可能只有位于同一电缆段上的设备。

顺便说一句,如果客户端位于代理服务器的另一端,服务器也无法获取客户端 IP 地址。

于 2010-05-18T05:34:53.573 回答
0

您不能 - 除非客户端在您的服务器本地。如果是这样,您可以尝试对其进行 arp-ping 并以这种方式获取客户端的 mac 地址。

于 2010-05-18T05:38:46.347 回答
0

简单的区别是:IP 地址是端到端地址(当然是在 IP 数据包中),而 MAC 地址只能逐跳使用。此外,底层 MAC 协议可能会在每一跳发生变化,而客户端不知道,因此客户端甚至可能无法理解其 IP 数据包沿途的所有地址。

于 2010-05-18T06:20:08.367 回答
0

您正在考虑服务器 LAN 和客户端 LAN 之间的直接连接,而这不是互联网的工作方式。两个 LAN 之间可能有任意数量的跃点 - 顺便说一下,任何一个 LAN 都使用 MAC 之类的东西没有任何限制,因此“MAC 地址”不会放在 IP 数据包中。“A MAC”仅在 LAN 中有意义(实际上,只有最低层使用 MAC 之类的东西;-),并且通过 ARP 和 RARP 协议(​​不会被路由;-)发现/宣布。

于 2010-05-18T05:41:19.743 回答
0

在了解为什么服务器无法访问其客户端的 MAC 地址之前,让我们先了解一下数据包是如何在网络中传输的。

情况1 :

如果应用程序只知道域名,则目标 IP 地址将为网络应用程序所知或从 DNS 服务器获得。然后主机将目标IP地址与自己的IP地址和子网掩码进行比较。如果目标主机在源主机的网络中,源主机将向线路发送一个 ARP 请求,询问“谁拥有那个 IP 地址?” 目标主机将回复其 MAC 地址。

案例2:(一般是网上的情况)

如果目标主机不在源主机的网络中,假设当我们浏览 Google.com 时,DNS 会将名称解析为 IP。源主机将发送一个 ARP 请求,询问“谁有我的默认网关的 IP 地址?”。在这种情况下,由于它在我们的网络之外,我们将向我们的默认网关发送 ARP 请求(默认网关是使用互联网协议套件的计算机网络中的节点,用作到其他网络的转发主机(路由器)), DG 用它的 MAC 回复。您使用 Google 的目标 IP 和我们 DG 的目标 MAC 发送数据包。当 DG 收到这个带有自己的目标 MAC 和 IP Header 中的其他一些目标 IP 地址的帧时,它知道该数据包不是发往自己的,而只是遍历。然后谷歌的ip查找,

所以你看,进行物理寻址的数据链路层从不知道目的地的MAC地址,它只知道下一个HOP(路由器)的MAC地址。下一个路由器的MAC地址是通过ARP请求获得的。那么接收方如何知道其发送方的 MAC 地址。好吧,它从来不知道也不知道,因为每次路由器接收到数据包时,它都会在源 MAC 地址字段中添加自己的 MAC 地址,或者说它用自己的 MAC 地址替换它。因此,服务器将永远无法知道其接收器的 MAC 地址,因为它从未出现在数据包中。它只是剩下的IP地址。

于 2019-12-04T14:34:27.850 回答