ID3 tags are small tags containing various information about an MP3 that are included in the file. When MP3s were first developed, ID3 tags didn't exist and, as such, one generally had to rely on the filename in order to get any information about the song (aside from audio quality information like bitrate, which most MP3 players display). In 1996, Eric "NamkraD" Kemp created the first version of the ID3 tag (ID3v1) by creating a 128 byte piece of data to be appended on the end of an MP3 file that could be used to contain extra information about a song. The 128 byte tag was organised as such:
First 3 bytes: T, A, G (to signal the start of the tag)
Next 30 bytes: Song title (up to 30 characters in length)
Next 30 bytes: Album title (up to 30 characters in length)
Next 4 bytes: Year the song was released, recorded, or whatever else might be appropriate
Next 30 bytes: Comment (up to 30 characters)
Final byte: Musical genre
The genre field uses a predefined list of 80 possible genres (also created by Kemp) that MP3 player creators have accepted as standard to correspond to the single byte entry. Thus, though the field only contains a single byte of information, most programmes reading that portion of the tag will display the name of the genre rather than the actual data located at that point in the file. Some of these are a bit humourous (such as "Christian Gangsta Rap" and "Porn Groove").
Later on, Michael Mutschler developed ID3v1.1, a slightly better version of the ID3v1 tag. Mutschler modified the ID3 tag to use only 28 bytes for the comment field instead of 30, freeing up an extra 2 bytes. The second to last byte of the field would always be 0 (binary negative) and the final byte used to dictate what track the song was on the album is appears on.
ID3 tags still had some drawbacks though: Some songs have names longer than 30 characters (like U2's "Hold Me, Thrill Me, Kiss Me, Kill Me" or Coil's "Red Birds Will Fly Out of the East and Destroy Paris in a Night"). Some genres (or genre combinations, like "rock with techno influence" or some such thing) weren't listed in the predefined list Kemp had created. The comment field was pretty much useless (some people seem to like putting who ripped or encoded the song or the address of their warez group or something like that in this field but I really doubt most people care who MP3-ified the songs they're listening to) limited to only 28 or 30 bytes. These problems may have been worked around had the tag not been specified to be only 128 bytes. The position of the ID3 tag being at the end of the file also created a problem for streaming audio: The metadata contained in the ID3 tag would be the last thing to arrive (after the song was done being played and thus not of much use anymore).
To solve these problems, Martin Nilsson and several others developed the ID3v2 tag. The ID3v2 tag allowed for all the fields previously mentioned as part of the ID3v1.1 tag to have a virtually unlimited amount of space, as well as adding the new fields of Composer, Orig. Artist, Copyright, URL, and Encoded by. In addition to all this, the tag was placed at the beginning of the MP3 so that the metadata of streaming audio could be identified by the recipient.
The tag was able to placed at the beginning of the file because software designed to decode (in order to play) MPEG files (MP3 stands for MPEG Layer 3, in case that needs to be addressed) looks for what is called a syncsignal that is embedded in the audio portion of the file. ID3v2 tags don't contain a valid syncsignal for software to play and are, therefore, ignored by the software when trying to play the audio. This also allows for the tag itself to be larger than 128 bytes because the audio player will simply go past the data that makes up the ID3v2 tag until it reaches the audio data that it can play. Thanks to this, streaming MP3s can now be recognised by players by their ID3v2 tags.
Negative impact on older MP3 players was minimised by designing the tag to explain the format, content, and size of each data field (termed frames for ID3v2 tags). The inclusion of the frame's size prior to the frame itself allows software that doesn't recognise those frames to skip over them (such as an older version of an MP3 player that may not recognise any of the new frames such as Composer, URL, etc.).
ID3v2 has currently had four revisions (making its full title ID3v2.4.0).
Much of this information was obtained from http://www.id3.org/.