5 Mayıs 2008 Pazartesi

SQL Server 2005: Bağlantı Protokolleri

Not:
Bu yazının daha düzgün biçimlisine aşağıdaki adresten ulaşabilirsiniz:
http://www.ekremonsoy.net/makaleler/sql/protokoller/protokoller.aspx


Merhaba arkadaşlar,


Bir SQL Server veritabanı motoruna bağlanabilmeniz için, en az bir SQL Server protokolü kullanılabilir durumda olmalıdır. SQL Server' da, aynı anda birden fazla protokol kullanılabilir; ama istemciler SQL Server' a tek bir protokolü kullanarak bağlanırlar. Eğer istemcinin kullandığı program, SQL Server' ın hangi protokolü dinlediğini bilmiyorsa, o zaman çözüm olarak istemcinin sırayla değişik protokolleri denemesini sağlayabilirsiniz. SQL Server protokollerini kullanılabilir ve kullanılamaz yapmak için SQL Server Configuration Manager' ı kullanabilirsiniz. Aynı zamanda SQL Server 2005' te, SQL Server Surface Area Configuration aracını da kullanabilirsiniz. SQL Server 2005' te 4 adet protokol bulunmaktadır.

Bunlar: Shared Memory, TCP\IP, Named Pipes ve VIA protokolleridir. Size ilk önce bu protokollerden tek tek bahsedeceğim, son olarak da Named Pipes ve TCP\IP protokollerinin hangi şartlarda kullanılabileceğine dair genel bir öneride bulunacağım.


Shared Memory
Bu protokol en sade ve herhangi bir ayarı olmayan protokoldür. Bu protokolü, istemcilerinizin SQL Server' ınız ile bağlantı kurup bilgi alış-verişi yaptığı bir ortamda kullanamazsınız. Daha ziyade, testler için veya diğer protokollerde sorun yaşadığınızı düşündüğünüzde ve SQL Server' ınıza bağlanmanız gerektiğinde kullanabilirsiniz. Varsayılan olarak tüm SQL Server sürümlerinde kullanılabilir olarak gelen bir protokoldür.

Kullanımı iptal edilmediği sürece, SQL Server' ın üzerinde bulunduğunu sunucuya, o sunucudayken bağlanmak istediğinizde sistemin ilk deneyeceği protokol Shared Memory protokolüdür.


TCP\IP
TCP\IP, geniş çaplı olarak kullanılan bir protokoldür. Bu protokülü kullanarak, birbirine bağlı ağlar arası bilgisayarlar ile bağlantı kurmanız mümkündür. Birçok donanım tarafından desteklenen bir protokoldür. TCP\IP, ağ yönlendirme trafiği standartlarını ve gelişmiş güvenlik özelliklerini içerir. Bugünün piyasasında en çok kullanılan ve kabul gören protokoldür. TCP\IP protokolü, SQL Server 2005' in Express ve Developer Edition' ında varsayılan olarak kullanılamaz halde gelir. SQL Server 2005 Express Edition veya Developer Edition kurup, istemcilerinden SQL Server sunucularına bağlanmaya çalışıp bağlanamayan bir çok kullanıcı görüyorum her gün. Bu nedenle, bu yazıda bu noktayı da belirtmek istedim. Her protokol, her SQL Server sürümünde varsayılan olarak kullanılabilir veya kullanılamaz değildir. Her sürümde varsayılan ayarlar değişiyor.

Meselâ uygulamanızdan SQL Server' ınıza bu protokolü kullanarak bağlanmak istediğinizi varsayalım. İlk örneğimde bir varsayılan SQL Server portunu kullanarak (ki varsayılan port 1433' tür) bir Default Instance' a bağlandığınızı varsayacağım ve bu örneğe uygun bir Bağlantı Cümlesi (Connection String) yazacağım:

Örnek 1:
"Server = EKREM-PC; Database = Veritabanim; Integrated Security = Yes"

Eğer SQL Server Instance' ınız bir Named Instance ise ve farzedelim Instance adı "Yonetim" ve port numarası olarak da 10897 kullanılıyorsa, o zaman aşağıdaki Bağlantı Cümlesi kullanılabilir:

Örnek 2:
"Server = EKREM-PC\Yonetim, 10897; Database = Veritabanim; Integrated Security = Yes"

"Server" adı olarak IP de kullanabilirdiniz. O zaman da port numarasını virgül ile ayırarak yazmanız gerekirdi. Port numarasını kullanmak performans açısından daha yararlıdır. Aksi takdirde standart port numarası kullanılmadığı için, ilk önce Browser Servisi ile haberleşilmesi gerekirdi. Çünkü dinamik port kullanan SQL Server Instance' larının port numralarının alınabilmesi için istemci ilk önce Browser Servisiyle 1434UDP portundan haberleşir ve haberleşmek istediği SQL Server Insatnce' ının port numarasını alır ve bu bilgiye göre bağlantı kurar.


Named Pipes
Named Pipes LAN (Local Area Network)' lar için geliştirilmiş bir protokoldür. Hafızanın bir bölümü bir işlem tarafından veriyi diğer işleme aktarmak için kullanılır, bu sayede bir işlemin çıktısı, diğerinin girdisi olur. İkinci işlem yerel (İlk olduğu için aynı bilgisayarda) veya uzaktan (ağdaki bir bilgisayardan) olabilir.

Named Pipe protokolünü kullanarak SQL Server' ınıza bağlanmak için aşağıdaki Bağlantı Cümlesini kullanabilirsiniz (Default Instance için varsayılan değerler gözönüne alınarak yazıyorum):

Örnek 1:
\\.\pipe\sql\query

"." değeri, bağlantının yerel bir bağlantı olduğunu gösteriyor. "pipe" değeri, bağlantının bir Named Pipe bağlantısı olduğunu, "sql\query" değeri ise Pipe' ın adını gösteriyor.

Bir Named Instance için ise aşağıdaki Named Pipe adresi kullanılabilir:

Örnek 2:
\\\pipe\MSSQL$\sql\query.

SQL Server, iletişim için 445 numaralı portu kullanır. Bu nedenle Windows Güvenlik Duvarında bu portun izinli olmasına dikkat edin.


VIA
VIA (Virtual Interface Adapter) protokolü VIA donanımıyla birlikte çalışır. VIA hakkında daha fazla bilgi için, size VIA donanımını satan firma ile bağlantı kurmalısınız.


Pratik olarak Named Pipes mı yoksa TCP\IP mi?
TCP\IP, LAN, WAN ya da Çevirmeli Ağ (Dial-up) gibi yavaş ağ bağlantılarında tercih edilebilir, Named Pipes ise hızın sorun olmadığı ağ bağlantılarında daha iyi bir işlevsellik sunar, kullanımı ve yapılandırması daha kolaydır.

Hangisinin size daha uygun olduğunu anlamak için uygulanabilecek en iyi yöntem testtir. İki protokolü de ortamınızda test etmenizi tavsiye ederim. Hangisinden daha çok performans alırsanız, onu tercih edin.


Bir Protokolün Kullanımı
Uygulamanızın kullanması için seçtiğiniz SQL Server protokolünün çalışabilmesi için, seçtiğiniz protokolün sunucu tarafında da, istemci tarafında da kullanılabilir ve etkin olması gerekmektedir. Sunucu aynı anda birden çok protokolü dinleyebilir. İstemciler ise daha önceden de değindiğim gibi sadece bir tane protokolden sunucuya bağlanabilirler.



Ekrem Önsoy


Kaynak:
http://msdn.microsoft.com/en-us/library/ms187892.aspx

2 yorum:

İyi Orta Gol Olur dedi ki...

Merhabalar,
Bu konu hakkında bir sorum olacak. Linked server ile başka bir server'a bağlanırken kontrollerimi yaptığımızda tcp_49790,tcp_50428,tcp_51491 gibi portları kullanarak server'a connection oluşturduğunu görüyoruz. Bu portları kapatıp kontrollettiğimizde dbye bağlanamadığını tespit ettik. Sql Postu olan 1433 portu üzerinden değil de bu gibi farklı portlardan veritabanına bağlanması neden kaynaklanmaktadır? Bilginiz var ise paylaşabilir misiniz?

Teşekkürler.

Ekrem Önsoy dedi ki...

Merhaba,

Bunlar gibi portlar genelde dinamik port kullanıldığında oluşturuluyorlar. Dinamik portlar varsayılan olarak Named Instance'lar tarafından kullanılır. Eğer ayarlanırsa, Default Instance tarafından da kullanılabilir. Bununla birlikte, dinamik port kullanımı birçok durumda iyi bir pratik değildir.

Linked Server konusunda ise yapılandırmayı bilmek gerekiyor tabii ki.