Dağıtık sistemlerle biraz haşır neşir olan herkes er ya da geç RPC (Remote Procedure Call – Uzaktan Prosedür Çağrısı) kavramıyla tanışır. Fikir aslında çok basit: bir programın, başka bir makinede çalışan bir fonksiyonu, sanki kendi bilgisayarında çalışan yerel bir fonksiyonu çağırıyormuş gibi çağırabilmesi. Ağ iletişiminin, soket programlamanın, veri serileştirmenin (serialization) bütün karmaşası bir kabuğun altına gizlenir ve geliştiriciye sadece bir fonksiyon çağırma hissi kalır.
Önceki yazımızda Microsoft’un DCE/RPC (Dağıtılmış Bilgi İşlem Ortamı / Uzaktan Prosedür Çağrısı) uygulamasına göz atmıştık. Bu kez rotayı Unix/Linux dünyasının klasik çözümüne çeviriyoruz: ONC RPC (Open Network Computing RPC). Sun Microsystems tarafından geliştirilen ve NFS (Network File System) gibi köklü teknolojilerin altyapısını oluşturan bu protokol, hâlâ birçok Linux sisteminde sessizce çalışmaya devam ediyor.
ONC RPC Nedir, Neden Önemlidir?
ONC RPC, 1980’lerde Sun Microsystems tarafından geliştirildi ve zamanla RFC 5531 ile standartlaştırıldı. Linux sistem yönetimiyle ilgilenenler için tanıdık gelecek bir örnek verelim: NFS ile bir ağ paylaşımını bağladığınızda (mount ettiğinizde), sahne arkasında tam olarak ONC RPC çalışıyor. Yani bu teknoloji, “eski ama hâlâ üretimde” kategorisinin tam örneği.
ONC RPC’nin temelinde iki önemli bileşen bulunur:
- XDR (External Data Representation): Farklı mimarilerdeki bilgisayarların (örneğin little-endian bir x86_64 sistemle big-endian bir sistemin) veriyi aynı şekilde anlamasını sağlayan platform bağımsız veri kodlama standardı.
- Portmapper / rpcbind: RPC servislerinin hangi port üzerinden dinlediğini takip eden, bir tür “telefon rehberi” görevi gören arka plan servisi.
Bu iki bileşen sayesinde istemci, sunucunun tam olarak hangi portta dinlediğini önceden bilmek zorunda kalmaz; önce rpcbind’e sorar, “bu programı kim, hangi portta sunuyor?” diye öğrenir, sonra asıl isteği o porta gönderir.
Basit Bir ONC RPC Uygulaması Kurmak
Teoriyi bir kenara bırakıp işin pratik tarafına geçelim. Linux üzerinde klasik bir ONC RPC istemci-sunucu çifti oluşturmak için genellikle rpcgen aracı kullanılır. Bu araç, sizin yazdığınız basit bir arayüz tanım dosyasından (.x uzantılı) otomatik olarak C kodu üretir; XDR serileştirme ve ağ iletişimi kodlarının çoğunu sizin yerinize halleder.
Genel iş akışı şu şekilde işler:
- Önce bir
.xdosyasında hangi fonksiyonların uzaktan çağrılabilir olacağını tanımlarsınız. rpcgenkomutunu çalıştırarak istemci taban kodu (stub), sunucu taban kodu ve XDR dönüştürücü fonksiyonlarını otomatik ürettirirsiniz.- Sunucu tarafında gerçek fonksiyon mantığını (örneğin iki sayıyı toplayan bir fonksiyon) yazarsınız.
- İstemci tarafında bu fonksiyonu, sanki yerelmiş gibi çağırırsınız.
- Sunucuyu ayağa kaldırıp rpcbind’e kaydettirir, ardından istemciyi çalıştırırsınız.
Bu yapı sayesinde, aslında ağ üzerinden geçen ham TCP/UDP paketlerini, XDR kodlamasını ve port çözümlemesini elle yazmak zorunda kalmazsınız. Tabii ki bu kolaylık, kaputun altında ne olduğunu bilmemeniz gerektiği anlamına gelmez — özellikle güvenlik ve hata ayıklama söz konusu olduğunda.
Ağ Trafiğini Wireshark ile İncelemek
İşin en öğretici kısmı burada başlıyor. İstemci-sunucu çiftimizi çalıştırırken aynı anda Wireshark (veya tcpdump) ile ağ trafiğini yakalarsanız, ONC RPC’nin perde arkasında neler yaptığını adım adım görebilirsiniz:
- İstemcinin önce rpcbind’e (genellikle 111 numaralı port) bağlanıp “bu program numarasını kim sunuyor?” diye sorduğunu,
- rpcbind’in cevap olarak gerçek servisin dinlediği portu döndürdüğünü,
- İstemcinin ardından bu porta bağlanıp asıl RPC çağrısını gönderdiğini,
- Verinin XDR formatında nasıl paketlendiğini,
- Sunucunun yanıtını aynı şekilde XDR ile geri kodlayıp gönderdiğini
net bir şekilde paket paket takip edebilirsiniz. Bu analiz, özellikle “protokol nasıl çalışıyor” sorusunu soyut kalmaktan çıkarıp gözle görülür hâle getiriyor.
Linux Sistem Yöneticileri İçin Pratik Notlar
ONC RPC ve rpcbind günümüzde çoğunlukla NFS altyapısının bir parçası olarak karşımıza çıkıyor. Bir Ubuntu sunucusunda NFS paylaşımı kullanıyorsanız, arka planda bu mekanizmanın çalıştığını bilmek, olası bağlantı sorunlarını çözerken işinize yarayacaktır.
Güvenlik notu: rpcbind ve eski ONC RPC servisleri, kimlik doğrulama açısından güçlü değildir. İnternete açık sunucularda bu servisleri güvenlik duvarıyla (ufw veya iptables ile) sıkı bir şekilde sınırlamak, mümkünse sadece güvenilir iç ağdan erişime izin vermek önemlidir.
Sorun giderme sırasında şu komutlar işinize yarayabilir:
rpcinfo -pile sunucuda kayıtlı RPC servislerini ve portlarını listeleyebilirsiniz.systemctl status rpcbindile servisin çalışır durumda olup olmadığını kontrol edebilirsiniz.- Ağ trafiğini incelemek için
sudo tcpdump -i any port 111gibi bir komutla rpcbind trafiğini izleyebilirsiniz.
Sonuç
ONC RPC, ilk bakışta “eski moda” gibi görünse de, NFS gibi hâlâ yaygın kullanılan Linux teknolojilerinin temelini oluşturuyor. Kendi basit istemci-sunucu uygulamanızı yazıp ağ trafiğini Wireshark ile analiz etmek, dağıtık sistemlerin ve ağ protokollerinin nasıl çalıştığını anlamak için gerçekten değerli bir alıştırma. Eğer sistem yönetimi veya ağ güvenliğiyle ilgileniyorsanız, bir hafta sonu ayırıp kendi ONC RPC deneyinizi kurmanızı kesinlikle öneririz — teoriyi paket paket gözünüzle görmek, kitap okumaktan çok daha etkili bir öğrenme yöntemi.