Java, network (ağ) işlemleri için çok gelişmiş bir API desteği sunar. Java programlama dilinin popülaritesi büyük ölçüde platform bağımsız uygulamalar geliştirilmesine izin vermesinden kaynaklanır. Bunun için de, internet gibi devasa bir ağda bulunan çeşitli platformlarda, Java uygulamalarının çalıştırılması oldukça önemlidir. Bunun için Java, ağ uygulamalarının kolay ve gelişmiş bir şekilde yapılabilmesi için içeriğinde pekçok yardımcı kütüphane barındırır.
Java, internet üzerinden iletişim kurulabilmesi için TCP/IP ve UDP soketlerinin her ikisine de destek verir.
Ağ Temelleri
Internet üzerinde bulunan bilgisayarlar, birbirleri ile TCP/IP ya da UDP soketlerini kullanarak iletişim kurarlar. Network konusu bilgisayar bilimlerinde oldukça kapsamlı bir konudur ve bu yazıda network temelleri veya katmanlı mimarinin temellerine girilmeyecektir. Fakat bilmeniz gereken en önemli şey, Java ile network programlama yaparken, aslında uygulama katmanı (application layer) üzerinde yazılımlarınızı geliştirirsiniz. Bunun altında daha alt seviyede kalan katmanlar, bu yazının konusu değildir ve Java’da ağ uygulamaları yapabilmek için bu katmanların detaylarını bilmek zorunda da değilsiniz.
Java, java.net paketinde network için gerekli olan tüm işlemleri halleden sınıfları barındırır. java.net içinde bulunan sınıfların hiçbiri, herhangi bir platforma bağlı değildir. Linux, Windows, Mac gibi her platformda paket içerisinde bulunan sınıfları kullanabilir uygulamalarınızı geliştirebilirsiniz.
Daha önce de belirttiğimiz gibi, bilgisayarlar ağ üzerinde TCP ve UDP adı verilen iki farklı soket yapısını kullanarak haberleşirler. Bunlardan herhangi birini seçerek, uygulamalarınızda kullanabilir, internet üzerindeki diğer bilgisayarlar ile iletişime geçebilirsiniz. Fakat, bu iki soket türü birbilerinden farklı yapılardır ve uygulamalarınızda bu soketleri nerede ve nasıl kullanacağınıza karar vermek için, temel olarak TCP ve UDP soketlerinin tam olarak ne olduğunu bilmemiz gerekmektedir.
TCP
Ağ üzerinde bulunan iki bilgisayar birbirileri ile “güvenli” bir şekilde haberleşmek istediklerinde TCP soketleri kullanılır. TCP (Transmission Control Protocol), bilgisayarlar arasında “güvenli” bağlantılar oluşturabilmek için kullanılan standart bir protokoldür. Burada “güvenli” kelimesinden kasıt, bilgisayarların birbirleri ile haberleşmelerinde gönderilen ve alınan verilerin, kritik öneme sahip olmasıdır. Yani, bir bilgisayardan diğer bilgisayara gönderilen verilerin, sırası ve iletilmesi kritik öneme sahiptir. Veriyi gönderen bilgisayar, alan bilgisayarın verileri aldığından ve verilerin gönderilme sırasında herhangi bir bozukluk olmadığından emin olmak zorundadır.
TCP, bağlantı tabanlı (connection based communication) haberleşme sunar.
Hypertext Transfer Protocol (HTTP), File Transfer Protocol (FTP) ve Telnet gibi protokoller, haberleşme için TCP soketlerini kullanılırlar.
“Güvenli” kelimesini bir örnekle açıklamak istersek, internet tarayıcınızın adres çubuğuna yazdığınız bir adresden veri istenirken, gelen verilerin gönderilme sırasında olması TCP soketlerrde kritik öneme sahiptir. HTTP ve FTP gibi protokollerin neden TCP soketlerini kullandığını kavramak oldukça basitdir. Eğer sunucudan gelen verilerde herhangi bir kayıp yada sırasında bir bozulma olursa, web sayfalarında görüntülemelerde aksaklık veya indirilen dosyalarda bozulmalar meydana gelir. Bu da istenmeyen bir durumdur.
UDP
UDP soket türü kullanarak haberleşen bilgisayarların, gönderilen verilerin karşı bilgisayarda alındığının bir garantisi yoktur. Yani UDP, internet üzerinden bilgisayarların “güvenli olmayan” bir şekilde haberleşmesine olanak verir. UDP soketleri kullanarak haberleşen uygulamalar, birbirlerine veri gönderirken “datagram” adı verilen bağımsız paketler göndererek aralarında haberleşebilirler.UDP, TCP gibi bağlantı tabanlı (connection based) değildir. UDP Datagram tabanlı bir haberleşme sunar. (datagram based communication)
Olayı daha iyi anlamak için, posta servislerini örnek olarak gönderebiliriz. Gönderici mektubu yazar ve posta servisine göndererek, mektubun alıcıya ulaştırılmasını bekler. Ancak, posta servisleri mektubu gönderen kişiye, mektubun alıcıya ulaştırılıp ulaştırılmadığı konusunda herhangi bir geri dönüş yapmaz. UDP soketleri de aynen bu şekilde çalışırlar.
Aklınıza, “güvenli” bir bağlantı kurmak varken, neden “güvensiz” bir bağlantı kuran UDP soketlerinin kullanıldığı gelebilir. Bunun nedeni, UDP paketleri TCP gibi ekstra güvenlik isteyen soketlerin oluşturduğu paketlerden çok daha hızlı bir şekilde iletilmesidir. TCP paketlerinde verinin gönderilip gönderilmediği konusunda pekçok kontrol işlemi yapılmaktadır. Bunlar için de gönderilen TCP paketlerine ekstra bilgiler işlenmektedir. Ancak, pekçok uygulama için verinin gönderilip gönderilmediği kritik bir konu değildir. Bunun yerine çok daha hızlı olan UDP soket sistemini kullanmayı tercih edebilirler.
Peki Port Ne Demek?
Şimdi şöyle düşünün. Bilgisayarınızda interneti kullanarak çeşitli protokoller üzerinden, internet üzerindeki diğer bilgisayarlarla haberleşen kaç tane program var? Web tarayıcıs, anlık mesajlaşma programları (MSN gibi), antivirüs programlarınız vs.. Bu programların hepsi, internet üzerinden eş zamanlı olarak bağlantı kurup veri gönderip veri alabiliyorlar. Peki, bilgisayarların tek bir fiziksel bağlantısı olduğunu düşünürsek, tüm bu programlar gelen verilerin kendilerine ait olduklarını nasıl bilip işlem yapıyorlar? Cevap basit, portlar sayesinde.
İnternet üzerinden gönderilen veriler, yukarıdaki soketlernden birini kullanarak haberleşiyor demiştik. Aslında veriler, soket sistemlerin oluşturdukları paketler aracılığı ile hedef bilgisayarlara iletiliyorlar. Peki bu paketlerde hangi bilgiler bulunuyor? İnternet üzerinden haberleşen her uygulama kendine özgü bir “Port” kullanır. Burada “Port” dan kasıt uygulamaya özgü 16 bitlik bir sayıdan ibaretdir. Bağlantı tabanlı (connection based communication) bir haberleşme sunan TCP gibi soketler, uygulamanın gönderdiği veriyi paketlerken, 32 bitlik IP adresi yanında, uygulamanın kullandığı port numarasını da pakete ekler (bind). Bu sayede client ve sunucu birbirlerinin gönderdiği paketleri herhangi bir karışıklık olmadan alabilirler ve doğrudan kurulan bir bağlantı sayesinde haberleşebilirler.
Datagram tabanlı bağlantı haberleşme sunan UDP ise, paketlerde port numarasını belirterek, gelen paketleri paket üzerinde bulunan port numarasını kullanan uygulamalara yönlendirir. UDP kullanılarak gönderilen ve gelen paketler bağımsız datagram paketleri oldukları için, uygulamalar ile sunucular arasında doğrudan bir bağlantı kurulmaz. Bu yüzden gelen paketler UDP tarafından bizzat, paket üzerindeki port numalarına göre uygulamalara dağıtılır.
Portlar hakkında söylemem gereken bir önemli nokta da şudur. Port numaraları 16 bitlik sayılar ile temsil edildiğinden, port numaraları 0 ile 65, 535 ile sınırlıdır. Bunun haricinde bir numarayı uygulamalarınıza port numarası olarak atayamazsınız. Diğer yandan 0 ile 1023 arasındaki port numaraları, HTTP, FTP gibi bilinen ve popüler servisler için ayrılmıştır. Bu aralıktaki port numaraları iyi-bilinen-portlar (well-known-ports) statüsünde olduğu için bu aralıktaki port numaralarını da uygulamalarınızda kullanamazsınız.
Network Sınıfları
java.net paketi içinde bulunan tüm sınıflar, TCP ya da UDP soketlerini kullanarak internet üzerinden haberleşebilir. Bu paket içerisinde bulunan URL, Socket ve ServerSocket sınıfları TCP soketlerini kullanırken, DatagramPacket, DatagramSocket veMulticastSocket sınıfları UDP soket kullanırlar.
RSS Feed
24 Nisan 2010
fatih
Konu
Etiketler: 
merhabalar,hem java da hem de network konusunda yeni olan fakat gerçekten öğrenmek isteyen birisiyim,konuların devamını getirebilirseniz benim gibi özellikle hem ingilizceyi hem de konuyuyu anlamakta sıkıntı çeken arkadaşlara çok faydalı olacağına inanıyorum.
iyi çalışmalar..