There is no RFC for 802.1q as it was developed by the IEEE, but the standard is available at https://standards.ieee.org/findstds/standard/802.1Q-2011.html There have been many iterations through the years and I warn you it is not easy reading.
There is however this nice slide show (only 77 slides) that can be found here. This might be a little friendlier:
To give Cisco its due, dot1q originally came along as a response to ISL, or better yet, as a mechanism to put ISL to bed. The greatest difference between dot1q and ISL is that ISL encapsulates the frame between an ISL header and an ISL FCS footer or trailer after the original frame FCS, whereas dot1q inserts a 4 byte field to identify the vlan within the frame, sandwiched between the source mac and ether type fields. Happy New Year 2018 Quotes Both methods create a longer frame as a result and dot1q also has the extra overhead caused by the recalculation of the FCS field due to the frame manipulation, however, it is ultimately a difference of 30 bytes with ISL compared to 4 bytes for dot1q. And, of course, ISL is Cisco proprietary
802.1q is referred to as internal tagging, or just tagging. The 4-byte 8021.Q tag is comprised of 2 bytes of Tag Protocol Identifier and always has a value of 0x8100 to indicate 802.1q. The other 2 bytes are used as a Tag Control Information field. The TCI information contains a 3-bit Priority Code Point field used to implement Class of Service functions in the IEEE 802.1p standard, followed by a 1-bit Canonical Format Indicator, 0 indicates ethernet and 1 indicates token ring. The next 12-bits are the VLAN Identifier field used to indicate the source VLAN of the frame. The VID can have values from 0 to 4095, but VLANs 0 and 4095 are reserved for system use and not available.
The above diagram is a nice reference illustrating the tag’s placement in the frame.
Also, I recently performed a capture with my switches to further illustrate this placement using Wireshark.