Deep dive into VLAN naming conventions, the difference between standard and extended range VLANs, and best practices for VLAN management and deletion on Cisco Catalyst switches.
Effective VLAN management goes far beyond creating and assigning ports. It requires understanding where VLAN configurations live in the switch, how to name VLANs for clarity and compliance, the differences between standard and extended range VLANs, and most importantly, how to safely delete VLANs without losing critical network segments. In this guide, we'll explore VLAN management practices that separate junior engineers from experienced network operators.
VLAN Naming Conventions and Best Practices
Naming VLANs clearly and consistently is often overlooked but critical for operational efficiency. A well-named VLAN tells any engineer exactly what traffic belongs on it, reducing configuration errors and troubleshooting time.
Effective VLAN Names
Use names that reflect the VLAN's function rather than physical location or ambiguous terms:
- VLAN 10: Users (not "Wiring Closet 1" or "Access")
- VLAN 20: Servers (not "Data Center" or "Critical")
- VLAN 30: Mgmt (not "Admin" or "Special")
- VLAN 40: Voice (not "Phones" or "Priority")
- VLAN 50: Guest (not "Outside" or "Temporary")
- VLAN 99: Native (identifies the trunk native VLAN explicitly)
- VLAN 999: Parking (unused, disabled ports)
The name should be descriptive, lowercase or title-case for consistency, and kept under 32 characters (the technical limit). Avoid special characters; use hyphens sparingly.
Why Names Matter in Operations
When a host can't reach a critical service, the first troubleshooting step is verifying VLAN membership. A well-named VLAN immediately tells the engineer whether a port is correctly assigned:
ACC-SW1# show vlan brief | grep Users
10 Users active Gi1/0/1,Gi1/0/2,Gi1/0/3,Gi1/0/4
Gi1/0/5,Gi1/0/6,Gi1/0/7,Gi1/0/8
Gi1/0/9,Gi1/0/10
Contrast this with a poorly named configuration:
ACC-SW1# show vlan brief | grep 10
10 VLAN0010 active Gi1/0/1,Gi1/0/2,Gi1/0/3,Gi1/0/4
Gi1/0/5,Gi1/0/6,Gi1/0/7,Gi1/0/8
Gi1/0/9,Gi1/0/10
The second output forces the engineer to manually track what VLAN 10 represents, introducing opportunities for error.
Standard-Range vs. Extended-Range VLANs
Cisco supports two VLAN ID ranges, each with distinct characteristics and storage requirements:
Standard-Range VLANs (1-1005)
Standard-range VLANs can be managed in two modes:
VLAN Database Mode (legacy, rarely used):
CORE-SW1# vlan database
CORE-SW1(vlan)# vlan 10 name Users
CORE-SW1(vlan)# apply
CORE-SW1(vlan)# exit
This mode was primary on older IOS and IOS XE versions. In database mode, VLANs 1-1005 are stored directly in vlan.dat and do not appear in running-config. This created confusion because configuration changes weren't visible in show running-config, leading to many operational issues.
Global Configuration Mode (modern, recommended):
CORE-SW1# configure terminal
CORE-SW1(config)# vlan 10
CORE-SW1(config-vlan)# name Users
CORE-SW1(config-vlan)# exit
CORE-SW1(config)# end
In global configuration mode, standard-range VLAN configurations appear in both running-config and vlan.dat. IOS XE automatically synchronizes them during reload or write memory.
Extended-Range VLANs (1006-4094)
Extended-range VLANs are used for large enterprises and service providers that require more than 1005 VLANs. They are stored only in running-config and vlan.dat, never in VLAN database mode:
CORE-SW1# configure terminal
CORE-SW1(config)# vlan 2000
CORE-SW1(config-vlan)# name Extended-VLAN-2000
CORE-SW1(config-vlan)# exit
CORE-SW1(config)# end
CORE-SW1# write memory
Critical: Extended-range VLAN configurations must be saved to startup-config with copy running-config startup-config or write memory. Without this, extended-range VLANs are lost on reload.
Storage Differences: vlan.dat vs. running-config
Understanding where VLANs are stored is essential for troubleshooting configuration loss:
| Aspect | Standard-Range (1-1005) | Extended-Range (1006-4094) |
|---|---|---|
| Stored in vlan.dat | Yes (auto-synced) | Yes (must be saved) |
| Stored in running-config | Yes (in IOS XE) | Yes (required) |
| Stored in startup-config | Only if explicitly copied | Yes (copy to startup-config) |
| Survives reload without save | Yes (vlan.dat persists) | No (lost without startup-config) |
| Created via vlan database mode | Yes | No |
| Created via config mode | Yes (recommended) | Yes (only method) |
Best practice: Always use global configuration mode for all VLANs, and always execute write memory after VLAN creation. This ensures consistency across all IOS XE versions and prevents VLAN loss during unexpected reloads.
CORE-SW1(config)# vlan 10
CORE-SW1(config-vlan)# name Users
CORE-SW1(config-vlan)# exit
CORE-SW1(config)# vlan 2000
CORE-SW1(config-vlan)# name Extended-VLAN-2000
CORE-SW1(config-vlan)# exit
CORE-SW1(config)# end
CORE-SW1# write memory
Building configuration...
[OK]
VLAN Deletion and Impact Analysis
Deleting a VLAN is straightforward, but the consequences of deleting a VLAN with active ports require careful planning. This is where many junior engineers encounter unexpected problems.
Impact of Deleting a VLAN with Assigned Ports
When you delete a VLAN that has ports assigned, those ports do not automatically move to another VLAN. Instead, they enter a state where the VLAN no longer exists, though the switchport configuration references it:
! Delete a VLAN with ports assigned
CORE-SW1# configure terminal
CORE-SW1(config)# no vlan 10
CORE-SW1(config)# end
! Check port status
CORE-SW1# show vlan brief | include 10
CORE-SW1# show interfaces GigabitEthernet 1/0/1 switchport | include Access Mode VLAN
Access Mode VLAN: 10 (down)
The port still references VLAN 10, but VLAN 10 no longer exists. The port shows as down in the VLAN list, and hosts on that port cannot communicate with other network segments. The port is effectively disabled for VLAN switching purposes.
Safe VLAN Deletion Process
Before deleting a VLAN, move all ports to another VLAN:
! Identify ports in the VLAN to delete
CORE-SW1# show vlan id 10
VLAN Name Status Ports
---- -------------------------------- --------- -------------------------------
10 Users active Gi1/0/1,Gi1/0/2,Gi1/0/3,Gi1/0/4
Gi1/0/5,Gi1/0/6,Gi1/0/7,Gi1/0/8
Gi1/0/9,Gi1/0/10
! Move ports to Parking VLAN or appropriate alternative
CORE-SW1# configure terminal
CORE-SW1(config)# interface range GigabitEthernet 1/0/1-10
CORE-SW1(config-if-range)# switchport access vlan 999
CORE-SW1(config-if-range)# exit
! Now safely delete the VLAN
CORE-SW1(config)# no vlan 10
CORE-SW1(config)# end
CORE-SW1# write memory
! Verify deletion
CORE-SW1# show vlan brief | include 10
CORE-SW1#
The VLAN no longer appears, and the ports are safely assigned to VLAN 999 (Parking), keeping them functional but isolated.
Special Case: Deleting VLAN 1
VLAN 1 is the default VLAN and exists on all switches by default. Cisco recommends never using VLAN 1 for user traffic and changing the native VLAN on trunks to something else (e.g., VLAN 99). However, you cannot fully delete VLAN 1; it will recreate itself after a reload.
VLAN Database Mode vs. Config Mode: Historical Context
Older IOS versions (pre-15.0) required VLAN database mode for VLAN creation:
! Old IOS behavior (IOS 12.x, 13.x)
CORE-SW1# vlan database
CORE-SW1(vlan)# vlan 10 name Users
CORE-SW1(vlan)# apply
CORE-SW1(vlan)# exit
This created operational confusion because:
- VLAN configurations were invisible in
show running-config - VLANs existed in vlan.dat but not in running-config
- Backup configurations (text copies of running-config) did not include VLAN data
- When engineers switched between devices, muscle memory from other platforms caused mistakes
Modern IOS XE 17.x eliminates this issue entirely. Always use global configuration mode:
! IOS XE 17.x (correct method)
CORE-SW1# configure terminal
CORE-SW1(config)# vlan 10
CORE-SW1(config-vlan)# name Users
CORE-SW1(config-vlan)# exit
CORE-SW1(config)# end
Verification and Troubleshooting
Symptom: VLAN exists in vlan.dat but not in running-config
Cause: The VLAN was created in VLAN database mode on an older IOS version, or write memory was not executed in config mode.
Fix: Recreate the VLAN in global configuration mode and save:
CORE-SW1# configure terminal
CORE-SW1(config)# vlan 10
CORE-SW1(config-vlan)# name Users
CORE-SW1(config-vlan)# exit
CORE-SW1(config)# end
CORE-SW1# write memory
Verify synchronization:
CORE-SW1# show vlan brief | include 10
10 Users active
Symptom: Extended-range VLAN (1006-4094) disappears after reload
Cause: The VLAN was created in running-config but not copied to startup-config.
Fix: Save startup-config explicitly:
CORE-SW1# copy running-config startup-config
Destination filename [startup-config]?
Rebuilding the directory for nvram:/
1652992 bytes copied in 4.567 secs (413248 bytes/sec)
CORE-SW1# reload
Verify after reload:
CORE-SW1# show vlan id 2000
VLAN Name Status Ports
---- -------------------------------- --------- -------------------------------
2000 Extended-VLAN-2000 active
Symptom: Port references a deleted VLAN and is down
Cause: A port was assigned to a VLAN that was then deleted without moving the port first.
Fix: Reassign the port to an active VLAN:
CORE-SW1# show interfaces GigabitEthernet 1/0/1 switchport | include Access Mode
Access Mode VLAN: 10 (down)
CORE-SW1# configure terminal
CORE-SW1(config)# interface GigabitEthernet 1/0/1
CORE-SW1(config-if)# switchport access vlan 999
CORE-SW1(config-if)# end
CORE-SW1# show vlan brief | grep Gi1/0/1
999 Parking active Gi1/0/1
The port is now active again, assigned to VLAN 999.
Symptom: Configuration differences between running-config and startup-config
Cause: Changes were made but not saved with write memory or copy running-config startup-config.
Fix: Always save after VLAN modifications:
CORE-SW1# show running-config | include vlan 2000
vlan 2000
name Extended-VLAN-2000
CORE-SW1# write memory
Building configuration...
[OK]
CORE-SW1# show startup-config | include vlan 2000
vlan 2000
name Extended-VLAN-2000
Both should now match.
Key Takeaways
- Use descriptive VLAN names that reflect function (Users, Servers, Mgmt) rather than location or physical identifiers
- Create all VLANs in global configuration mode for consistency; avoid VLAN database mode in modern IOS XE
- Standard-range VLANs (1-1005) auto-sync with vlan.dat; extended-range VLANs (1006-4094) must be explicitly saved to startup-config
- Always move ports to another VLAN before deleting a VLAN to prevent port isolation
- Execute
write memoryimmediately after VLAN creation to ensure persistence across reloads