Ethernet iletişim için MAC adresleri kullandığından, aygıtların IP adresi olmayacakları, sadece MAC adreslerinin bulunduğu bir Ethernet ağı oluşturabilir miyim?
Kendi yazılımınızı sıfırdan yazıyorsanız, bunu kesinlikle yapabilirsiniz. Yazılımın, bu programın normal muadilinin bir IP adresini kabul ettiği herhangi bir yerde bir MAC adresini kabul etmesini sağlayın. IP adresi yerine ham ethernet paketleri göndermek için tüm sistem çağrılarını kullanın ve işe yarayacaktır - ancak büyük bir güçlük olacaktır.
Genellikle, ağınızdaki MAC adresleri herhangi bir kalıp izlemez. Üretici tarafından donanıma yakılırlar. Uzun ve hacimlidirler. Benimki şu anda C8-60-00-CA-4B-9A. Yanımdaki bilgisayar 00-40-F4-48-1B-88.
Makinelerin birbirinizle konuşabilmesi için, her makineye ağdaki diğer tüm makinelerin tüm MAC adreslerinin sabit kodlu bir listesini verebilir, böylece paketleri nereye göndereceğini bilir. Bu, hataya eğilimli bir çok yazımdır ve herhangi bir ağ donanımınızı her değiştirdiğinizde, yeni MAC adreslerini yansıtacak şekilde tüm listeleri değiştirmeniz gerekir.
Bu büyük bir güçlüktür, bu yüzden muhtemelen ağdaki makinelerin yayın paketlerini kullanarak birbirlerinin MAC adreslerini otomatik olarak keşfetmeleri için bir yol bulursunuz. Daha sonra, onlara anlamlı bir adresle kendilerini tanımlamaları için bir yol verirsiniz, böylece "telnet C8-60-00-CA-4B-9A" gibi komutlar yazmanız gerekir.
IP'nin yaptığı tam olarak budur - sabit kodlama MAC adresleri yerine bir ağdaki ana bilgisayarları adreslemek için anlamlı sayılar kullanmanın bir yoludur. IP'nin üstüne DNS ekleyin ve "telnet webserver" gibi bir komut yazabilirsiniz.
Ethernet, mesaj göndermek için IP adreslerini kullanamadı mı? Yapması gerektiğini söylemiyorum, sadece yapmayı seçip seçemeyeceğini soruyorum.
MAC adresleri 6 bayt bilgi ve IP adresleri sadece 4 bayt olduğundan, 1'e 1 eşleme yapamazsınız. MAC adresini (pakete koymak için) bir IP adresinden (ağdaki başka bir ana bilgisayarla iletişim kurmak isteyen yazılım tarafından sağlanan) bulmak için bir yol bulmanız gerekir.
Bunu yapmanın bir (sabit çekirdek) yolu, ağdaki her makineye gitmek ve ilk iki baytı sıfır (veya aynı olan başka bir sabit sayı) yaparak donanım MAC adresini bir IP adresi gibi görünecek şekilde değiştirmek olacaktır. ağdaki her makine için) ve alt dört baytı ağda olmasını istediğiniz "IP adresi" olarak ayarlayın. (Çoğu ağ kartı girip satıcının atadığı MAC adresini değiştirmenize izin verir)
Bunun gerçekten işe yaramasını sağlamak için, daha sonra bu sistemi kullanmak için ağ yığınınızdaki kodu hacklemeniz gerekir. Temel olarak ARP (IP'nin IP adreslerini MAC adresine çevirmek için kullandığı yöntem) ile ilgili her şeyi yırtıyorsunuz. IP başlıklarını oluşturan / okuyan parçaları sökersiniz. Bunun yerine, hepsini wxyz adresinde ana bilgisayara gönderilecek bir IP paketi verildiğinde, DEST adresi 00-00-wxyz olarak ayarlanmış bir ethernet çerçevesi oluşturan çok basit bir kodla değiştirirsiniz.
Ayrıca, bir paketin alıcısına hangi protokolün (UDP, TCP) kastedildiğini belirtmenin bir yoluna ihtiyacınız olacaktır. Muhtemelen mevcut bir alanı geçersiz kılarak ethernet başlığında bir yere yapıştırabilirsiniz. Belki kaynak adresin ilk iki baytından birini kullanın? Bu, hedef makinelerin alma yeteneğini etkilemez, ancak bazı anahtarları bozabilir. Protokolü Ethernet çerçevesinin başına veya sonuna ekleyebilir ve yük boyutunu bir tane artırabilirsiniz - ancak bu bir IP başlığı gibi kokmaya başlar.
Peki tüm bu işler size ne satın alacaktı?
İlk olarak, her giden paketteki ARP tablosundaki bir arama yükünü kurtaracaktır. Bu muhtemelen sadece mikrosaniye civarındadır.
Bilgi işlem IP başlığı sağlama toplamlarını ve bunları tutmak için gereken belleği kaydedersiniz. Modern donanımda bu muhtemelen önemli değildir.
IP üstbilgisi olmayacağından ağdaki her pakete 16 bayt kaydedersiniz. Bu, uygulamaya bağlı olarak toplanabilir.
En büyük kazanç, herhangi bir ARP isteği yapmak zorunda kalmamanızdır. Standart bir IP paketinin yeni bir ana bilgisayara gönderilmesi, milisaniye sürebilen ve öngörülemeyen bir ARP değişimini tetikler. Bu, gecikmeye ve titremeye çok duyarlı bazı uygulamalar için büyük bir kazanç olabilir.
Bazı çok özel uygulamalar için bu aslında mantıklı. Bir keresinde, bu ARP dizilerinin devreye girmesini ve beklenmedik bir şekilde gecikme ve titreme eklemesini önlemek için tüm ana bilgisayarlar arası iletişim için yalnızca yayın UDP paketlerini kullanan gerçek zamanlı bir sistem çalıştım. Ayrıca bir keresinde doğrudan IP paketleri içinde UDP yükleri göndererek (IP başlığı yok) çalışan sınırlı bir sistem üzerinde çalıştım çünkü tüm ARP ve ağ maskesi ve ekstra sağlama toplamlarını uygulamak için gereken tüm karmaşıklığı ve belleği kaydetti.