同一個局域網裡的兩個計算機A和B,都能ping得通計算機C,但是A和B互相ping 不通,回覆是“無法訪問主機”,匪夷所思啊。當網絡發生故障時,相當於發生了刑事案件,偵探“亨特”前往案發現場。偵探提取了故障代碼(ICMP Error Code),以及觀察:1. ICMP Error Code = “ICMP HOST UNREACHABLE”2. Host A (192.168.23.184/24)
-----Gateway (192.168.23.1/24) √3. Host B (192.168.23.83/24) -----Gateway (192.168.23.1/24) √ 4. Host A (192.168.23.184/24) ----- Host B (192.168.23.83/24) ×5. Host A ping Host B,Host A reply, not Host B !!!根據5,如果Host A可以獲取Host B的MAC地址,Host A的Ping報文(ICMP Echo
Request)就會從Host A物理接口發出,Host A就不會Reply 自己。既然5發生了,含蓄地說明Host
A無法獲取Host B的MAC地址!哪些情況會阻攔Host A獲取Host B的MAC地址?1. Host A、Host B接入交換機端口,交換機開啟了端口隔離(Port Isolation)。2. Host A、Host B接入無線AP,AP開啟了端口隔離(Port Isolation)。3. Host A開啟了個人電腦防火牆,阻攔任何主動入向的報文(Un-solicited Inbound Packet)。4. Host B開啟了個人電腦防火牆,阻攔任何主動入向的報文(Un-solicited Inbound Packet)。如果是家庭用戶,差不多就是3、4,分別將Host A、Host B的個人防火牆permit ARP、ICMP。問題立馬就來了,為何HostA、HostB可以Ping 通網關?所以,可以接收ARP Request,自然可以回覆ARP Reply。所以,可以接收ICMP Echo Request,自然可以回覆ICMP Echo Reply。為了驗證是否HostA、HostB開啟了防火牆,只要在網關(192.168.23.1/24)上是否可以Ping通HostA、HostB?如果HostA、HostB沒有開啟防火牆,那麼就是上文的1、2、5。即二層橋接設備(二層交換機/AP)開啟了端口隔離。阻斷了HostA、HostB之間的ARP Request/Reply。如果HostA、HostB分別在ARP Table輸入對方的MAC地址,是否可以Ping通對方?當然不可以。防火牆的入向policy = deny any any。但是故障代碼就變了,變成了ICMP Error Code = “ICMP TIMEOUT” 。因為ICMP報文可以發出,只是被接收方的防火牆丟了,造成Timeout。最後,端口隔離(Port Isolation)是如何實現的?個人猜測是通過QINQ實現的。QINQ= 802.1Q IN 802.1Q的縮寫。即使用2個VLAN TAG,1個VLAN Tag對應一個802.1Q頭。主機A、主機B、網關都在VLAN 10裡,三者可以自由交換ARP Request 、Reply,以及任何Packet。這個就是通常所見。主機A、主機B、網關都在VLAN 10裡。為了阻隔主機A、B之間的通信。主機A任何進入交換機的packet,添加2個802.1Q,分別是:802.1Q (4096) + 802.1Q (10)主機B任何進入交換機的packet,添加2個802.1Q,分別是:802.1Q (4095) + 802.1Q (10)網關回復主機A的Packet,添加2個802.1Q,分別是:802.1Q (4096) + 802.1Q (10)網關回復主機B的Packet,添加2個802.1Q,分別是:802.1Q (4095) + 802.1Q (10)網關在VLAN 10發出的廣播報文,只需要1個802.1Q,即對,就是Tunnel Mode實現了端口隔離技術。