我基本上是在问,当交换机为主机A发送的请求泛洪一个未知的mac地址时,它如何知道目的地正在响应主机A或其他主机是否刚刚发生要传送给A?
#1 楼
第2层交换机(网桥)具有包含MAC地址和端口号的MAC地址表。交换机遵循以下简单算法转发数据包:收到帧后,交换机会将SOURCE MAC地址与MAC地址表进行比较。如果来源未知,则交换机会将其与接收数据包的端口号一起添加到表中。这样,交换机将获悉每个发送设备的MAC地址和端口。然后,交换机会将DESTINATION MAC地址与表进行比较。如果有条目,则交换机将帧转发出关联的端口。如果没有条目,则交换机会将数据包发送到其所有端口,但接收帧的端口除外(洪水)。该设备的框架。
评论
感谢@Ron对其进行更好的解释。现在我知道洪水泛滥了。也可以在en.wikipedia.org/wiki/Unicast_flood中找到
–达蒙
2014年11月14日15:31
这没有回答我所问的问题。
– Celeletas
2014年11月14日22:37
@Celeritas您对问题的假设是错误的。交换机不会“询问”具有mac地址的用户。如果不知道目标MAC,则会将帧泛洪到所有端口。它仅在接收到帧时才学习源MAC。因此,在您的问题中,交换机可以区分B和C,因为它们具有不同的源MAC地址。
–罗恩·托恩(Ron Trunk)
2014年11月14日22:44
@Celeritas-交换机既不知道也不在乎为什么任何主机向主机A发送一些消息。如果主机正在响应主机A,或者另一个主机向主机A发送其他消息,为什么会很重要?交换机只关心目标MAC是用于主机A的(如果不在MAC地址表中,则源MAC是什么)。只有主机A关心接收的帧是否是主机最初向其发送帧的响应。
–罗恩·莫潘♦
2014年11月14日在22:47
罗恩说的是,此概念与ARP分开。
–乔丹·海德
2014年11月14日22:54
#2 楼
您的问题假设交换机参与或知道两个主机之间的通信/对话(这是A和B之间的对话还是A和C之间的对话?)。交换机不参与两个主机之间的通信/对话。它仅知道(或获悉)哪个MAC地址与哪个端口相关联,并将发往特定MAC地址的流量转发(或交换)到关联的端口(一旦它已经获知哪个端口与该MAC地址相关联),而无论源是B或C,或连接到任何其他交换机端口的任何其他主机。交换机在第2层工作。会话管理是高层的职责。
#3 楼
它不叫开关表;其MAC表。现在考虑MAC表为空。当A尝试向B发送数据包时;该报文包含A和B的MAC地址。交换机在MAC表中更新A的MAC地址。现在,由于它不知道B所连接的端口,因此它在其所有端口上广播ARP数据包,并等待所有主机答复。现在如果C尝试发送一个数据包到A,它从该数据包中提取C的MAC地址并将其存储在MAC表中。现在,由于MAC表中已经存在的MAC地址,因此它知道连接到哪个端口A。请记住,数据包包含源和目标的MAC地址。因此,B&C的MAC地址是不同的。因此,开关不会引起混淆。现在,交换机将数据包从C转发到A(鉴于两者都存在于同一个VLAN中)。要将数据包从A发送到B,它要等到B响应交换机发送的ARP数据包。当收到来自B的响应时,它将更新其MAC表中B的MAC地址。然后最后将数据包转发到B。因此,由于数据包(tcp / udp)包含源MAC地址和目标MAC地址,因此交换机不会感到困惑。而且,您的交换机将不会在未知最终主机MAC地址的接口上转发数据包。它必须等到最终主机答复由交换机发送的ARP广播。
评论
这并不完全准确。除非是三层交换机,否则它不会使用ARP。 ARP用于在第2层和第3层之间进行解析,而交换机不知道第3层。确实,交换机确实将未知目的MAC的帧广播到每个交换机端口。主机将忽略目标MAC不是其自身的任何帧。
–罗恩·莫潘♦
2014年11月14日下午13:19
对罗恩的澄清稍作澄清,主要是术语更正。当交换机由于不知道该特定MAC地址位于何处而将数据包发送到每个端口(入口端口除外)时,通常称为“泛洪”。
–杰夫·麦克亚当斯
2014年11月14日14:42
@Ron谢谢您的纠正。忘了写这是用于第3层交换机的。我也想承认我忘记了泛洪一词,所以我写了第3层交换机的答复。杰夫(Jeff)谢谢您的讲述。
–达蒙
2014年11月14日14:53
@杰夫·麦克亚当斯,你是正确的,这是洪水,谢谢。早起之后是在我第一次喝咖啡之前,我的意思是用语言而不是网络来进行广播。
–罗恩·莫潘♦
2014年11月14日在22:20
@Damon,我不知道每个帧都包含源和目标MAC地址。
– Celeletas
2014年11月15日在21:15
评论
有什么答案对您有帮助吗?如果是这样,您应该接受答案,这样问题就不会永远弹出来寻找答案。或者,您可以提供自己的答案并接受。