In Ethernet the MAC address was and still is a 48 bit number used to identify Ethernet interfaces.
Two bits are used for special purposes, one to indicate whether the address represented an individual system or multiple systems (multicast/broadcast) and one to indicate whether the address was locally or globablly assigned. So that left 46 bits usable for addressing interfaces.
The bits were split into two parts. The most significant 24 bits (including the aforementioned local/global and individual/group bits) were known as the OUI and assigned to manufacturers of network equipment. The manufacturers in turn would assign numbers to invidual items of equipment.
The term EUI-48 was used when addresses constructed in the same manner as MAC addresses were used outside the context of Ethernet. However in practice the two terms were used interchangeably and the IEEE eventually abandoned the distinction.
46 bits is very large but not unimaginably large. For comparison there are about 2^33 people in the world. So that leaves about 2^13 addresses per person. This sounds like a lot, but the IEEE was concerned that with an increasing scope of address use and inefficient allocation practices it could become exhausted.
Thus a larger EUI-64 was defined and the IEEE encourages it's use for applications that do not require compatibility with Ethernet. Mappings were defined from EUI-48 and MAC-48 addresses to EUI-64 addresses, but the IEEE later decided to deprecate them. These mappings insert specific values into the middle of the address, FF-FF was inserted for MAC-48 addresess, while FF-FE is inserted for EUI-48 addresses.
The IEEE also introduced smaller blocks of MAC addresses allowing smaller manufacturers to allocate addresses without wasting larger amounts of space in the global pool. At least that was the idea, in practice the effectiveness of this has been questionable, with more MA-L (aka OUI) blocks allocated than all of the smaller types of block (MA-M, MA-S, IAB) put together.
IPv6 uses a "modified EUI-64" address to assign the local part of an addresses, there are two differences from the standard mapping defined by the IEEE.
- When, as is the common case today, mapping 48 bit addresses, the "EUI-48" mapping is always used, not the "MAC-48" mapping.
- The local/global bit is inverted. This was seen as more user-friendly because it means that numbers with a bunch of leading zeros will fall into the "local" category.
So for example
EUI-48/MAC-48 B8:27:EB:12:34:56
EUI-64 corresponding to MAC-48 B8:27:EB:FF:FF:12:34:56
EUI-64 corresponding to EUI-48 B8:27:EB:FF:FE:12:34:56
IPv6 modified EUI-64 BA:27:EB:FF:FE:12:34:56
https://www.rfc-editor.org/rfc/rfc4291
http://web.archive.org/web/20061205013140/http://standards.ieee.org/regauth/oui/tutorials/EUI64.html