The native VLAN
A trunk port tags every frame with its VLAN (Virtual Local Area Network) ID, with one exception: the native VLAN. Frames belonging to it cross the trunk completely untagged, the same way they would on a plain access port. This exists mostly for backward compatibility with older equipment that never understood 802.1Q tags at all.
By default, the native VLAN is VLAN 1 on every port, on every switch, out of the box. That means if nobody changes it, every trunk in a network is quietly agreeing to treat the same VLAN as the "untagged, trust it" one.
Double tagging: How VLAN hopping actually works
An attacker on an access port can't normally reach a different VLAN. Their switch strips any tag they try to add and treats the frame as belonging to their own access VLAN. Double tagging abuses the native VLAN's blind spot instead of fighting that rule directly.
The attacker crafts a frame with two stacked 802.1Q tags: the outer tag set to the native VLAN, the inner tag set to the VLAN they actually want to reach.
The first switch, seeing the outer tag matches its native VLAN, strips it and forwards the frame as if it were a plain untagged native-VLAN frame, carrying the inner tag along for the ride. The next switch down the line unwraps that inner tag and treats it as a completely legitimate frame for the target VLAN. The attacker's traffic just crossed a VLAN boundary it was never granted access to.
Three habits close this off: set every trunk's native VLAN to something unused (never the default VLAN 1), explicitly tag native VLAN traffic instead of leaving it untagged, and disable auto-trunk negotiation (DTP, Dynamic Trunking Protocol) on ports that shouldn't become trunks in the first place. Any one of these breaks the attack; doing all three is standard hardening.