- Ağ altyapısı; switch, bridge, router, load balancer, firewall gibi bileşenlerden oluşur
- İşletim sistemi, paketleri sınıflandırarak, kuyruklara yerleştirerek ve firewall kurallarını uygulayarak ağ iletişimini kontrol eder
- Peki var olmayan bir taşıma katmanı protokolü kullanılırsa ne olur?
- OS buna izin verir mi? Paketler gerçekten iletilir mi? Firewall engeller mi?
- Bunu doğrulamak için doğrudan deney yapıldı
İnternet protokollerine genel bakış
- İnternet, verileri iletmek için birden çok katmandaki protokollerin birlikte çalıştığı bir yapı ile işler
- Uygulama bir istek gönderdiğinde, OS bunu çeşitli ağ katmanlarının başlıklarıyla sararak iletir
- Taşıma katmanı (Transport Layer): TCP(6), UDP(17) gibi protokoller burada yer alır
- IP başlığındaki
Protocol alanı değiştirilip kullanılmayan bir numara verilirse ne olur?
Deney #1: Kendi bilgisayarımda doğrudan test
Deney yöntemi
- HDP (sahte protokol) tanımı: Mevcut protokollerden tamamen farklı yeni bir taşıma katmanı protokolü tasarlandı
- Sunucu ve istemci uygulaması: Paket alıp gönderen programlar geliştirildi
- Loopback testi: OS'nin paketleri kendi içinde nasıl işlediği gözlemlendi
Çalıştırma süreci
$ sudo cargo run --bin server # Sunucuyu çalıştır
$ fortune | cowsay | sudo cargo run --bin client 127.0.0.1 # İstemciyi çalıştır
Sonuçlar
- OS, HDP paketlerini normal şekilde işledi ve loopback arayüzü üzerinden yeniden alındı
- IP protokol numarası değiştirilerek ek testler yapıldı
- 1 (ICMP), 2 (IGMP), 6 (TCP) → sunucuda algılanmadı
- 50, 51 (IPSec ile ilgili protokoller) → istemcide gönderim doğrudan engellendi
- 256 (IP protokol numarası aralığını aşıyor) →
socket() çağrısı aşamasında hata oluştu
Neden analizi
- OS'nin bazı protokol numaralarını sistem düzeyinde rezerve ederek engellediği durumlar var
- Darwin (BSD tabanlı macOS) üzerinde
socket() çağrısında protocol=0 ayarlanırsa bazı paketler otomatik olarak filtrelenir
- IPSec ile ilgili protokoller büyük olasılıkla güvenlik nedeniyle engellenir
- IPv4 protokol numarası 8 bit olduğundan yalnızca 0~255 aralığı geçerlidir
Deney #2: İnternetten paket gönderimi
Deney planı
- DigitalOcean VPS kurulumu: Almanya Frankfurt'taki bir bulut sunucusunda deney ortamı kuruldu
- HDP paketi gönderimi: Kendi bilgisayarımdan (Suudi Arabistan) DigitalOcean sunucusuna paket gönderildi
- Ağ ekipmanının tepkisinin analizi: Paketin ulaşıp ulaşmadığı ve firewall tarafından engellenip engellenmediği kontrol edildi
Beklenen sonuç
- HDP paketleri normal şekilde iletilebilir ya da bazı ISP'ler veya DigitalOcean firewall'u tarafından engellenebilir
Gerçek sonuç
- Yalnızca ilk paket iletildi, sonraki paketler engellendi
tcpdump ile doğrulananlar:
- Kendi bilgisayarımdan paketler normal şekilde gönderildi
- DigitalOcean sunucusunda yalnızca ilk paket algılandı
- Sonraki paketler bir yerde engellendi (NAT, firewall, ISP vb.)
Neden analizi
- DigitalOcean, standart dışı IP protokollerini desteklemiyor
- Bunun başlıca nedeni büyük olasılıkla bulut sağlayıcısının firewall politikaları
- Neden yalnızca ilk paketin ulaştığı ise belirsiz
AWS üzerinde yeniden deneme
- AWS'de iki instance kullanılarak deney tekrarlandı
- Aynı veri merkezi içinde HDP paketleri normal şekilde gönderilip alınabildi
- Ancak internet üzerinden gönderildiğinde DigitalOcean'dakiyle aynı şekilde yalnızca ilk paketin ulaştığı sorun ortaya çıktı
Başlıca sorunlar
- NAT (Network Address Translation): TCP/UDP portlarına göre çalıştığı için HDP gibi yeni bir protokolü ele almanın bir yolu yok
- Firewall/ağ filtreleme: Çoğu ISP ve bulut sağlayıcısı onaylanmamış IP protokollerini engeller
- Ağ ekipmanı optimizasyon sorunları: Bazı ağ cihazları standart dışı paketleri koşulsuz silebilir
Sonuç: TCP ve UDP kullanmak en iyisi
- İşletim sistemleri arasındaki ağ yığını uygulamaları farklıdır
- Linux, macOS ve Windows'ta
socket() davranışı birbirinden farklıdır
- Firewall ve NAT cihazları standart dışı protokolleri engeller
- Kişisel ağlarda çalışsa bile internette kullanmak neredeyse imkânsızdır
- Performans kazancı yok
- UDP tabanlı QUIC gibi zaten doğrulanmış alternatifler mevcut
- TCP/UDP kullanalım
- Standart protokoller kullanıldığında port tabanlı NAT, firewall ve routing desteği otomatik gelir
Ek kaynaklar
5 yorum
https://www.saturnsoft.net/network/2019/03/21/quic-http3-1/ yazısını okumanız da faydalı olabilir gibi görünüyor.
Eski StarCraft'ta Hamachi ile çok oyunculu oynarken IPX vardı; o zaman bunun ne olduğunu gerçekten çok merak ettiğimi hatırlıyorum.
Düşününce, NAT her şeyi engellerdi sanırım... IPv6 tamamen yerleşir ve NAT ortadan kalkarsa (pek olacak gibi görünmese de), kendi yaptığınız bir protokolle iletişim kurmak da mümkün olabilir.
Oho, güzel bir deneme...
Ağların temelini sarsan bir girişim olması güzeldi ama bu dünyadaki tüm ağ cihazları sadece TCP/UDP’ye özelleşmiş cihazlar olduğu için...
Ağ cihazlarının kalıptan seri üretim olduğunu bilmezken... mümkün gibi görünebilir... ama bunu öğrendikten sonra, ya benim işim çok başarılı olacak da herkes benim protokolümü kullanacak diye düşünmüyorsanız, bunun yapılamayacağını anlıyorsunuz...
Hacker News görüşleri