我最近开始学习OSI模型,网络和东西。
因为我喜欢用C语言编码,所以我想发送自己的以太网帧。
我现在开始工作了;但是,我仍然不确定:
在从机器A向机器B发送以太网帧时(假设两台机器都在同一网络中),我必须指定哪个MAC地址作为帧的目标MAC地址?
我同时尝试了路由器的MAC地址和机器B的MAC地址,两种方法都能正常工作。要获取机器B的MAC地址,我仅进行了ARP请求。
但是,正确的方法是什么?
我使用机器A上的Wireshark和机器B上的tcpdump监视了流量。这是机器的输出乙(是机器的MAC地址乙):e0:d5:5e:c6:52:9a
当将机器B的MAC地址指定为目标地址时(a0:ce:c8:10:75:8c
是机器A的NIC MAC ):
18:42:46.152800 a0:ce:c8:10:75:8c > e0:d5:5e:c6:52:9a, ethertype IPv4 (0x0800), length 64: 192.168.178.21.23455 > 192.168.178.27.23456: UDP, length 5
将路由器的MAC地址指定为目标地址时(c8:0e:14:fd:f3:23
是路由器的NIC MAC):
18:45:04.735375 c8:0e:14:fd:f3:23 > e0:d5:5e:c6:52:9a, ethertype IPv4 (0x0800), length 60: 192.168.178.21.23455 > 192.168.178.27.23456: UDP, length 5
此结果表明路由器重写了源MAC地址,并可能使用其缓存来确定目标IP的正确目标MAC地址。
路由器如何处理指定机器B的MAC地址的帧?
两种方式之间有区别吗?
有一种首选/正确的方法吗?
如果您知道目标计算机在本地子网上,则通常正确的方法是直接使用目标计算机的MAC地址(如有必要,请进行ARP查找)。无论帧的以太类型或内容如何,它都将起作用,并且通常会绕过路由器(它将通过以太网交换机短路)。
如果帧包含IPv4或IPv6,则可以将其发送到子网的路由器,该路由器将进行ARP查找并将帧的有效负载转发到目标IP地址所属的任何主机。(毕竟,路由器就是这样做的:它们转发IP数据包-即使这只是意味着将它们反射回相同的接口。)
但是,在大多数情况下,通过路由器发送本地数据包效率低下,完全没有必要。对于更便宜的路由器,这可能意味着要由非常慢的CPU处理该数据包(与以太网交换机的全线速度相比)。
这就是说,第二方法是在实践中偶尔使用的,与“客户端隔离”(又名“专用VLAN”)一起提供在交换机和接入点。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句