loader-logo

Configuring Cisco VTP

VLAN Trunk Protocol (VTP) is a Cisco-proprietary protocol used to replicate VLANs using Layer 2 trunk frames to other switches. It is a method to ease administration by selecting a switch to be configured as a VTP server.

VLANs are configured on the VTP server and then replicated to other connected switches, called VTP clients. This reduces the amount of configuration — having to log onto each switch to create a VLAN. All VLAN and VTP data is saved in the vlan.dat file – stored in the switch’s flash memory.

[Study CCNA or CCNP SWITCH with Cisco Press]

VTP Domain

VTP is organized into management domains, which share common VLAN requirements. These management domains are called VTP Domains. A switch can only be joined to one VTP domain. Each VTP domain is isolated from one another. Information is not shared between VTP domains.

VTP Modes

Switches can be configured in one of three VTP modes:

Server Mode – switch has full control over creating and modifying VLANs. This is the default mode for a switch.

Client Mode – switch cannot create, modify, or delete any VLANs. Switches listen to VTP Advertisements.

Transparent Mode – switch doesn’t participate in VTP. A switch in Transparent Mode will forward VTP version 2 VTP Advertisements out it’s trunk ports — acting as a relay — if it receives VTP Advertisements.

VTP Advertisements

VLAN Trunk Protocol Advertisements are multicast frames carrying VTP information. To process a VTP Advertisement, a switch must have the same VTP password and domain configured.

Different advertisements are tracked with configuration revision numbers. When changes are made by a VTP server, the revision number is incremented before sending the advertisement out. There can be three different advertisements

Summary advertisements – sent out every 300 seconds and every time a change occurs on the VLAN database. Contained in a summary advertisement:

  • VTP version
  • Domain name
  • Configuration revision number
  • Time stamp
  • MD5 encryption hash code

Subset advertisements – sent after a VLAN configuration change occurs. Contained in the subset advertisement is a list including:

  • VLAN
  • VLAN type
  • MTU
  • Length of the VLAN name
  • VLAN number
  • Security association identifier value
  • VLAN name

Advertisement requests from clients – which is a VTP client requesting any VLAN information it needs.

VLANs replicating from a VTP server to VTP client

VLAN 10 Replicating to VTP Clients

Configuring VTP

By default, a switch will have a domain name of NULL and no password. If the switch hears a VTP advertisement it will automatically learn the VTP domain name, VLANs, and the configuration revision number.

In global configuration mode, configure the VTP domain name

SW1#conf t
Enter configuration commands, one per line. End with CNTL/Z.
SW1(config)#vtp domain packet6.com

Then configure the VTP mode and password:

SW1(config)#vtp mode ?
 client Set the device to client mode.
 server Set the device to server mode.
 transparent Set the device to transparent mode.
SW1(config)#vtp mode server
SW1(config)#vtp password Sup3r!S3cret@
Setting device VLAN database password to Sup3r!S3cret@

Configure VTP version 2

SW1(config)# vtp version 2

Version 1 and 2 are not interoperable. Version two offers version-dependent transparent mode, consistency checks, Token Ring support, and TLV support.

VTP pruning increases the efficiency of trunk bandwidth by reducing the amount of flooded traffic. Basically, broadcast and unknown unicast frames are not forwarded over a trunk link if the receiving switch doesn’t have any ports on that particular VLAN.

Enable VTP pruning

SW1(config)# vtp pruning

Verify VTP

View VTP parameters with show vtp status

SW1#show vtp status
VTP Version : running VTP2
Configuration Revision : 1
Maximum VLANs supported locally : 1005
Number of existing VLANs : 6
VTP Operating Mode : Server
VTP Domain Name : packet6.com
VTP Pruning Mode : Disabled
VTP V2 Mode : Enabled
VTP Traps Generation : Disabled
MD5 digest : 0x8D 0x95 0xC5 0x2C 0xC8 0x83 0xB9 0x3C
Configuration last modified by 10.1.1.100 at 3-1-93 06:24:38
Local updater ID is 10.1.1.100 on interface Vl10 (lowest numbered VLAN interface found)
SW1#

View VTP messages and error counters with show vtp counters

SW1#show vtp counters
VTP statistics:
Summary advertisements received : 140
Subset advertisements received : 19
Request advertisements received : 0
Summary advertisements transmitted : 127
Subset advertisements transmitted : 27
Request advertisements transmitted : 3
Number of config revision errors : 0
Number of config digest errors : 0
Number of V1 summary errors : 0
VTP pruning statistics:
Trunk Join Transmitted Join Received Summary advts received from
 non-pruning-capable device
---------------- ---------------- ---------------- ---------------------------
Fa0/22 1 0 0
Fa0/23 1 0 0
Fa0/24 1 0 0
SW1#

Verify the VLANs from the VTP server are on the VTP client with show vlan brief

How to Troubleshoot VTP

If VTP is not working correctly then verify the following items:

  • Is the switch in transparent mode?
  • Is the switch configured as a VTP client when there is no VTP server?
  • Is the link to the VTP server a trunk link?
  • Is the same VTP domain the same on each switch?
  • Are the VTP versions the same?
  • Do the VTP passwords match? VTP passwords are case-senstive.

Putting it All Together

SW1> en
SW1# conf t
SW1(config)#vtp domain packet6.com
SW1(config)#vtp mode server
SW1(config)#vtp password Sup3r!S3cret@
SW1(config)#vtp version 2

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.


[gravityforms id=16 title=false description=false]
<script type="text/javascript">if(!gform){document.addEventListener("gform_main_scripts_loaded",function(){gform.scriptsLoaded=!0}),window.addEventListener("DOMContentLoaded",function(){gform.domLoaded=!0});var gform={domLoaded:!1,scriptsLoaded:!1,initializeOnLoaded:function(o){gform.domLoaded&&gform.scriptsLoaded?o():!gform.domLoaded&&gform.scriptsLoaded?window.addEventListener("DOMContentLoaded",o):document.addEventListener("gform_main_scripts_loaded",o)},hooks:{action:{},filter:{}},addAction:function(o,n,r,t){gform.addHook("action",o,n,r,t)},addFilter:function(o,n,r,t){gform.addHook("filter",o,n,r,t)},doAction:function(o){gform.doHook("action",o,arguments)},applyFilters:function(o){return gform.doHook("filter",o,arguments)},removeAction:function(o,n){gform.removeHook("action",o,n)},removeFilter:function(o,n,r){gform.removeHook("filter",o,n,r)},addHook:function(o,n,r,t,i){null==gform.hooks[o][n]&&(gform.hooks[o][n]=[]);var e=gform.hooks[o][n];null==i&&(i=n+"_"+e.length),null==t&&(t=10),gform.hooks[o][n].push({tag:i,callable:r,priority:t})},doHook:function(o,n,r){if(r=Array.prototype.slice.call(r,1),null!=gform.hooks[o][n]){var t,i=gform.hooks[o][n];i.sort(function(o,n){return o.priority-n.priority});for(var e=0;e<i.length;e++)"function"!=typeof(t=i[e].callable)&&(t=window[t]),"action"==o?t.apply(null,r):r[0]=t.apply(null,r)}if("filter"==o)return r[0]},removeHook:function(o,n,r,t){if(null!=gform.hooks[o][n])for(var i=gform.hooks[o][n],e=i.length-1;0<=e;e--)null!=t&&t!=i[e].tag||null!=r&&r!=i[e].priority||i.splice(e,1)}}}</script> <div class='gf_browser_unknown gform_wrapper gravity-theme' id='gform_wrapper_16' ><form method='post' enctype='multipart/form-data' id='gform_16' action='/configuring-cisco-vtp/' > <div class='gform_body gform-body'><div id='gform_fields_16' class='gform_fields top_label form_sublabel_below description_below'><fieldset id="field_16_1" class="gfield gfield_contains_required field_sublabel_below field_description_below gfield_visibility_visible" ><legend class='gfield_label gfield_label_before_complex' >Name<span class="gfield_required"><span class="gfield_required gfield_required_text">(Required)</span></span></legend><div class='ginput_complex ginput_container no_prefix has_first_name no_middle_name no_last_name no_suffix gf_name_has_1 ginput_container_name' id='input_16_1'> <span id='input_16_1_3_container' class='name_first' > <input type='text' name='input_1.3' id='input_16_1_3' value='' aria-label='First name' aria-required='true' placeholder='First Name' /> <label for='input_16_1_3' >First</label> </span> </div></fieldset><div id="field_16_2" class="gfield gfield--width-full gfield_contains_required field_sublabel_below field_description_below gfield_visibility_visible" ><label class='gfield_label' for='input_16_2' >Email<span class="gfield_required"><span class="gfield_required gfield_required_text">(Required)</span></span></label><div class='ginput_container ginput_container_email'> <input name='input_2' id='input_16_2' type='text' value='' class='large' placeholder='Business email address' aria-required="true" aria-invalid="false" /> </div></div><fieldset id="field_16_3" class="gfield gfield_contains_required field_sublabel_below field_description_below gfield_visibility_visible" ><legend class='gfield_label gfield_label_before_complex' >Consent<span class="gfield_required"><span class="gfield_required gfield_required_text">(Required)</span></span></legend><div class='ginput_container ginput_container_checkbox'><div class='gfield_checkbox' id='input_16_3'><div class='gchoice gchoice_16_3_1'> <input class='gfield-choice-input' name='input_3.1' type='checkbox' value='I consent to the processing and sharing with partners of the personal data that I provide Packet 6 for this activity in accordance with and as described in the &lt;a href=&quot;https://packet6.com/privacy-policy&quot; target=&quot;_new&quot;&gt;Privacy Policy&lt;/a&gt;' id='choice_16_3_1' /> <label for='choice_16_3_1' id='label_16_3_1'>I consent to the processing and sharing with partners of the personal data that I provide Packet 6 for this activity in accordance with and as described in the <a href="https://packet6.com/privacy-policy" target="_new">Privacy Policy</a></label> </div></div></div></fieldset><div id="field_16_4" class="gfield gform_validation_container field_sublabel_below field_description_below gfield_visibility_visible" ><label class='gfield_label' for='input_16_4' >Comments</label><div class='ginput_container'><input name='input_4' id='input_16_4' type='text' value='' /></div><div class='gfield_description' id='gfield_description_16_4'>This field is for validation purposes and should be left unchanged.</div></div></div></div> <div class='gform_footer top_label'> <input type='submit' id='gform_submit_button_16' class='gform_button button' value='Get the report' onclick='if(window["gf_submitting_16"]){return false;} window["gf_submitting_16"]=true; ' onkeypress='if( event.keyCode == 13 ){ if(window["gf_submitting_16"]){return false;} window["gf_submitting_16"]=true; jQuery("#gform_16").trigger("submit",[true]); }' /> <input type='hidden' class='gform_hidden' name='is_submit_16' value='1' /> <input type='hidden' class='gform_hidden' name='gform_submit' value='16' /> <input type='hidden' class='gform_hidden' name='gform_unique_id' value='' /> <input type='hidden' class='gform_hidden' name='state_16' value='WyJbXSIsImY4MGVlNTA5MGVjMWYzYzU5NzUyOGFhOWE3ZGFiMzRlIl0=' /> <input type='hidden' class='gform_hidden' name='gform_target_page_number_16' id='gform_target_page_number_16' value='0' /> <input type='hidden' class='gform_hidden' name='gform_source_page_number_16' id='gform_source_page_number_16' value='1' /> <input type='hidden' name='gform_field_values' value='' /> </div> <p style="display: none !important;"><label>&#916;<textarea name="ak_hp_textarea" cols="45" rows="8" maxlength="100"></textarea></label><input type="hidden" id="ak_js" name="ak_js" value="222"/><script>document.getElementById( "ak_js" ).setAttribute( "value", ( new Date() ).getTime() );</script></p></form> </div>