LinkedIn FriendFeed Twitter

Network Üzerinde Gerçeklenen Uygulamalar - ICMP

by Ordinaryus 30. September 2009 22:37

Network için uygulama uygulama geliştirirken kullanılacak olan sınıfları artık daha pratiğe yönelik uygulamalarda kullanma zamanı geldi. Burada temel olarak network cihazlarının kullanılması ve onlardan bilgi alınması şeklinde uygulamalar yapacağız.   

ICMP (Internet Control Message Protocol)network cihazlarının verdiği hata mesajlarının alınması ve yorumlanması amacıyla kullanılan bir uygulamadır. Bunun dışında cihazların döndürdüğü belirli mesaj tiplerini kullanarak farklı uygulamalar yapmakta mümkündür.

ICMP uygulamaları da IP üzerinden haberleşmekte ancak kullanılan protokol TCP veya UDPden farklıdır. ICMP paketleri daha farklı bir yapıya sahiptir ve uygulama için yazılımcı tarafından yaratılmaları gerekmektedir. Bu amaçla bizde ICMP sınıfımızı yazarak kullandık.

clip_image002

ICMP paketlerinde de belirli alanlar özelleşmiştir ve bu alanların kullanılması ile paketteki verilerin okunması, hatalı gönderim olup olmadığı gibi bilgilere erişilebilir. Tip, kod, checksum ve mesaj alanları bunların başında gelir.

Pek çok çeşit tipte ICMP paket tipi vardır ve bunların bilgileri 1bytelık bir alanda tutulmaktadır. Bu paket tiplerine ilişkin bilgiler ise yorumlanarak uygulamalarımızda kullanılmaktadır.

Type Code

Description

0

Echo reply

3

Destination unreachable

4

Source quench

5

Redirect

8

Echo request

11

Time exceeded

12

Parameter problem

13

Timestamp request

14

Timestamp reply

15

Information request

16

Information reply

Örnek verecek olursak time exceed paketleri sayesinde bir paketin kaynak noktasına ulaşana kadar olan cihaz sayısını TTL verileri kullanarak bulan bir trace uygulaması geliştirebiliriz.

Staj kapsamında ICMP uygulaması olarak birden fazla fonksiyonlu bir GUI tasarladım. Burada temel olarak iş yapan kısım ICMP sınıfıdır. Bunun için oluşturulmuş kod parçacığı aşağıda yer almaktadır.

    class ICMP

    {

        public byte Type;

        public byte Code;

        public UInt16 Checksum;

        public int MessageSize;

        public byte[] Message = new byte[1024];

 

        public ICMP()

        {

        }

 

        public ICMP(byte[] data, int size)

        {

            Type = data[20];

            Code = data[21];

            Checksum = BitConverter.ToUInt16(data, 22);

            MessageSize = size - 24;

            Buffer.BlockCopy(data, 24, Message, 0, MessageSize);

        }

 

        public byte[] getBytes()

        {

            byte[] data = new byte[MessageSize + 9];

            Buffer.BlockCopy(BitConverter.GetBytes(Type), 0, data, 0, 1);

            Buffer.BlockCopy(BitConverter.GetBytes(Code), 0, data, 1, 1);

            Buffer.BlockCopy(BitConverter.GetBytes(Checksum),0,data,2, 2);

            Buffer.BlockCopy(Message, 0, data, 4, MessageSize);

            return data;

        }

 

        public UInt16 getChecksum()

        {

            UInt32 chcksm = 0;

            byte[] data = getBytes();

            int packetsize = MessageSize + 8;

            int index = 0;

            while (index < packetsize)

            {

                chcksm += Convert.ToUInt32(BitConverter.ToUInt16(data, index));

                index += 2;

            }

            chcksm = (chcksm >> 16) + (chcksm & 0xffff);

            chcksm += (chcksm >> 16);

            return (UInt16)(~chcksm);

        }

    }

clip_image004

Ping atma işlemi için yazılmış olan arayüz yukarıdaki şekildedir. Burada bir cihaza ICMP Echo Request paketi yollanmaktadır. Daha sonra cihaz eğer cevap aldıysa ICMP Echo Request paketi yollayarak cevap vermektedir.

clip_image006

Bu amaçla yazılan uygulamanın kodları ise aşağıdaki şekildedir.

        private void btnPingBasla_Click(object sender, EventArgs e)

        {

            pinger = new Thread(new ThreadStart(sendPing));

            pinger.IsBackground = true;

            pinger.Start();

           

        }

 

        private void btnPingDur_Click(object sender, EventArgs e)

        {

            pinger.Abort();

            lstPingSonuc.Items.Add("Ping stopped");

        }

 

        private void sendPing()

        {

            IPHostEntry iphe = Dns.Resolve(tbHost.Text);

            IPEndPoint iep = new IPEndPoint(iphe.AddressList[0], 0);

            EndPoint ep = (EndPoint)iep;

            ICMP packet = new ICMP();

            int recv, i = 1;

            packet.Type = 0x08;

            packet.Code = 0x00;

            Buffer.BlockCopy(BitConverter.GetBytes(1), 0, packet.Message, 0, 2);

            byte[] data = Encoding.ASCII.GetBytes("Selam");

            Buffer.BlockCopy(data, 0, packet.Message, 4, data.Length);

            packet.MessageSize = data.Length + 4;

            int packetsize = packet.MessageSize + 4;

           

            lstPingSonuc.Items.Add("Pinging " + tbHost.Text);

                      

            while (true)

            {

                packet.Checksum = 0;

                Buffer.BlockCopy(BitConverter.GetBytes(i), 0, packet.Message, 2, 2);

                UInt16 chcksum = packet.getChecksum();

                packet.Checksum = chcksum;

                pingstart = Environment.TickCount;

                sock.SendTo(packet.getBytes(), packetsize, SocketFlags.None, iep);

                try

                {

                    data = new byte[1024];

                    recv = sock.ReceiveFrom(data, ref ep);

                    pingstop = Environment.TickCount;

                    elapsedtime = pingstop - pingstart;

                    lstPingSonuc.Items.Add("reply from: " + ep.ToString() + ", seq: " + i +

                         ", time = " + elapsedtime + "ms");

                }

                catch (SocketException)

                {

                    lstPingSonuc.Items.Add("no reply from host");

                }

                i++;

                Thread.Sleep(3000);

            }

        }

 

Ping işlemine oldukça benzeyen bir diğer işlem ise route işlemidir. Bu işlemde hedef adresin bizden ne kadar uzakta olduğu ve bu cihaza hangi cihazlar üzerinden geçildiği önemlidir. Burada temel prensip network üzerinde aktarılmakta olan paketlerin yaşama süresi olarak ta adlandırılan süreçtir. Bir network paketi her bir cihazdan geçtiğinde bu süre 1 azalmaktadır. Böylece hedefe vardığında kaç cihaz geçilmiş olduğu bilinmektedir.

Buradaki çalışma mantığı şu şekildedir.  Echo reply paketi elimize ulaşana kadar TTL değerleri artan ve time exceet paketleri yollayan bir uygulama yazmaktır. Bu amaçla yapılan GUI ve kodları aşağıda yer almaktadır.

clip_image008

 

        private void btnTrace_Click(object sender, EventArgs e)

        {

            tracer = new Thread(new ThreadStart(TraceYap));

            tracer.IsBackground = true;

            tracer.Start();

           

        }

 

        private void TraceYap()

        {

         

            host = new Socket(AddressFamily.InterNetwork,

 SocketType.Raw, ProtocolType.Icmp);

            IPHostEntry iphe = Dns.Resolve(tbTrace.Text);

            IPEndPoint iep = new IPEndPoint(iphe.AddressList[0], 0);

            EndPoint ep = (EndPoint)iep;

            ICMP packet = new ICMP();

            packet.Type = 0x08;

            packet.Code = 0x00;

            packet.Checksum = 0;

            Buffer.BlockCopy(BitConverter.GetBytes(1), 0, packet.Message, 0, 2);

            Buffer.BlockCopy(BitConverter.GetBytes(1), 0, packet.Message, 2, 2);

            data = Encoding.ASCII.GetBytes("test packet");

            Buffer.BlockCopy(data, 0, packet.Message, 4, data.Length);

            packet.MessageSize = data.Length + 4;

            int packetsize = packet.MessageSize + 4;

            UInt16 chcksum = packet.getChecksum();

            packet.Checksum = chcksum;

            host.SetSocketOption(SocketOptionLevel.Socket,

                       SocketOptionName.ReceiveTimeout, 3000);

            int badcount = 0;

            for (int i = 1; i < 50; i++)

            {

                host.SetSocketOption(SocketOptionLevel.IP,

                      SocketOptionName.IpTimeToLive, i);

                timestart = Environment.TickCount;

                host.SendTo(packet.getBytes(), packetsize, SocketFlags.None, iep);

                try

                {

                    data = new byte[1024];

                    recv = host.ReceiveFrom(data, ref ep);

                    timestop = Environment.TickCount;

                    ICMP response = new ICMP(data, recv);

                    if (response.Type == 11)

                        lstTrace.Items.Add("hop " + i.ToString() + ": response from " + ep.ToString() + ", " + Convert.ToString(timestop - timestart) + "ms");

                    if (response.Type == 0)

                    {

                        lstTrace.Items.Add(ep.ToString() + " reached in " + i.ToString() + " hops, " + Convert.ToString(timestop - timestart) + "ms.");

                        break;

                    }

                    badcount = 0;

                }

                catch (SocketException)

                {

                    lstTrace.Items.Add("hop " + i.ToString() + ": No response from remote host");

                    badcount++;

                    if (badcount == 5)

                    {

                        lstTrace.Items.Add("Unable to contact remote host");

                        break;

                    }

                }

            }

            host.Close();

        }

Tags:

Network Programming

Network Programlama Uygulamaları

by Ordinaryus 30. September 2009 22:33

Netwok uygulamaları başlığı altında genel olarak farklı tiplerde very aktarımı uygulamaları yapacağız. Bunların başınca TCP Server ve Clientlar ve ardından UDP soket haberleşmesi gelicek. Daha sonar ICMP ile ping atma işlemleri, trace route işlemlerinde ttl kavramını inceleyeceğiz.

TCP Server, TCP bağlantının veri dağıtıcısı olarak rol oynamaktadır. TCP Server olmak üzere yazılan programda temelde gerçekleşecek 4 temel işlem bulunmaktadır.

1.       Soketin yaratılması

2.       Bir endpoint ile bind edilmesi

3.       Socket’in dinleme modunda çalışmaya başlaması

4.       Dışarıdan gelen bağlantı isteklerini kabul etmek

TCP Soketimizi oluşturmak için öncelikle bir endpoint ve soket oluşturulması gerekmektedir. Bind ve listen işlemleri yapılacaktır.

           

IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 9050);

Socket newsock = Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

newsock.Bind(ipep);

newsock.Listen(10);

Socket client = newsock.Accept();

 Burada bahsedilen işlemler yapılmış ve son olarak ta gelen bağlantı istekleri kabul edilmiştir. Bundan sonra karşılıklı olarak bağlantı sağlandıktan sonra veri aktarılması başlayacaktır. Bunun için soketimizde kabul gören client soket nesnesinin bir network stream ile kullanılması ve bu sınıfa ait metodlar yardımıyla veri aktarılması gerekmektedir.

NetworkStream ns = new NetworkStream(client);

StreamWriter  sw = new StreamWriter(ns);

sw.WriteLine(tbMesaj.Text);

sw.Flush();

  

clip_image002

Bu programın test edilmesi ise komut satırından bir telnet bağlantısı sağlanarak yapılabilir. Bunun için çalıştırdan cmd yazarak açılan ekrana telnet [IP adresi] [port] yazarak bağlantı sağlanır ve TCP Serverdan yollanan verilerin izlenmesi sağlanmaktadır.

Burada bağlantı sağlandıktan yazılan form uygulamasında metin kutuları aktif olmakta ve girilen metinlerin aktarılması sağlanmaktadır.

clip_image004

TCP Client (istemci) uygulamalarında ise karşı tarafta bulunan bir servera bağlantı sağlanması ve ondan aktarılmakta olan verilerin alınması amaçlanmaktadır.

TCP Client oluşturulurken temelde gerçekleştirilmesi gereken 2 işlem bulunmaktadır. Bunlar

1.       Soket yaratılması

2.       Uzak bir makinadaki sokete bağlantı sağlanması

Bu işlemlerin sonucunda uzak bilgisayardan alınan verilerin elde edilmesi sağlanmaktadır.

        Socket server;

        EndPoint Remote;

        private void btnBaglan_Click(object sender, EventArgs e)

        {

            byte[] data = new byte[1024];

            string input, stringData;

            IPEndPoint ipep = new IPEndPoint(IPAddress.Parse(tbIp.Text), Convert.ToInt32(tbPort.Text));

            server = new Socket(AddressFamily.InterNetwork,SocketType.Dgram, ProtocolType.Udp);

            string welcome = "Hello, are you there?\n";

            data = Encoding.ASCII.GetBytes(welcome);

            server.SendTo(data, data.Length, SocketFlags.None, ipep);

            IPEndPoint Sender = new IPEndPoint(IPAddress.Parse(tbIp.Text), 0);

            Remote = (EndPoint)Sender;

            data = new byte[1024];

            recv = server.ReceiveFrom(data, ref Remote);

            rtbMesaj.Text += "Message received from :"+ Remote.ToString() + "\n";

            label1.Text += Remote.ToString();

            rtbMesaj.Text += (Encoding.ASCII.GetString(data, 0, recv));

            server.SendTo(Encoding.ASCII.GetBytes(input), Remote);

            data = new byte[1024];

            recv = server.ReceiveFrom(data, ref Remote);

            stringData = Encoding.ASCII.GetString(data, 0, recv);

            rtbMesaj.Text += stringData + "\n";

        }

 

clip_image006

UDP bağlantı TCP üzerinde oluşan bazı problemlerden ötürü kullanılmaya başlanmıştır. Öncelikle veri kaybı önemli olan koşullarda TCP kullanılmasının öneminden bahsetmiştik ancak bir yer istasyonu ile haberleşme sağlanacağı durumda ve anlık bilgilerin iletilmesi önemli olan koşullarda yapılması gereken en önemli şey bu bilgilerin kayıplar ihmal edilerek ancak gerçek zamanlılık sağlanarak yapılması gerekmektedir. Bu nedenle UDP iletişim kullanılmaktadır.

UDP bağlantının diğer farklarından biri connectionless olması yani TCPdeki gibi client server olarak eşleşmiş soketlerden ziyade burada daha genele yönelik bir işlem mevcuttur. TCPde bind edildikten sonra diğer sokete yollanan mesajın alınıp alınmadığına dair bir acknowledge alınmaktadır. Ancak UDPde böyle bir sorun yoktur. TCPdeki Send metodunun aksine UDPde SentTo metodu kullanılmakta veri bir sokete yollanmakta ancak alınıp alınmadığı ile ilgilenilmemektedir.

Bu amaçla UDP test etmek amacıyla 2 adet UDP console programı yazılmıştır. Karşılıklı olarak iletişime geçmeleri sağlanmakta ve buradan UDP programı uygulaması gerçekleştirmiş olmaktayız.

Öncelikle UDP ile haberleşmekte olan bir UDP Server uygulamamızı konsol üzerinde gerçekleştirdik. Bu uygulamaya bağlanan diğer UDP uygulamalarına istenen mesajlar yollanmaktadır. Bu uygulamada kullanılan kodlara bakacak olursak.

static void Main(string[] args)

        {

            int recv;

            string input;

            byte[] data = new byte[1024];

            IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 8080);

            Socket newsock = new Socket(AddressFamily.InterNetwork,

                    SocketType.Dgram, ProtocolType.Udp);

            newsock.Bind(ipep);

            Console.WriteLine("Istemci bekleniyor...");

            IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);

            EndPoint Remote = (EndPoint)(sender);

            recv = newsock.ReceiveFrom(data, ref Remote);

            Console.WriteLine("Message received from {0}:", Remote.ToString());

            Console.WriteLine(Encoding.ASCII.GetString(data, 0, recv));

            string welcome = "Hoşgeldin..";

            data = Encoding.ASCII.GetBytes(welcome);

            newsock.SendTo(data, data.Length, SocketFlags.None, Remote);

            while (true)

            {

                data = new byte[1024];

                recv = newsock.ReceiveFrom(data, ref Remote);

 

                Console.WriteLine(Encoding.ASCII.GetString(data, 0, recv));

                input = Console.ReadLine();

                if (input == "exit")

                    break;

                newsock.SendTo(data, recv, SocketFlags.None, Remote);

            }

 

        }

  Burada önemli olan nokta yaratılan soketin ne tür bir soket olduğunun belirtilmesidir. ProtocolType.Udp yazılarak bunun bir UDP soketi olarak tanımlanmış olduğunu anlıyoruz. Sonrasında ise karşılıklı veri iletişimine geçilmektedir.

Client olarak çalışan uygulamada ise text ve video stream alıcak şekilde düzenlenmiştir. Burada video dosyasını alarak soket üzerinden aktaran uygulamayı da inceleyeceğiz.

        static void Main(string[] args)

        {

            byte[] data = new byte[1024];

            string input, stringData;

            IPEndPoint ipep = new IPEndPoint(

                    IPAddress.Parse("127.0.0.1"), 8080);

            Socket server = new Socket(AddressFamily.InterNetwork,

                    SocketType.Dgram, ProtocolType.Udp);

            string welcome = "Ben Client..\n";

            data = Encoding.ASCII.GetBytes(welcome);

            server.SendTo(data, data.Length, SocketFlags.None, ipep);

            IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);

            EndPoint Remote = (EndPoint)sender;

            data = new byte[1024];

            int recv = server.ReceiveFrom(data, ref Remote);

            Console.WriteLine("Message received from {0}:", Remote.ToString());

            Console.WriteLine(Encoding.ASCII.GetString(data, 0, recv));

            int sayac = 0;

            StreamWriter sw;

            while (true)

            {

                sw = new StreamWriter("C:\\ciktilar\\ciktiPS"+ Convert.ToString(Math.Ceiling((int)sayac/1024.0))+".txt");

                data = new byte[1024];

                recv = server.ReceiveFrom(data, ref Remote);

                stringData = Encoding.ASCII.GetString(data, 0, recv);

 

                for (int i = 0; i < recv; i++)

                {

                     Console.Write(sayac.ToString() + "      ");

                     sw.Write(sayac.ToString() + "      ");

                     sw.WriteLine(hexYap(Convert.ToInt16(stringData[i])));

                     Console.WriteLine(hexYap(Convert.ToInt16(stringData[i])));

                     sayac++;

                   

                }

                sw.Close();

                //Console.WriteLine("Veri Geldi");

            }

 

            Console.WriteLine("Client durdu");

            server.Close();

        }

 

Burada da benzer şekilde bir UDP soketi oluşturulmuş ve bunların karşılıklı iletişiminde dinleyici olarak çalışması diğer kaynaktan gelen verileri almaya çalışması amaçlanmıştır. Aynı zamanda gelen Video Streamin incelenmesi içinde bunların paketler halinde dosyalanması sağlanmıştır. Bu sayede daha sonra MPEG Transport Stream verilerinin doğruluğunu inceleme fırsatı bulacağız.

clip_image008

 

Buraya kadar olan kısımda TCP ve UDP üzerine uygulamalar yapma fırsatı bulduk bundan sonrasında ise daha özel network uygulamaları olan ICMP ile ilgili birkaç uygulama yapacağız. Burada kazanılan bilgilerin faydalı bir şekilde kullanılması bundan sonraki kısımda gerçekleşecektir.  

Tags:

Network Programming

Network Programlama Kavramları 2

by Ordinaryus 30. September 2009 22:30

Soket programlama başlarda UNIX sistemler için Berkeleyde geliştirilmiş olsa da diğer sistemler içinde temel prensipler sabit kalarak diğer sistemler içinde uyarlanmıştır. Burada temel olarak sistemlerde soket oluşturulması bağlantı sağlanması ve bunların birbirine Bind edilmesi işlemleri ile takip edilen bir prosedür işlemektedir.

Aşağıdaki şekillerde de görüldüğü üzere farklı tipteki bağlantı türleri için server-client arasında gerçekleşebilecek işlemler belirtilmiştir. Burada socketlerin tanımlanması, bind edilmesi ve bağlantının sağlanması işlemleri sonucunda arada veri transferi başlatılabilmektedir.

Soket programlama daha sonra Windows için Winsock kütüphaneleri ile çalışmaya devam etmiş. Son olarak Winsock 2.0 sürümü çıkmıştır. Ancak C# ile bu kütüphaneleri kullanmamıza gerek kalmadan .NETin sunmuş olduğu isim uzayları kullanılmıştır.  

clip_image002clip_image004

C# Network Programlama Sınıfları

Network programlama için .NET altında bir çok yapı ve metot tanımlanmıştır. Bunların içerisinde socket yaratma ve IP adresi, endpoint tanımlamaları da bulunmaktadır.

IPAdress : Burada belirtilen yapıda Parsa metodu sayesinde verilen string uygun biçimde IP olarak dönüştürülmektedir.

IPAddress.Parse(“160.75.10.222”);

 Belirli bir kalıptaki IP adresleri haricinde bulunulan subnetwork içersinde bağlı bulunan  diğer makinelere broadcast yapmak gibi işlemlerde de bize kolaylık sağlanmıştır.

IPAddress.Any : Bulunulan ağdaki herhangi bir cihazı temsil için kullanılır

IPAddress.Broadcast : Local ağdaki broadcast adresini temsil eder.

IPAddress.Loopback : Local ağdaki loopback adresini temsil eder.

Yapılacak olan uygulamalarda her zaman IP adres yeterli olmayacaktır burada IP adresi ve bunun üzerinde özelleşmiş bir port numarası kullanılması gereken uygulamaları çoğunlukla kullanacağız. Burada bizim için IPEndPoint tipinde bir nesne sağlanmıştır ve istenen IP adres ve port ikilisi kullanılmaktadır.

IPEndPoint ipep = new IPEndPoint(IPAddress.Parse(“160.75.20.222”),8030);

 

System.Net.Sockets ad uzayı altında bulunan türler ve metodlar yardımıyla kolaylıkla Soket nesneleri yaratılabilmekte ve kullanılmaktadır.

Soket sınıfından bir nesne türetmek için aşağıdaki gibi bir constructor metodu kullanabilirsiniz.

Socket(AddressFamily af, SocketType st,ProtocolType pt)

 

Burada Socket üzerinden yapılabilecek olan haberleşme tipleri ve uygulanan protokoller verilmiştir. 

 

Socket Tipi

Protokol Tipi

Tanım

Dgram

Udp

Connectionless iletişim

Stream

Tcp

Connection-oriented iletişim

Raw

Icmp

Internet Control Message Protocol

Raw

Raw

Plain IP packet communication

 

Buraya kadar olan kısımda genel olarak .NET altında oluşturulmuş olan sınıflar ve bunların özelliklerine değinmeye çalıştık. Buradaki metodlar ve uygulamaları daha ileride yapılmış olan örnek projeler arasında verilecektir. Bu sayede kullanımları sağlanmış olan pek çok basit network uygulaması yapılacaktır.

Tags:

Network Programming

Network Programlama Kavramları

by Ordinaryus 30. September 2009 22:20

IP (Internet Protokol)

Internet üzerinde haberleşmemizi sağlamak amacıyla network paketlerinin verilen 2 nokta arasında belirli bir formatta taşınması gerekmektedir. Alıcı ve gönderici bilgiler, verilerin bütünlüğünün korunması, hatasız yollanması gibi koşulların gerçeklenmesi belirli kuralların tanınmasını gerekli kılmıştır.

Günümüzde IP adresler olarak tanımlan çevremizde dış dünyayla iletişim halinde olan neredeyse tüm cihazlarda IP adresler denen bilgiler tanımlanmaktadır. Bu sayede cihazların bağlı oldukları ortamda diğer cihazlarla haberleşebilmesi sağlanmaktadır. IP adreslerini tanımlanmasında farklı versiyonlar bulunmaktadır. Bu versiyonlar cihaz sayısının artması sonucu varyasyonları arttırmaya yönelik olarak doğmuştur. Şuan kullanılmakta olan IPv4 yavaş yavaşyerini IPv6ya bırakmaktadır. Bunun dışında güvenlik ve sağlıklı bir network oluşturulmasında gerekli olmakta olan subnetworklerin meydana getirmesinde de avantajlar sağlamaktadır.

IP adreslerin ağ üzerinde LAN (Local Area Netwok) veya WAN (Wide Area Network) bilgi aktarılması sırasından temel olarak iki protokolü kullanmaktadır. Bunlar TCP (Transmission Control Protokol)ve UDP (User Datagram Protokol) olarak adlandırılmaktadır.

Network Paketleri

Network paketleri kullanılmakta olan protokolleri ve veri transferini sağlıklı gerçekleştirmek amacıyla belirli formatlarda olmaktadır. Gönderici ve alıcıya ait belirli bilgilerin de ağ üzerinde iletişimi sağlayan cihazlarca bilinmesi gerekmektedir. Bu nedenle ağın farklı katmanlarında raw veriye belirli bilgiler eklenerek paketimiz gittikçe farklı bilgilerce kapsüllenerek iletim paketi halini almakta ve bu paket yapısını tanımakta olan protokollerce çözümlenerek iletilmektedir.

image

DNS (Domain Name Service)

Günümüzde interneti fazlasıyla kullanmakta ve bunu gerçeklerken internet sitelerini ve buradaki diğer kaynakları dilsel değişkenlerle tanımlama ve isimlendirme ihtiyacı duymaktayız ancak daha öncede bahsettiğimiz üzere makineler arasındaki iletişim rakamlar ve belli adresler cinsinden gerçekleştirilmektedir. Burada isimler ve rakamlar arasındaki ilişkinin kurulması için sağlanmış olan yapı burada kısaca bilgi verilmeye çalışılacak DNS sistemidir.

DNS yapısında internet üzerindeki kaynakların hiyerarşik bir şekilde düzenlenmesi karmaşayı azaltmakta ve kontrolün sağlamlaştırılmasını sağlamıştır. Burada ağaç yapısına benzer bir yapı içerisinde saklanmaktadır. DNS bilgileri yani isimsel ve rakamsal eşleştirmelerde bir cihaz üzerinde düzenlenmiş olan veri tabanından faydalanılır ve bu cihaz artık bizim DNS sunucumuz olmaktadır. Bu sayede adres çubuğumuza yazdığımız www.vypro.org veya bu sitenin barınmakta olduğu sunucunun IP adresi eşleştirilebilmektedir.

Bu eşleşmeyi bulabilmek için Windows command prompt yardımıylada öğrenmemiz mümkündür. Nslookup komutu sayesinde URL veya IP girerek eşleşmeyi yapmak mümkündür.

image

Burada üst seviyede top level olarak adlandırılan domain adları bulunmaktadır. Bunlar

Domain

Description

.com

Commercial organizations

.edu

Educational institutions

.mil

U.S. military sites

.gov

U.S. government organizations

.net

Internet Service Providers (ISPs)

.org

Nonprofit organizations

.us

Other U.S. organizations (such as local governments)

.ca

Canadian organizations

.de

German organizations

(other countries)

Organizations from other countries

.aero

Corporations in the air transport industry

.biz

Generic businesses

.coop

Cooperatives

.info

Unrestricted use

.museum

Museums

.name

Individuals

.pro

Professionals (doctors, lawyers, and so on)

DNS konfigürasyonumuzu oluştururken uzaktaki bir sunucu üzerinden çalışılabildiği gibi şu günlerde sıklıkla kullanılan “hosts” dosyası yardımıyla da sağlanmaktadır. Bundan önce DNS tanımlanması olana kadar sistemcilerin gecikmelerinden sakınmak için kullandığımız hosts dosyalarını artık yasaklı olan sitelere erişmekte kullanmaktayız. Burada local olarak sağlanan bilgi ile ad çözümlemesi yapılmaktadır.

%:\WINDOWS\SYSTEM32\DRIVERS\ETC dizininde bulunan hosts dosyası değiştirilerek gerekli eşleme yapılabilir.

Temel Kavramlar

Soket programlama denince ilk olarak temel kavramlardan bahsetmek ve bu kavramların kullanılarak soket programlamanın temelleri anlatılmaya çalışılacaktır.

Network Programlamanın temelleri Unix temelli olarak atılmış ve geliştirilen APIler yardımıyla kolaylaştırılmıştır. Winsock kütüpheneleri Windows için network programlama için yazılmış olan kütüphanelerdir. Bunların temel alınmasıyla Microsoftta System.Net.Sockets ad uzayı altında tanımlı sınıflar ve metodlar kullanılarak yapılmaktadır. Biraz buradaki temellerden bahsetmekte yarar var.

Bir bağlantı kurulmasından önce gerekli aşamalar temel olarak aynıdır. Bağlanılacak bir soket, bağlantı türü belirtilir. Ve daha sonra bu sokete bind edilerek aradaki ilişki kurulur. Gerisi verinin gönderilmesi yoluyla olur. Burada verinin kayıpsız olarak yollanması veya acknowledge alınarak bunun sağlanmasının yanında verinin doğrudan gönderilerek bir geri bildirim alınmadığı durumlarda söz konusudur.

Soket

Unixten gelen bir gelenek olan her şeyin dosya olması veri akışlarının bir kanal üzerinden, bizim I/O diyeceğimiz şey ile gerçekleşmesidir. Soketlerde aslında birer dosyadır ve belirli rakamlarla ilişkilendirilmektedirler. Aslında bizim yaptığımız şey networkle alakalı dosyaları ki bunların isimlerinin soket numarası diyeceğimiz sayılarla isimlendirilmesi ve bu dosyaların üzerine yazma ve okuma yapılmasıdır. Burada gerçekleşen veri akışının daha güvenli olması için ise aslında kullanılan sistem winsock ve benzeri kütüphaneler ile iletişimin daha denetimli yapılmasının sağlanmasıdır.

Protokoller ve bunların gereklilikleri standartlaşmayı getirmiş ve belli soketler belirli işlemlerle anılır olmuşlardır. Bu soketlerin bu işlemlere veya oradan geçmesi beklenen verilere açıldığı söylenebilir.

Port

Description

7

Echo

13

Daytime

17

Quote of the day

20

FTP (data channel)

21

FTP (control channel)

22

SSH

23

Telnet

25

SMTP

37

Time

80

HTTP

110

POP3

119

NNTP

123

Network Time Protocol (NTP)

137

NETBIOS name service

138

NETBIOS datagram service

143

Internet Message Access Protocol (IMAP)

389

Lightweight Directory Access Protocol (LDAP)

443

Secure HTTP (HTTPS)

993

Secure IMAP

995

Secure POP3

Endpoint

Endpoint kavramıyla anlatılmak istenen aslında ulaşılmaya çalışılan bir IP adresi ve soket kombinasyonu olarak ifade edilir. Yazmış olduğumuz bir uygulama 160.75.5.222 IP adresinde çalışmaktadır ancak diğer makinelerdeki uygulamalarla hangi port üzerinde haberleştiği önemlidir. Mesela en güzel uygulama olarak web browserlarımızı verebiliriz. Web browserlarımız bağlandıkları sunuculardaki HTTP ile sağlanan bağlantı ve kullanılan 80 portu ile ifade edilebilir. Veya yazmış olduğumuz gir haberleşme uygulamasının 1234 portunu kullanması gibi.

Endpoint bu nedenle tekrar edecek olursak bilginin aktarılmakta olduğu cihazlara ait IP adresi ve port ikilisinden oluşmaktadır.

TCP & UDP

TCP hakkında konuşacağımızda en önemli şeyin connection-oriented bir yapıda olduğudur. Burada bağlantının kurulması iki adet endpoint arasında güvenli bir veri transferi ve bilgi aktarımı yapılmasını sağlamaktadır. TCP programlamada veri kaybından çekinmeye gerek yoktur. Burada buffer sayesinde gelen verilerin saklanması ve kullanılana kadar depolanması söz konusudur.

image

UDP programlama ise TCP de var olan güvenli veri aktarımı koşulunun var olmadığı verinin belirli bir acknwledge alınmadan aktarılması koşuluyla aktarıldığı bir iletişim şeklidir. Bu iletişim protokolünde verinin aktarıldıktan sonra doğru olarak alınıp alınmaması sorun olmamaktadır. Bu amaçla belirlenen uygulamalarda video streaming uygulamaları ve realtime uygulama olması avantajından faydalanılması amacıyla kullanılmaktadır.

image

Tags:

Network Programming

Powered by BlogEngine.NET 1.5.0.7
Theme by Mads Kristensen

Ordinaryus Hakkında

Hayata gözlerini İzmirde açtı. 3 yaşında legolarla oynadı =) Küçük yaşta baskete başladı zaten başka sporlarla arası hiç olmadı. Orta okulda matematikle ilgilendi. Liseyi Karşıyaka Anadolu Lisesinde okudu. 

İTÜ Elektronik Mühendisliğinden 2010 yılında mezun oldu. Fizik bölümünde çift anadala kabul oldu lisans hayatına Fizikten devam etmekte. Koç Üniversitesinde Bilgisayar Mühedisliği Master programına kabul edildi ve akademik hayatının ilk adımlarını sevdiği bir alanda çalışarak atıyor. Fizik ve Bilgisayarın ortak noktalarını gördü ve bunları geliştirmek amacıyla çalışıyor.

Yazılımı sevdi.. Başlarda herşeyle ilgilendi web programlama da yaptı, sokette programladı yeri geldi ağ yönetimi ile uğraştı. Görüntü işlemeden keyif aldı Makine Öğrenmesi ve Örüntü Tanımada kendisini geliştirmeyi istemekte.

2008te MSP oldu belkide bu blogu yazmaya başlamasında en büyük etken=) Bu görevi 2 sene boyunca sürdürdü. Bir yandan 2008de EuroSkillsde Mobil Robotik alanında Türkiyeyi temsil etti. Ardından 2009da Kanada da tekrardan yarışmacı olarak bulundu. Artık bu alanda hakemlik yaparak ve Robotino hakkında öğrendiklerini paylaşarak faydalı olmaya çalışıyor. 

Yapay Zeka, Görüntü İşleme, Kuantum Mekaniği, İstatistik Mekanik ve Bilişsel Bilimlerle ilgili. Geceleri kafasına göre takılıyo. Sabahlarıda öğrencilik yapıyo =)

gibi gibi... 

 

Page Rank

Loading

Google Translate


Şuan ne okuyorum

Bilişsel Psikoloji

Singularity is Near


Ayrıca okuduklarımdan seçtiğim kitaplara buradan ulaşabilirsiniz..

Okuduklarımı üye olarak takip etmek için ise aşağıdaki RSS bağlantısını kullanabilirsiniz. Ayrıca bana kitapta hediye edebilirsiniz =)


CCL


Copyright © Ordinaryus Says That by http://www.vypro.org/ is licensed under a Creative Commons Attribution-No Derivative Works 3.0