服务器为什么无法获得客户端MAC地址,如客户端IP?

问题描述 投票:13回答:9

据我所知,数据包经过的所有MAC地址都在数据包中。这是因为在某个路径中经过的每个数据包也应以相似的路径返回。因此,如果服务器的路由器知道客户端(所有客户端)的mac地址,为什么服务器页面(如aspx)无法获得此信息?

请说明。 (不要只是告诉我我错了。)

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

这里是Wikipedia中有关TCP / IP数据线层的摘录:http://en.wikipedia.org/wiki/TCP/IP_model#Data_Link_Layer

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

client-server tcp mac-address
9个回答
22
投票

实际上,存储在数据包中的MAC地址已更改在数据包传输的每一跳上。

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

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

您可能想看看OSI图层模型encapsulation


3
投票

您颠倒了IP堆栈和物理堆栈之间的关系。 MAC地址位于wraps IP信息的部分,而不是相反。因此,当我从计算机向您的计算机发送邮件时,LAN中的物理网段(在本例中为以太网)会包裹IP内容并包含我的MAC。然后,路由器提取 IP信息,并在此过程中使用自己的MAC将其向上和向上(在这种情况下,通过以太网)传递给我的DSL调制解调器。 DSL调制解调器解包IP内容,然后使用它使用的任何协议(此时不知道也不在乎)将其发送到电话线上,以使您明白。每个物理链路跃点使用基础物理层涉及的任何附加信息包装和解包IP信息,以进行local传输。


2
投票

在IPv6中,如果将<编码为the host address的64位,则实际上是从IPv6地址获取计算机的MAC地址。另请参见超级用户上的How to avoid exposing my MAC address when using IPv6?。>>

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

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

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

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

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

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

仅当服务器和客户端都位于同一本地网络(两个主机都通过某些L1介质连接)时,您才能实现所需的功能。

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

仍然要在接收主机上使用源主机的MAC地址;认为将其作为有效载荷发送?

添加:

网络在世界范围内不必具有相同的类型(即以太网,帧中继等)。网络层为我们提供了路由的灵活性,而无需区分基础层(数据链路层),或者我应该说基础L1技术。简而言之,IP将为我们提供网络间的连接,而数据链路层(其中显示MAC地址)将负责微观级别的通信(即局域网)。这是Mac和IP地址共存的合理原因! :-)

您不能-除非客户端在您的服务器本地。如果提供的话,您可以尝试arp ping它并以这种方式获取客户端的mac地址。

您正在考虑服务器的LAN与客户端的LAN之间的直接连接,而这并不是Internet的工作方式。两个LAN之间可以有任意数量的跳数-顺便说一句,没有任何一个LAN使用诸如MAC之类的限制,因此“ MAC地址”不会放在IP数据包中。 “ MAC”仅在局域网内才有意义(实际上,只有其最低层确实使用诸如MAC的东西;-),并且是通过ARP和RARP协议发现/通告的(它们不会被路由;- )。

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


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

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

0
投票
您不能-除非客户端在您的服务器本地。如果提供的话,您可以尝试arp ping它并以这种方式获取客户端的mac地址。

0
投票
您正在考虑服务器的LAN与客户端的LAN之间的直接连接,而这并不是Internet的工作方式。两个LAN之间可以有任意数量的跳数-顺便说一句,没有任何一个LAN使用诸如MAC之类的限制,因此“ MAC地址”不会放在IP数据包中。 “ MAC”仅在局域网内才有意义(实际上,只有其最低层确实使用诸如MAC的东西;-),并且是通过ARP和RARP协议发现/通告的(它们不会被路由;- )。

0
投票

0
投票

案例1:

© www.soinside.com 2019 - 2024. All rights reserved.