1 Dolarlık Mikrodenetleyiciyi Web Sunucusuna Çevirmek: Gömülü Hosting'e Derinlemesine Bakış
Bir 8-Bit Mikrodenetleyici Üzerinde Web Sunucusu Çalıştırmak: Neden Olmasın Ki?
Mühendislikte "teknolojik olarak mümkün ama muhtemelen aptalca" diye kategorize edilen bir sürü proje vardır. İşte bu yazıda anlatacağımız şey de tam olarak o kategoriye giriyor—hiç mantıklı olmasa da, internetin nasıl çalıştığını baştan sona öğretiveriyor. Bugün size, bir geliştiricinin bir çikolata çubuğu kadar pahalı olan bir mikrodenetleyicide gerçek bir website barındırma macerası hakkında bahsedeceğiz.
Donanım: Mütevazı Başlangıç
Hikayemizin kahramanı AVR64DD32—sadece 1 dolara satılan modern bir 8-bit mikrodenetleyici. Eline aldığında ne var ne yok, onu gözden geçirelim:
- İşlemci: 24 MHz hızında çalışan tek 8-bit AVR çekirdeği
- RAM: 8 kB bellek
- Depolama: 64 kB flash
- Güç Tüketimi: 1,8 ile 5,5 volt arasında çalışabiliyor
- Fiyat: Bir. Dolar.
Bu çağda 8-bit bir çip için gerçekten bol sayılır. Arduino'nun efsanevi Atmega328'inden daha ucuz ve daha yetenekli, üstüne üstlük programlaması daha kolay. Ama işte buradasıncı sorun beliriyor: internete erişim lazım.
Ağ Problemi: Ethernet Niye Yetmez?
İlk bakışta Ethernet en açık cevap gibi görünüyor. Her yerde var, belgeli ve çalışıyor. Ama burada fizik devreye giriyor: standart 10BASE-T Ethernet saniyede 10 megabit hızında veri taşıyor. Manchester kodlaması ile (her bit telde iki bit haline geliyor) işlemciye saniyede 20 megabit veri geliyor.
AVR'nin GPIO pinleri en fazla 12 MHz'de çalışabiliyor. Bu hiç yeterli değil.
Elbette elektronik dükkanından özel bir Ethernet denetleyici çipi satın alabilirsin, ama bu daha pahalı, daha karmaşık ve bekleme süresi ekliyor. Bir noktayı ispat etmeye çalışırken bu pek ideal değil.
Akıllı Çözüm: SLIP Protokolü
İşte burada SLIP—Serial Line Internet Protocol devreye giriyor. 1980'lerin dial-up modem çağına (RFC 1055) kadar uzanan bu protokol basitliğiyle çarpıcı. Ağ paketlerini özel baytlarla sardıyor ve bazı karakterleri kaçırıyor:
- Her paketi
0xC0baytı ile sarmalıyor (çerçeve sınırlandırıcısı) - Paket içindeki
0xC0baytlarını0xDB 0xDCile değiştiriyor 0xDBbaytlarını0xDB 0xDDile değiştiriyor
Hepsi bu. Karmaşık donanıma ihtiyaç yok. Sadece 115.200 baud hızında standart bir USB-seri dönüştürücü kullan ve Linux bunu bir ağ arayüzü olarak algıla:
stty -F /dev/ttyUSB0 115200 raw cs8
slattach -m -F -L -p slip /dev/ttyUSB0
Bu, 1990'ların modem savaşlarında internete bağlayan aynı protokol. Modern Linux hâlâ destekliyor. En güzel kısmı? Mikrodenetleyici seri adaptörün güç rayından tamamen beslenebiliyor. Bir kablo. Bitmiş.
Protokol Yığını: Sıfırdan İnşa Etmek
Şimdi gerçekten ilginç kısım başlıyor—8 kilobayt bellekte gerçek ağ uygulaması yazmak.
IP: Kolay Kısım
IP başlıkları 40 baytlık kaynız, adres ve meta verilerden oluşan kalıp kodlar. Eski protokol paket bölüntülemesini destekliyordu, bu da karmaşık birleştirme mantığı gerektiriyordu. Ama modern işletim sistemleri zaten bölüntülemeyi devre dışı bırakıyor ve IPv6 tamamen kaldırdı.
Çözüm utanç verici derecede basit: gelen paketlerin kaynak ve hedef adreslerini değiştir, TTL sayacını sıfırla ve geri gönder. Mikrodenetleyicinin IP'yi anlaması gerekmez—sadece bir ayna olmak gerekiyor.
TCP: Dış Dünyası Zor
TCP bambaşka bir hikaye. Çalışan bir TCP yığını, şunu gerektiriyor:
- Bağlantı durumlarını takip etmek
- Kayıp paketleri yeniden iletmek
- Sınır durumlarını yönetmek (ve çok var)
- Zaman aşımı mantığı oluşturmak
Bunun implementasyonu birkaç günü aldı ve sonuç hâlâ garip davranışlara sahip. Ama basit bir web sayfası sunmak için yeterli.
HTTP: Pratik Kestirme
Geliştirici burada pragmatik davrandı: HTTP yanıtını hardcode etti. Sunucu daima aynı statik içeriği gönderiyor. Sadece bir URL olduğu sürece mükemmel çalışıyor.
Bu tür yaratıcı kısıtlamalar şık çözümleri zorunlu kılıyor—ve bize her sorunun tam özellikli bir çerçeveye ihtiyaç duymadığını hatırlatıyor.
İnternete Bağlantı: Çıkmazdan Çıkmak
Proje gerçekten burada zekayla parlıyor. Mikrodenetleyici bir geliştirme bilgisayarına seri kablo ile bağlanıyor. Bu bilgisayar da Helsinki'deki, genel IP adresine sahip bir VPS'e bağlanıyor.
Ama sorun şu: mikrodenetleyicinin kendi genel IP'si yok. Ayrıca genel IPv4 adresleri pahalı ve giderek azalıyor (merhaba IPv4 tükenmesi). Hatta bir IP'si olsa bile, seri bağlantıyı internet üzerinde tutmak pratik değil.
VPN Çözümü
Cevap: WireGuard, Linux'un modern VPN uygulaması. NAT'ın veya başka ağ engellerin arkasında olsalar bile iki uç nokta arasında sanal ağ tüneli oluşturuyor.
Kurulum şöyle:
- Geliştirme makinesini VPS'e WireGuard ile bağla
- VPS,
/mcu/*isteklerini yerel tünel aracılığıyla mikrodenetleyiciye yönlendir - Ziyaretçiler VPS'in genel adresine bağlansın
- VPS trafiği yerel mikrodenetleyiciye ileterek
Bu, Twitch'in streaming altyapısını güçlendiren aynı yönlendirme tekniği—sadece 1 dolarlık bir çip ve seri kabel için uyarlanmış. Mikrodenetleyicinin asla internete doğrudan açılması gerekmez. Zarif.
Gerçekten Neler Öğrendik?
Bu proje kasıtlı olarak pratik değildir, ama tam olarak bu yüzden değerlidir. Soyutlama katmanlarını söküyor ve temel ağ protokollerini sıfırdan yazmanı zorlayıyor.
Keşfediyorsun ki:
- Ağlar modülerdir. Seriyeli ile Etherneti, TCP'yi UDP ile değiştirebilirsin—ilkeler aynı kalır.
- Sınırlamalar yaratıcılığı doğurur. 8 kilobayt RAM kısıtlaması, temiz ve minimal implementasyonları zorunlu kıldı—hatta daha iyi çalışıyor.
- Eski protokoller hâlâ kullanışlıdır. SLIP 1988'de tasarlandı. Linux hâlâ destekliyor. Bunun bir sebebi var.
- İnternet şaşırtıcı derecede basittir. Soyutlama katmanlarını söktüğünde, sadece adresler arasında değişilen baytlar kalıyor.
Asıl Mesele
NameOcean'da web teknolojilerinin gizemini çözmek hakkında tutkulu bir ekip var. İster bulut altyapısında çalışıyor olsun isterse mikrodenetleyicilerle deney yapıyor olsun, DNS sorgulaması, TCP el sıkışması, HTTP istekleri gibi temelleri anlamak seni daha iyi bir mühendis yapıyor.
Bu proje bulut hostingini değiştirmeyecek (eminim). Ama modern bulut hostingin neden bu kadar yararlı olduğunu öğretecek. Bazen soyutlamayı en iyi şekilde takdir etmenin yolu, bunu bir dolar değerinde bir çip üzerinden yeniden oluşturmaktan geçiyor.
Evet, akıllı saatine blog barındırmaya çalışan birini durdurmamız gerekecek galiba.
Ağ katmanı hakkında daha fazla bilgi istiyorsanız? DNS çözümleme, TCP/IP temelleri ve domain'iniz niye hosting donanımından daha önemli—bu konulardaki rehberlerimizi kontrol edin. İhtiyacınız olan gerçek web hosting için de (tavsiye ederiz) yapay zeka destekli çözümlere sahibiz—lehim istemi almadan rahat kalabilirsiniz.