Now maybe you wonder, what's the difference between them all, and why do those
darn computer people always have to mess things up with different versions
Allow me to explain:
It all started several years ago, when the mp3-format was all new and not nearly as widespread as today. At this time, most files on PC-computers had the short 8.3 name format, so it was practically impossible to infer what artist and title an mp3 had by only reading its filename. A couple of guys became quite annoyed with this and put together a little program that would store this data inside the mp3-files themselves. As a quick fix they simply appended all the data as a 128 byte static datastructure at the end of the mp3 files. Although this limited the tag field sizes to 30 characters each or below, for most artist name and titles this was sufficient. The whole thing worked quite fine for them and after a while it became implemented in an mp3-player, and then in another mp3-player, and before they knew it their little quick fix had become a world-wide standard for saving info in mp3:s.
There were two things about these tags (ID3v1.0) that annoyed people. First, they had no storage space for tracknumbers. This was because at the time that this tag was created there were practically no full mp3 albums in circulation, only single files (this in turn mostly due to the fact that 50-100 Mb was quite a lot of data back then, when 1.44 Mb floppy disks were the standard means of data transportation), so track numbers weren't really that important. Second, when you add up all the artist names and song names in the world, there are actually quite a few that exceed the 30 character limit.
The first problem, with the track numbers, was solved by someone by "stealing" 2 bytes from the end of the comment-field, which was the least used field of the ID3v1.0 tags, and using it to store a binary tracknumber value instead. This became known as the ID3v1.1 standard, but most programs did not support it (e.g. Winamp). Luckily, due to the standard implementation of text string storage in computers (null-terminated strings) it could be done in such a way that these new tags were fully backward-compatible with the ID3v1.0 tags, so even if a program didn't support v1.1 tags, they were still fully readable and the tracknumber data was simply ignored if present.
The second problem on the other hand could not be solved nearly as easy. After all, the v1-tags had started out as a 10-minute hack that mistakenly turned into a world-wide standard, and it was time to rethink the whole thing from the start and come up with a new design that was worthy the number of users around the world that were actually using it every day. So, this was exacly what a couple of guys did, and the results were the ID3v2 format.
The ID3v2 tag is fundamentally different from ID3v1 tags. Some important differences are: