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

时间:2010-05-18 05:27:21

标签: client-server tcp mac-address

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

请解释一下。 (不要只是告诉我,我错了)。

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

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

  

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

9 个答案:

答案 0 :(得分:21)

实际上,在数据包旅程的每一跳上,数据包中存储的MAC地址都会被更改

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

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

您可能希望查看 OSI图层模型encapsulation

答案 1 :(得分:2)

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

答案 2 :(得分:2)

在IPv6中,一个可能实际从IPv6地址获取计算机的MAC地址,如果编码为the host address的64位。

另请参阅超级用户How to avoid exposing my MAC address when using IPv6?

答案 3 :(得分:1)

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

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

唯一可以看到MAC地址的设备是同一局域网上的设备 - 可能只是那些位于同一网段上的设备。

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

答案 4 :(得分:1)

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

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

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

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

如果您希望源主机的MAC地址在接收主机上,想把它作为有效载荷发送出去吗?

增加:

网络不一定是全世界的类型(即以太网,帧中继等)。网络层为我们提供了路由的灵活性,而不区分底层(数据链路层)或我应该说底层的L1技术。简而言之,IP将为我们提供网络间和数据链路层(其中MAC地址进入图像)将负责微观层面(即本地网络)的通信。这是Mac和IP地址共存的一个公平原因! : - )

答案 5 :(得分:0)

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

答案 6 :(得分:0)

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

答案 7 :(得分:0)

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

答案 8 :(得分:0)

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

案例1:

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

情况2:(通常是Internet上的情况)

如果目标主机不在源主机的网络内,请说当我们浏览Google.com时,DNS会将名称解析为IP。源主机将发送ARP请求,询问“谁拥有我的默认网关的IP地址?”。在这种情况下,由于它不在我们的网络中,因此我们会将ARP请求发送到我们的默认网关(默认网关是计算机网络中的节点,该网络使用Internet协议套件作为其他网络的转发主机(路由器)), DG回复了其MAC。您发送带有Google的目标IP和DG的目标MAC的数据包。当DG使用IP报头中的自己的目标MAC和某个其他目标IP地址接收此帧时,它知道数据包不是发往自己的,而是经过的。然后,对google进行ip查找,然后继续进行下一跳的ARP等操作。

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