6 Aralık 2019 Cuma

Ethernet II MAC Adresi

Giriş
Layer 2 switch'ler MAC adreslerini değiştirmezler.

Şekli
MAC Adresi şu şekildedir
00-14-22-01-23-45
İlk üç hane yani
00-14-22
üreticiyi belirtir yani Organizationally Unique Identifier (OUI) kısmıdır. Blokların bir kısmı IANA bir kısmı da IEEE kontrolünde. Diğer üreticilerin listesi şöyle.

Kod
MAC adresini hexadecimal olarak yazdırmak için şöyle yaparız.
std::string Mac::to_string() const
{
  std::ostringstream s;
  s << std::hex << std::setfill('0');
  std::string colon = "";
  for (size_t i = 0; i < mac_addr.size(); i++)
  {
    s << std::setw(0) << colon
      << std::setw(2) << (unsigned int)mac_addr[i];
      colon = ":";
  }

  return s.str();
}
Multicast - Genel
Hedef MAC adresin ilk byte'ının ilk bitinin 1 olması bu paketin multicast veya broadcast olduğunu belirtir.
- IG Biti paragrafında bu anlatıldı. Bu yüzden tüm multicast MAC adresleri 01 veya 33 ile başlar.
- İlk byte'ın ikinci bitinin 0 olması da LG Biti paragrafında anlatıldı

Multicast Olması - IPv4
Ethernet frame'inin tipi ETH_P_IP olmalıdır. Açıklaması şöyle.
The IPv4 multicast Ethernet range is 01:00:5E (224.0.0.0/4). As an example, Some multicast IP used by OSPF are 224.0.0.5 and 224.0.0.6. Related MAC are 01-00-5E-00-00-05 and 01-00-5E-00-00-06 (note that the bit 0 is set to 1). The broadcast MAC FF:FF:FF:FF:FF:FF is another example (note that most switch treat multicast and broadcast frame the same way).
Multicast adresleri hep şöyle başlar. Takip eden byte'taki 8. bit te 0'dır. Yani toplam 25 bit kullanılır. IPv4 multicast adresi için 23 bit kalır.
01-00-5e
Bu blok IANA'ya aittir. Geriye kalan 3 byte yani 00-00-00 ve 7F-FF-FF arası değerler multicast  adresi için olarak kullanılıyor. Dolayısıyla MAC seviyesinde multicast için sadece 23 bit kullanılabilir. IP seviyesinde ise multicast adresi 224/4 olarak tanımlı yani 28 bit uzunluğunda. Dolayısıyla her zaman 28 biti 23 bite sığdırmak problemi var.

Multicast Olması - IPv6
Ethernet frame'inin tipi ETH_P_IPV6 olmalıdır. Multicast adresleri hep şöyle başlar.
33:33. Yani toplam 16 bit kullanır. IPv6 multicast adresi için 32 bit kalır.

Broadcast Olması
Adresin tamamen 0XFF yani 255 olmasıdır

IG Biti - İlk Byte'ın İlk Biti
Individual or Group biti demek. "First least significant bit of the first octet is 1." Açıklaması şöyle.
The least-significant bit is the I/G (Individual/Group) flag. Having this bit clear means that the frame is sent to an individual host, and having it set means that it is intended for a group of hosts (broadcast or multicast).
Eğer bu bit 1 ise broadcast veya multicast demektir. 0xFF:0xFF:0xFF:0xFF:0xFF:0xFF broadcast değeri bu alana 1 değerini atar. 0x1:0x00:0x5E multicast değeri de bu alana 1 değerini atar.

LG Biti - İlk Byte'ın İkinci Biti
MAC adresinin üretici tarafından değil kullanıcı tarafından atandığını gösterir. "Second least significant bit of the first octet is 1." Açıklaması şöyle
1.Official MAC addresses have the second-lowest bit of the first octet cleared.
2.Locally administered MAC addresses have the second-lowest bit of the first octet set - it's your responsibility to make them unique.

5F-00-AD and 6A-7D-00 are administered locally
0 ise üretici, 1 ise kullanıcı tarafından atanmıştır. Bu bitin bir işe yaradığını görmedim.

Yani 0X2 ile masklanır. Benim normal ethernet kartımın adresi B4 ile başlıyor. Yani 1011 0100
Sanal makinenin ise 00 ile başlıyor. Yani Local MAC değil.

Sanal Makineler İçin MAC
Sanal makine sağlayıcıları da MAC üretmek için kendilerine atanan OUI numarasını kullanırlar. MAC adresinin son 3 hanesi rastgele seçilir. Bu durumda iki MAC adresinin çakışma ihtimali 2'24'tür yani düşüktür.

Hiç yorum yok:

Yorum Gönder