SRV kaydı, alan adlarına ait bilgileri sunan DNS sisteminde belirli bir hizmetin hangi sunucu ve porttan sunulacağını bildiren kayıt türüdür. Bir istemci yalnız alan adını değil, aradığı hizmeti ve kullanılacak protokolü de sorgulayarak uygun hedefi öğrenebilir.

Bu yapı özellikle aynı hizmetin birden fazla sunucuda sunulduğu durumlarda önem kazanır. SRV kaydı; hedef sunucuyu ve portu belirtmenin yanında, hangi hedefin önce denenmesi gerektiğini ve aynı öncelikteki hedefler arasında seçimin nasıl dağıtılacağını da tanımlar.

SRV Kaydı Nasıl Çalışır?

SRV kullanımında istemci doğrudan bir sunucu adını bilmek zorunda değildir. Bunun yerine uygulamanın tanımladığı hizmet ve protokol adlarıyla DNS sorgusu yapar. Örneğin hizmet, veriyi sıralı ve güvenilir biçimde ileten TCP protokolünü kullanıyorsa sorgu adı hizmet etiketi, _tcp etiketi ve alan adından oluşur. Bu etiket DNS sorgusunun TCP üzerinden gönderileceği anlamına gelmez; bağlantı kurulacak hizmetin protokolünü belirtir.

  1. İstemci, aradığı hizmet ve protokol için SRV türünde DNS sorgusu gönderir.
  2. DNS yanıtında uygun SRV kayıtları varsa istemci bu kayıtların öncelik değerlerini karşılaştırır.
  3. En düşük öncelik değerine sahip kayıtlar önce değerlendirilir.
  4. Aynı öncelikte birden fazla kayıt varsa ağırlık değerleri hedeflerin seçilme sırasını göreli olarak etkiler.
  5. Seçilen hedefin IPv4 adresi A kaydından, IPv6 adresi ise AAAA kaydından öğrenilir.
  6. İstemci, hedef IP adresine SRV kaydında belirtilen port üzerinden bağlanmayı dener.

Bu davranışın uygulanabilmesi için istemcinin veya ilgili uygulama protokolünün SRV kullanımını desteklemesi gerekir. DNS'te bir SRV kaydının bulunması, SRV desteği olmayan bir istemciyi otomatik olarak bu kaydı kullanmaya zorlamaz.

Hizmet ve Protokol Etiketleri Neyi Ayırır?

SRV sorgusunun adı yalnız alan adından oluşmaz. Hizmet etiketi hangi uygulama hizmetinin arandığını, protokol etiketi ise hizmete bağlanırken kullanılacak protokolü belirtir. Böylece aynı alan adı altında farklı hizmetler veya aynı hizmete ait farklı protokol kullanımları birbirinden bağımsız SRV kayıtlarıyla tanımlanabilir.

Her iki etiket de alt çizgiyle başlar ve ilgili uygulama ya da protokol tanımında belirlenen adları kullanır. Örneğin _udp, teslim ve sıralama garantisi vermeden bağımsız veri birimleri taşıyan UDP protokolünü belirtir. Port numarası sorgu adına yazılmaz; DNS yanıtındaki SRV verisinin ayrı bir alanı olarak döner. Hedef sunucu adı da hizmetin sorgulandığı ana adla aynı olmak zorunda değildir; kayıt, istemciye başka bir sunucu adını hedef olarak bildirebilir.

SRV Kaydındaki Alanlar Ne Anlama Gelir?

Hizmet ve protokol etiketleri sorgulanan adın parçalarıdır. SRV kaydının veri bölümü ise öncelik, ağırlık, port ve hedef alanlarından oluşur. Aşağıdaki tablo bu iki grubu birlikte gösterir.

AlanAnlamı
HizmetSorgu adında, aranacak uygulama hizmetini belirtir.
ProtokolSorgu adında, hizmetin kullandığı protokolü belirtir.
ÖncelikDüşük sayılı hedeflerin önce denenmesini sağlar.
AğırlıkAynı öncelikteki hedeflerin göreli seçilme olasılığını belirler.
PortHedef sunucuda bağlantı kurulacak portu bildirir.
HedefAdres kayıtları sorgulanacak sunucunun alan adını belirtir.

SRV hedefi, başka bir ada yönlendiren CNAME kaydı olmamalı; doğrudan A veya AAAA kayıtlarına sahip olmalıdır. Tek SRV kaydının hedef alanında yalnız . bulunması, hizmetin o alan adı için sunulmadığını bildirir. Bu durum, SRV kaydının hiç bulunmamasından farklıdır; kayıt yokken başka bir bağlantı yönteminin denenip denenmeyeceğini ilgili uygulama protokolü belirler.

Öncelik ve Ağırlık Birlikte Nasıl Çalışır?

Öncelik ile ağırlık aynı işi yapmaz. Öncelik, hangi hedef grubunun önce değerlendirileceğini belirler; ağırlık ise yalnız aynı öncelik seviyesindeki kayıtların kendi aralarındaki seçimi etkiler. Bu nedenle yüksek ağırlıklı bir yedek kayıt, daha düşük öncelik sayısına sahip birincil grubun önüne geçmez.

Aşağıdaki kayıtlar çalışma mantığını gösterir. _ornek açıklama amacıyla seçilmiş bir hizmet etiketidir; gerçek yapılandırmada uygulamanın tanımladığı etiket kullanılmalıdır:

_ornek._tcp.example.net. 3600 IN SRV 10 70 8443 srv1.example.net.
_ornek._tcp.example.net. 3600 IN SRV 10 30 8443 srv2.example.net.
_ornek._tcp.example.net. 3600 IN SRV 20 0 8443 srv3.example.net.

Kayıtlardaki 3600, DNS verisinin önbellekte ne kadar süre tutulabileceğini belirten TTL değeridir ve saniye cinsindendir. IN İnternet sınıfını, 8443 ise hizmetin portunu belirtir.

Bu örnekte srv1 ve srv2 aynı öncelik seviyesindedir. 70 ve 30 ağırlıkları, ilk iki hedef arasında srv1'in daha yüksek göreli seçim olasılığına sahip olmasını ifade eder; bu değerler her kısa zaman aralığında kesin trafik yüzdesi garantisi değildir. Önceliği 20 olan srv3 ise 10 öncelikli hedeflere ulaşılamadığında sıraya girer.

Hedef Sunucu, Port ve Yedeklerin DNS Üzerinden Yönetimi

SRV sayesinde istemcinin kullandığı hizmet sorgu adı ile hizmeti gerçekten sunan sunucu birbirinden ayrılabilir. Yönetici, istemcilerin kullandığı hizmet sorgu adını değiştirmeden hedef sunucuyu veya portu DNS kaydında değiştirebilir. Ancak değişiklik açık bağlantıları yeni sunucuya taşımaz. DNS önbelleği eski kaydı TTL süresi boyunca tutabilir; bazı uygulamalar öğrendikleri bağlantı ayarlarını ayrıca sakladığından yeni bağlantıda bile hemen yeniden keşif yapmayabilir.

Bu mekanizma anlık sunucu yükünü ölçen bir dengeleme sistemi değildir. Ağırlık değeri DNS kaydında yayımlanan statik bir seçim bilgisidir; sunucunun o anda yoğun, yavaş veya erişilemez olduğunu kendiliğinden ölçmez. Bağlantının gerçekten kurulup kurulamayacağı, istemcinin seçilen hedefe erişebilmesine ve hizmetin belirtilen portta çalışmasına bağlıdır.