20 Ekim 2013 Pazar

CGI NEDİR?


    CGI NEDİR?

 

Bu projenin amacı günümüz telekomünikasyon yapısını ve ihtiyaçlar doğrultusunda bu  yapının gelişmesini anlatmaktır. Bu yeni ihtiyaçlara cevap verebilecek yapı olarak B-ISDN kapsamında ATM teknolojisi ele alınmıştır. ATM protokolü kendine has katman yapısı ve anahtarlama teknolojisini içermektedir. ATM'de veri iletişiminde hücre adında özel bir yapıya sahip paketler kullanılmaktadır. ATM, kendine has topolojisinin yanında varolan sistemlerle de uyumludur.

 

Bilgisayar teknolojisinin ve dolayısıyla bilgisayar ağlarının büyük bir hızla gelişmesi sonucu, bilgisayarların kullanım amaçları ve üstlendikleri hizmetler eskisine oranla çok daha geniş bir alana yayılmıştır. Bu gelişime paralel olarak da yeni kullanım alanları doğmuş ancak bir süre sonra varolan yapılar bu yeni taleplere karşılık veremez hale gelmişlerdir. Şu anda  ihtiyaç duyulan pek çok servis (ses, görüntü, klasik veri iletimi, interaktif servisler vb.) yüksek hızlarda iletim kapasitesi gerektirmektedir.

Veri iletişiminde ortaya çıkan ilerlemeler (VLSI-Very Large Scale Integration, fiber optik ve anahtarlama teknolojilerindeki gelişmeler) bu ihtiyaçlara cevap verebilecek B-ISDN yapısının oluşmasına imkan sağlamıştır.

 ITU-T (International Telecommunication Union),  B-ISDN için transfer modu olarak ATM'i önermiştir. ATM ve B-ISDN teknolojisi aynı zamanda varolan sistemlere de adapte edilebilir olması açısından da avantajlıdır.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3.-GÜNÜMÜZ TELEKOMUNİKASYON ALTYAPISI ve B-ISDN

 

 

            Bugünün telekomunikasyon ağlarının herbiri spesifik hizmetler vermek üzere tasarlanmıştır. Bunun anlamı, herbir telekomunikasyon hizmeti için en az bir ağın olması ve bu ağların hedeflediği spesifik servisi sağlamak amacıyla tasarlanıp çalıştırıldıklarından dolayı, çoğunlukla başka amaçlar için kullanılmaya uygun olmamalarıdır. Örneğin, X.25 veri iletişimi ağları uçtan uca gecikme ve kayma değerlerinin kontrol edilememesi nedeniyle, gerçek zamanlı ses iletişimi için uygun değildirler. Ayrıca, bir ağ içinde, belli zamanlarda boş duran birtakım kaynaklar da başka amaçlar için kullanılamamaktadır. (Örneğin, varolan telefon ağlarının TV yayını için uygun olmamaları sebebiyle günün geç saatlerinde ses iletim ihtiyacının düşük olmasına rağmen, kablolu TV yayını için kullanılamaması.)

Sonuçta birbirinden bağımsız ve farklı birçok iletişim ağı ortaya çıkmış ve bu durum, ağların kullanım esnekliğini ve etkinliğini düşürmüştür. Buna paralel olarak da bu tür ağların tasarım, bakım, üretim maliyetleri de yükselmiştir. Bu ağlara örnek verecek olursak :

·       Düşük hızlarda (300 kb/sn) bilgi transferi sağlayan teleks ağları,

·       POTS (Plain Old Telepnone Service) adıyla da bilinen ve PSTN (Public Switched Telephone Network -  Anahtarlamalı Telefon Ağı ) üzerinden sağlanan iki yönlü ses iletişimi için tasarlanan ağlar,

·       X.25 ve benzeri PSDN (Public Switched Data Networks ) paket anahtarlamalı veri ağları,

·       CATV (Community Antenna TV), kablolu televizyon ağları,

·       LAN (Local Area Networks ), yerel iletişim ağları 

            Yukarıda örnek verdiğimiz telekomunikasyon ağları ve varolan ihtiyaçlar gözönüne alındığında, bu altyapının yetersiz kalacağı açıktır. Özellikle gelecekte kullanılması düşünülen video-telefon, video-konferans, video-kütüphane ve benzeri servisleri düşünürsek, bu tür ihtiyaçları karşılayacak iletişim ağlarının servis türünden bağımsız, genişbantlı tek bir ağ olması gerektiği ortaya çıkmaktadır.

            Bu alandaki çalışmalar seksenli yılların başlarında başlatılmış ve ISDN (Integrated Switched Digital Networks) olarak adlandırılmıştır (Şu anda N-ISDN Narrowband ISDN olarak anılmaktadır). Bu ağların bant genişliğinin arttırılmasıyla hertürlü ses, veri, hareketli video ve yüksek çözünürlükte TV iletiminin entegre edilmesi sağlanmış ve gelişen yapı B-ISDN (Broadband ISDN) olarak adlandırılmıştır.

            B-ISDN yapısını olanaklı kılan faktörler, fiber-optik teknolojisinin gelişerek iletişim hatlarında geniş çapta kullanılır olması ve yarı iletken teknolojisinde sağlanan ilerlemeler olarak gösterilebilir. Böylelikle, yeni geliştirilen yapıda, iletim ortamının daha güvenilir olması ve hata kontrolunun ağ içinde yapılması gerekliliğinin ortadan kalkması ile daha etkin ve maliyeti düşük yeni bir aktarım biçimi kullanılabilmiştir. İşte bu yeni teknoloji ATM (Asynchronous Transfer Mode) olarak adlandırılmaktadır.

ITU-T (Eski adıyla CCITT) tarafından da yapılan araştırmalar sonucu 1988 yılında ATM’ in B-ISDN için en uygun aktarım protokolu oldugu belirlenmiştir.

            ITU-T tarafından B-ISDN yapısı ile verilmesi düşünülen hizmetler şöyle sıralanabilir:

·      HDTV(High Definition TV) Yüksek çözünürlüklü TV servisleri,

·      Videokonferans servisleri,

·      İstek üzerine video (Video on Demand) servisleri,

·      Karşılıklı iletişime dayalı (interaktif) servisler,

·      Mesaj servisleri,

·      Veri transfer servisleri.

 

 

 

4.-ATM NEDİR ?

 

Her türden veriyi yüksek hızlarda taşıyabilen anahtarlanmış, hücre tabanlı aktarım protokolüdür. ATM her türden network trafiğini (veri, ses video ve TV sinyalleri)  53-byte'lık hücreler halinde iletir.

 

4.1-ATM  Anahtarlamanın Tarihçesi

 

ATM’in başlangıcından bu yana gelişimi Şekil-1’de görülmektedir :

 


 

Şekil-1

 

 4.2-Transfer Modları

 

Transfer modu, bir telekomunikasyon ağında kullanılan iletim (transmission), çoklama (multiplexing) ve anahtarlama (switching) tekniklerinin toplamına verilen isimdir. Network dünyasında transfer modu konusunda temel olarak iki kutup bulunmaktadır. Bunlar devre anahtarlama ve paket anahtarlamadır.

Devre ve paket anahtarlama belirtildiği gibi iki uç noktadır ve birbirlerine karşı avantaj ve dezavantajlara sahiptirler. Zamanla bu iki zıt yöntemin de diğer yöntemin avantajlarını kullanan varyasyonları ortaya çıkmıştır. Aşağıda bu metodların başlıca açıklamaları bulunmaktadır.

4.2.1-Devre Anahtarlama (Circuit Switching):

 

Bu transfer modu özellikle telefon ağlarında kullanılır. N-ISDN 'de de bu yöntem kullanılmaktadır.

Devre anahtarlamanın temeli, bir iletim sırasında sadece ilgili bağlantı tarafından kullanılabilen adanmış sabit kapasiteli bir kanal oluşturmaktır.

Belirli zaman aralıklarında (125 µs gibi) sabit uzunlukta bit kümeleri gönderilir (8 bit, 1000 bit gibi). Bu kümelerin her birine 'time slot' denir ve bunlar birleştirilerek çerçeveleri (frame) oluştururlar. (Çerçeveler de belirli aralıklarda tekrarlanır. Bu çerçevelerin içindeki her time slot, devam ettiği sürece belirli bir bağlantıya adanır. Ancak bağlantı kapatıldığında ilgili slot başka bir uygulamanın kullanımına sunulabilir.) Pür hat anahtarlamalı sistemlerde her time slot'un barındırabileceği bit miktarı aynıdır ve sabittir. Yani her servis için sabit bir bit hızı vardır.

Devre anahtarlamalı sistemlerde bir hat, bağlantı boyunca bir uygulamaya adandığından dolayı  sistemde oluşacak gecikmeler ancak iletim hattındaki yayılma gecikmesine bağlıdır.

 

4.2.2-Multirate Circuit Switching:

 

Devre anahtarlamasının kısıtlamalarını ortadan kaldırmak için tasarlanan bu yöntemde, bir bağlantı için birden fazla time slot kullanılabilmektedir. Ancak birden fazla time slot kullanılırsa bunların senkronize edilmesi zorunluluğu ortaya çıkar.

Başka bir problem de 'basic rate'in seçilmesindedir. Eğer bu değer büyük seçilirse (örneğin 2 Mbit/s) küçük hat genişliği gerektiren servisler (ses 64 kbit/s) gereksiz yere kaynak tüketmiş olacaklardır. Bu değer küçük seçilirse de (1 kbit/s) büyük bant genişliği gerektiren servisler (HDTV 144 Mbit/s) için çok fazla miktarda kanalın kontrol edilmesi gerekecektir; bu da işleri çok karmaşık hale getirir. Bu soruna üretilen çözüm ise bir çerçeveyi farklı bit oranları olan slotlara bölmektir.

Böyle bir sistemde her farklı time slot için özel bir tür anahtar kullanılmalıdır (farklı bit rate'lerden dolayı). Abonenin gelen/giden bilgisi anahtarlara/anahtarlardan yönlendirilmeden önce multiplex/demultiplex işleminden geçirilmelidirler (Bu işlem farklı bit rate'deki kanalların ilgili anahtara yönlendirilmesi için yapılır).

Farklı bit rate'ler kullanılabilmesine karşın bunların sabit değerler olmasından dolayı, servislerin ihtiyaçlarında oluşacak değişikliklere karşı esnek olması beklenemez (Bant genişliği ihtiyacının artması, sıkıştırma teknolojisindeki gelişmelerden dolayı ihtiyacın azalması vb.).

Bu sistemler doğal olarak hat anahtarlamanın dezavantajlarını da içerirler (Kaynakların ihtiyaç dışında meşgul edilmesi vb.).

 

4.2.3-Paket Anahtarlama (Packet Switching):

 

Bu transfer modunda kullanıcının bilgileri paketler halinde taşınır. Bu paketlerde kullanıcının bilgisine ek olarak başlık (header) denen ve yönlendirme (routing), hata kontrol ve akış kontrol için kullanılan bilgileri içeren saha da bulunur.

Eski bağlantıların güvenliği düşük olduğundan dolayı bu tip sistemlerde ileri düzeyde hata kontrolü yapılır (İçinden geçilen her node'da paket içeriği, hatalara karşı kontrol edilir…). Her node ‘da hatalı paketler için tekrar gönderim isteği yapılır.(ARQ -Automatic Repeat Request)

Paket boyutları değişkendir. Dolayısıyla kompleks akış kontrolü gerektirirler. Ancak iletişim hızı düşük olduğundan bu pek sorun yaratmamaktadır.Protokollerin karmaşıklığından ve tekrar gönderme işleminden dolayı yüksek hız gerektiren servislerde ve gerçek zamanlı uygulamalarda pek kullanılmazlar.

 

4.2.4-Frame Relaying:

 

Frame Relaying, iletim hatlarının güvenilirliği nedeniyle, ağ içinde paket anahtarlamalı sistemlere (X.25) oranla daha az fonksiyonelliğe sahiptir (Daha kısıtlı hata kontrol ve düzeltme yapılır). Bu da ağ içi anahtarlama noktalarında daha hızlı bilgi işleme imkanı sağlar.

Paketlerin tekrar gönderimi ancak uç noktalar arasında yapılır (yani aradaki node'lar paketlerin tekrar gönderimini istemez). Buna karşın node'larda paketler hala hatalara karşı kontrol edilirler. Bunun nedeni hatalı paketlerin iletimine devam edilmesinin bir anlamının olmamasıdır.

 

4.2.5-Cell Relaying(Fast Packet Switching-ATM):


 


Fast Packet Switching (ATM), birçok varyasyonu içeren bir kavramdır. Ancak bunların temel karakteristiği aynıdır: Ağda minimum fonksiyonellikle paket anahtarlama.

Gönderici ve alıcı arasında bir senkronizasyon yoktur. Senkronizasyon, gerektiğinde boş paketlerin eklenip çıkarılmasıyla sağlanabilir.

ATM'de ağ içinde CRC ya da ARQ türünden hata kontrol fonksiyonları yoktur. Hat anahtarlamada olduğu gibi hataların düzeltilmesi uç noktalardaki protokollere bırakılmıştır.

ATM ‘in Frame Relay’den en önemli farkı, ATM’de verilerin sabit ve küçük boyutlu paketler (hücreler) halinde iletilmesidir. Frame Relay de ise paket boyu değişkendir.

 

5.-ATM HÜCRE YAPISI

 

ATM’de bilgi aktarımı için kullanılan temel birim 53 byte'lık sabit uzunlukta olan ve hücre (cell) olarak adlandırılan özel bir tür pakettir. Hücrelerin ilk 5 byte'lık kısmı başlık (header) olarak adlandırılır ve hücrenin ağ içinde ilerleyebilmesi için gerekli olan temel bilgileri taşır. (Paket anahtarlama yönteminde bulunan ve ileri düzeyde fonksiyonellik sağlayan alanlar hücre başlıklarında olabildiğince azaltılmıştır). Başlığın fonksiyonelliğinin düşük düzeyde tutulması da ATM anahtarlarına yüksek hızda işlem yapma imkanı verir. Geriye kalan 48 byte ise iletilecek olan bilgiyi içerir.

 

5.1- ATM’deki Hücre Tipleri

 

Unassigned Cells: Trafik olmadığı durumda, ATM tabakası tarafından gönderilen boş paketlerdir. Bantgenişliğini doldurmak veya senkronizasyon amaçlı kullanılırlar. Aynı zamanda IDLE hücreleri vardır. Bu hücrelerin özelliği fiziksel tabaka tarafından yaratılmalarıdır. ATM tabakasına çıkmazlar, fiziksel katmanlar arasındaki senkronizasyonda kullanılırlar.

 

Meta-Signaling Cells: Ağ ile bir oturum kurmakta ve oturum servislerini saptamada kullanılırlar.

 

General Broadcast Cells: UNI’deki tüm istasyonlara gönderilen paketleri belirlerler.

 

Point-to-Point Signaling Cells: ATM tabakasında noktadan noktaya bağlantı sağlayan UNI veya NNI arayüzü hücrelerini belirlerler.

 

F4 ve F5 Hüceleri: Sırasıyla VP ve VC bakım hücrelerini belirlerler.

 

Resource Management Cells: VC üzerinde hızlı kaynak yönetimi için ayrılmışlardır.

 

ILMI (Interim Local Management Interface) Cells: ATM kullanıcı aygıtlarının durumlarını ve UNI’deki VP ile VC konfigürasyonu ile ilgili bilgileri taşırlar.

 

5.2-Neden Sabit Uzunluk ?

 

Bir sistemde sabit uzunlukta hücreler kullanıldığında etkinlik, gönderilecek bilginin uzunluğuna göre değişir. Eğer gönderilecek bilgi küçük miktarlardaysa ve hücrelere bölündüğünde son hücrede büyük oranda (30-40 byte) boşluk kalıyorsa bu iletişimdeki oranı pek yüksek olmaz. Ancak gönderilecek bilgi 48 byte'ın tam katıysa yani hücrelerin hepsi tamamen doluysa maximum etkinliğe (%90.5) ulaşılabilir. (Maximum etkinliğin %90.5 olmasının sebebi gönderilen 53 bytelik her hücrenin 5 byte'ının başlığa ayrılmış olmasıdır. 48/53=0.905...)

Değişken uzunlukta hücreler kullanılınca sistemde neredeyse %100 ’lük etkinliğe ulaşılır. Ancak, farklı uzunluktaki paketlerin kuyruklama için buffer'da etkin olarak saklanması oldukça zordur ve komplike algoritmalar gerektirir. Bu kompleks buffer işlemleri de yüksek hız gerektirir. Bu tür pratik nedenlerden dolayı degişken uzunlukta hücre kullanımı engellenmiştir.

Sabit uzunluktaki hücrelerde kalan boşluklar sistem etkinliğine olumsuz yönde etki eder, ancak B-ISDN'de sunulacak servislerin zaten yüksek miktarda bilgi iletimine ihtiyaç duyması bu olumsuzluğu ortadan kaldırır.

 

5.3-Neden 53 Byte ?

 

 Hücre boyunun seçilmesinde farklı faktörler rol oynamıştır. Uzun bilgi alanları iletimin etkinliğini artırır. Çünkü her başlıkla beraber gönderilen bilginin miktarı artar ve böylece başlıklardan kaynaklanan overhead'ın oranı azalır.Ancak bilgi alanının boyu arttıkça paketleme sırasındaki gecikme de (packetization delay) artar. Uzun hücreler kullanıldığında ağ içindeki gecikmenin de belirli limitleri aşması daha kolay olur (Örneğin telefon görüşmeleri için bu gecikme sınırı 25 ms'dir). Bu da ses iletiminde yankı önleyicilerin kullanılmasını zorunlu kılar. Ayrıca uzun hücreler anahtarlarda kullanılan geçici depolama alanlarının büyük olmasını gerektirir. (Hücre kayıplarını önlemek için kuyruklar hücre boyutundan bağımsız olarak belli miktarda hücreyi saklayabilecek kapasitede olmalıdırlar)

Bütün bu etkenler göz önüne alınarak hücredeki bilgi sahasının boyunun 32 ya da 64 byte civarında olması öngörülmüştür (Avrupa ses iletimindeki kolaylığından dolayı 32, Amerika ve Japonya ise etkinliğinden dolayı 64 byte'lık boyutlarda ısrar etmişlerdir). Sonuçta 48 byte bilgi + 5 byte başlık olmak üzere 53 byte hücre boyutu olarak kabul edilmiştir.

 

6.-ATM KATMANLARI

 

ATM ‘in üzerinde kurulduğu fiziksel tabaka yapısı SONET/SDH, DS3 veya FDDI olabilir. ATM, fiziksel ortamdan bağımsızdır ancak geniş tabanlı genel taşıyıcı olarak, eş zamanlı bir iletim  yapısı olan SONET (Synchronous Optical Network) tercih edilir. SONET Bellcore tarafından üretilmiş ve ANSI (American National Standards Institue) tarafından standartlaştırılmıştır. SONET, fiber kablo üzerinde yüksek hızda dijital sinyal iletimini sağlamak için tasarlanmıştır. Verileri 51.84 Mbps hızda taşımak için standart çoklama biçimini kullanır. Ayrıca optik sinyal standardını, farklı kaynaklardan karşılıklı bağlantı için kullanır. Geniş işlem yapma, yönetim ve bakım özelllikleri vardır. Esnek yapısıyla, gelecekte varolacak yeni teknolojilere ayak uydurabilir.

   Fiziksel tabakanın üzerinde ise ATM ve AAL (ATM Adaptation Layer) olmak üzere iki tabaka bulunur. AAL, ATM ile diğer katmanlar arasında arayüz görevini yürütür. AAL, CS (Convergence Sublayer) ve SAR (Segmentation and Reassembly Sublayer) den oluşur. SAR farklı uzunluk ve formattaki PDU (Protocol Data Unit) ‘ları (yani iletilecek veri paketlerini) 48 okteklik (sekizlik) parçalara ayırır. CS’nin fonksiyonları AAL tarafından işlenen trafiğin tipine göre değişir.

   Gönderici taraftaki ATM tabakasında, SAR’dan gelen 48 sekizlik bilgiye 5 byte’lık hücre başlığını ekler. Ağ içindeki anahtarlardaki ATM tabakaları VPI ve VCI bilgilerini kullanarak yönlendirme işlemlerini gerçekleştirir. Alıcıdaki ATM tabakası 5 byte’lık başlık bilgisini çıkarır ve AAL’ e iletir.

 

6.1- AAL  Katmanı Tarafından Desteklenen Trafik Sınıfları

 

ATM AAL katmanı, değişik trafik tiplerini desteklemek için 5 tane değişik trafik sınıfına sahiptir. Her trafik tipi için kaynak ve varış noktaları arasında herhangi bir zaman ilişkisi olmasının gerekip gerekmediği, bit hızının karakteristiği ve bağlantı uyumlu olup olmadığı, trafik tipleri için birbirinden farklıdır.

 

6.2 -AAL Tipleri

 

AAL, trafik tiplerini desteklemek amacıyla AAL farklı protokolllere sahiptir.

 

6.2.1-AAL-1

 

A Sınıf trafiği destekler ve PDU yapısı 48 sekizlikten oluşur. Payload(Kullanıcı Verisi), 46 veya 47 sekizlik olabilmektedir. SNP (Sequence Number Protection), SN üzerinde hata kontrolü yapar. SNP sahası, ancak 1 bitlik hataları düzeltebilmektedir. Payload ise CSI (Convergence Sublayer Indication) , işaretci sahanın kullanıp kullanılmayacağını gösterir. CSI’nın sıfır olması işaretçinin kullanılmadığını ve kullanıcı verisinin 47 sekizlik olduğunu gösterir. İşaretçi, verilerin hücre içinde yerleşimini tutmaktadır.

 

6.2.2- AAL –2

 

Sınıf-B trafiğini destekleyen protokoldür. Başlık kısmında SN (Sequence Number) ve IT (Information Type) bulunur. IT sahası, BOM (Beginning Of Message), COM (Continuation of Message) ve EOM (End Of Message) sahalarından oluşur. Kuyruk kısmında, LI (Length Indicator) sahası Payload sahasındaki sekizlik sayısını tutar, CRC’de hata kontrolünde kullanılır.

 

6.2.3 - AAL-3/4

 

İlk olarak, bağlantı uyumlu VBR trafiğini destekleyen AAL-3 ve bağlantısız VBR trafiği için AAL-4 protokolleri tanımlandı. Sonra bu iki tip birleştirilerek, AAL-3/4 protokolü tanımlandı.

SN, IT, LI ve CRC sahaları AAL-2 protokolünde kullanılan yapıyla aynıdır, ama AAL-3/4 ‘te bu sahaların uzunlukları bellidir. MID (Message IDentification) sahası, belli bir bağlantıdan gelen trafiğin birleştirilmesinde kullanılır.

 

6.2.4- AAL-5

Forum tarafından yüksek hızda, bağlantı uyumlu servis kullanıcılarına hizmet veren, az overhead’e sahip, hata bulma oranı yüksek olan protokoldur. Frame Relay trafiğinde uygundur.

6.2.5-AAL-6

 

ATM-Forum tarafından ortaya çıkarılan, MPEG kodlu video için tanımlanacaktır.

 


                  

 

Şekil-2 : B-ISDN protokol katmanları ve üstlendikleri görevler görünmektedir.

 

 

7.-ATM’DE BAĞLANTI YAPISI

 

ATM’de mantıksal bağlantılar, sanal kanal bağlantıları (VCC-Virtual Channel Connection) olarak adlandırılır. VCC, B-ISDN ‘in en temel birimidir. Bir VCC , iki son kullanıcı arasında ağ aracılığıyla kurulur. Değişken oranlarda (variable rate), sabit boyutlu hücreler full-duplex (çift yönlü) akışla bağlantı üzerinden taşınır. VCC ‘ler aynı zamanda kullanıcı-network exchange (kontrol sinyalleme) ve network-network exchange (network yönetimi ve yönlendirme ) için kullanılır. Şekil-3’te sanal bir ATM bağlantısının kesiti gorulmektedir

 

 

 


 

Şekil-3


   Sanal yol (VP-Virtual Path) kavramı, yüksek hızlı ağlarda kontrol harcama-larının yüzdesinin bütün network harcamaları içinde yüksek yüzdelere artması sonucu geliştirilmiştir. Sanal yol tekniği, network içinde ortak yolları paylaşan bağlantıları gruplayarak (VPC-Virtual Path Connection) kontrol masraflarını azaltmaya yarar. Network yönetim işlemleri bundan sonra çok sayıdaki bireysel kanallar yerine az sayıdaki bağlantı gruplarına uygulanabilir.

   VPC ’lerin kulanımından doğan avantajlar :

Þ  Basitleştirilmiş network mimarisi (Ağ ortamındaki fonksiyonların VPC ve VCC kavramlarına göre sınıflandırılmalarından dolayı işlemler daha basitleşir),

Þ  Artırılmış network performansı ve güvenilirlik (Ağ daha az iletişim birimiyle uğraşır),

Þ  Azaltılmış işlem ve kısa bağlantı kurulma zamanı (Bağlantı işlemlerinin büyük kısmı VPC ilk kez oluşturulurken yapılır. Var olan bir VPC’ye VCC’ler eklemek çok az bir işlem gerektirir),

Þ  Geliştirilmiş ağ servisleri. [2]

 

ATM'de veri bağlantıları VCI ve VPI ile tanımlandıktan sonra, verilen herhangi bir yöne giden sanal yollar çoklanarak fiziksel hatta verilir. Sanal kanal bağlantıları son kullanıcılar arasında anlamlıdır. Fakat bu bağlantı tanımlayıcıları, hücreler ATM ağı içinde ilerlerken değişebilir. Bu yüzden belli bir VCI değerinin kullanıcı açısından bir önemi yoktur. Sorumluluk ATM ağındadır.

            VC ve VP ile oluşan bağlantı yapısı şöyledir: İki kullanıcı için kontrol işlemi tek tek bütün sanal kanallar yerine sadece VP bazında yapılabilir. Yani, bütün kanallar yerine sadece bir yol (path) incelenir.

   İki nokta arasında sonuçta oluşan bağlantının tümü Şekil-4 ‘te ifade edimiştir.


 

Şekil-4


 

8.-ATM ANAHTARLAMA

 

            ATM anahtarlamasındaki temel fikir mantıksal bir kanaldan anahtara giren bilginin yol üzerindeki bir sonraki noktaya iletilmesi için başka bir ATM kanalına yönlendirilmesidir. Genelde bir anahtardan çıkan çok sayıda mantıksal ATM kanalı olmasından dolayı, yönlendirmeden önce ilgili çıkış kanalı seçilmelidir. Bu seçim, giriş portunun numarasına ve hücrenin VPI, VCI değerlerine bağlı olarak yapılır.

 

8.1 -ATM Anahtarları

 

Anahtara ulaşan her hücrenin giriş port numarasına,VPI ve VCI değerlerine bakılır. Ardından, bu değerlerden yararlanılarak yönlendirme tablosundan hücrenin çıkış portu ve yeni VPI, VCI değerleri bulunur. Yeni bulunan VPI ve VCI değerleri; hücre, anahtardan çıkmadan önce başlıktaki eski değerlerin yerlerine yerleştirilir. Sonunda da hücre, tablodan bulunan çıkış portuna yönlendirilir.

   Bir anahtara genelde birden çok porttan hücre girdiğinden, bu hücrelerin çıkış portlarının çakışması olasıdır. Böyle bir durumda ilgili çıkış portu boşalıncaya kadar kimi hücreler geçici olarak bir tampon alanda saklanmak zorundadırlar. Bu hücreleri sıraya sokma işlemi kuyruklama olarak adlandırılır.

   ATM anahtarları, sanal yol (VP) ve sanal kanal (VC) anahtarları olmak üzere kendi aralarında ikiye ayrılırlar. Sanal yol anahtarları  yönlendirme sırasında sadece başlıktaki VPI değerini yenilerler. Halbuki sanal kanal anahtarları başlıktaki hem VPI hem de VCI degerlerini yenilerler.

   Anahtarlar için böyle bir ayrıma gidilmesinin nedeni ağ içindeki ara noktalarda yapılan işi azaltarak anahtarlamayı hızlandırmaktır. Ara noktalarda  sanal yollar değişmekte ancak bunların içerdiği kanallar aynı kalmaktadır. Böyle durumlarda sadece VPI değerlerini inceleyen bir anahtar kullanmak daha etkin bir yoldur.

 

Şekil-5 ’te sanal yol ve sanal kanal anahtarlarına örnek görülmektedir.


Şekil-5

Sonuç olarak bir ATM anahtarının temel görevleri aşağıdaki üç maddede toplanabilir:

1.    Hücreleri yönlendirmek (routing),

2.    Gerektiğinde hücreleri kuyruklamak (queing),

3.      Gelen hücrelerin başlıklarındaki VPI ve VCI değerlerini yönlendirme tablosundaki karşılıkları ile değiştirmek.

 

8.2-ATM Anahtarlarının Performansını Etkileyen Faktörler

 

Bağlantı Bloklama (Connection Blocking)

Bağlantı bloklama özelliği, anahtardaki bağlantı sayısının ve yükün çok fazla olmasından dolayı giriş portundan gelen bilgilerin bir çıkış portuna yönlendirilememesi durumunda bağlantının reddedilmesi anlamına gelir.

 

Hücre Kayıpları (Cell Loss)

Eğer anahtar içindeki kuyruklara hücreler çok hızlı ve çok sayıda gelirse, kuyruklarda taşma olacak ve bu da bazı hücrelerin kaybolmasına neden olacaktır. ATM anahtarları tasarımcıları, hücre kaybolma olasılığını 10-8 ile 10-11 arasında tutmaya çalışmaktadır.

 

Hücre Eklenmeleri (Cell Insertion)

ATM anahtarı içinde bazı hücreler yanlış yönlendirme sonucunda, başka bir mantıksal bağlantıya gidebilirler. Böylece bazı çıkış portlarında gereksiz hücre birikmesi olabilir. Bu tip bir olayın olması olasılığı da 10-11 ile 10-14 arasın tutulmaya çalışılmaktadır.

 

Anahtarlama Gecikmesi (Switching Delay)

Hücrelerin anahtar içinden geçerken mümkün olduğunca hızlı geçmesi gerekmektedir. Aksi halde, gecikme duyarlı gerçek zamanlı verilerin iletiminde sorunlarla karşılaşılacaktır. Bu gecikmeler, 10 ve 1000 ms arasında değerler alabilmektedir. Bu değerler birtakım olasılıklarla birlikte de verilebilmektedir. Örneğin, 10-10 değerinde 100 ms gecikme sözü, “anahtardaki gecikmenin 100 ms’den fazla olması olasılığı 10-10 dan azdır” anlamına gelmektedir.

 

9.-ATM TOPOLOJİSİ

 

ATM, yapı ve geliştirme bakımından esnek bir topolojiye sahiptir. Bunun yanında varolan ağ topolojilerine uygulanabilir ve etkin bir yapı oluşturulabilir. ATM’in topoloji yapısında iki türlü arabirimden sözedilir. Bunlardan birincisi Public UNI (Public User-to-Network Interface - Genel kullanıcı-ağ arayüzü), bir diğeri ise Private UNI (özel UNI) olarak adlandırılmaktadır.

Şekil-6 ’te ATM ağ topolojisinin genel olarak yapı mantığı verilmiştir

 

NETWORK

 

B-TE1-2: Broadband Terminal Equipment
B-NT1-2: Broadband Network Termination
B-TA     : Broadband Terminal Adapter
CPE       : Customer Premises Equipment

 

ATM
network

 

B-L/ET

 

B-NTI

 

B-NT2

 

B-TA

 

B-TE1/
B-TE2

 

ATM
endpoint

 

ATM
endpoint

 

 TA

 

private ATM
switch

 

private
UNI

 

public
UNI

 

public ATM
switch

 

CPE

 

R

 

SB

 

TB

 

UB

 

NETWORK

 



 


 

Şekil-6

 

Şekil-7’de ATM’in topoloji yapısı temel alınarak oluşturulmuş örnek bir Yerel Bilgisayar Ağı (LAN) görülmektedir:

 


 

Şekil-7

 

9.1-ATM Yerel Bilgisayar Ağları (ATM LANs) ve ATM LAN

Emulasyonu

 

   ATM gelecekteki genişbant çoklu-ortam servislerinin destekleyecek bir teknolojidir. Bununla beraber, iletişimde IEEE 802 tabanlı yerel ağlar ve bu ağlar üzerinde kullanılan uygulamalar günümüzde oldukça yaygındır. Bu yüzden ATM’in ilk aşamada bir LAN teknolojisi olarak IEEE 802 ağlarıyla uyumlu olması gerekir. Bu uyumun sağlanması için ATM, veri bağlantı katmanı gibi düşünülerek, varolan ağ katmanları, bu yeni bağlantı katmanını destekleyecek şekilde geliştirilmektedir. Böylelikle ATM üzerinde IP ve benzeri diğer protokoller çalışabilmektedir.

   Varolan LAN uygulamalarının ATM ağlarında desteklenebilmesi için bir başka çözüm ATM LAN Emulasyonudur. LAN Emulasyonu, bağlantı uyumlu ATM ağları üzerinde bağlantısız IEEE 802 ağları servislerinin nasıl gerçekleştirilebileceği üzerinde durur. Diğer bir deyişle, noktadan noktaya bağlantı sağlayan ATM anahtarının sanal paylaşılmış iletim ortamı görüntüsünü vermesini sağlamaktır. LAN Emulasyonu, ATM uç sistemleri ve ATM-LAN köprülerinde ağ katmanının altında gerçekleşir.

 

 9.1.1-LAN Emulasyonu Mimarisi

 

LAN emulasyon servisi aşağıdaki birimlerden oluşmuştur:

LAN Emulasyon istemcisi (LAN Emulation Client - LEC)

Bu birim, LAN ile ATM ağı arasındaki köprüdür. Kendilerine bağlı olan LAN’lardan gelen mesajları kabul eder. Eğer mesaj “broadcast” veya “multicast” ise mesajı “BUS” adı verilen ve aşağıda açıklanan birime gönderir.

BUS (Broadcast and Unknown Server)

Bu birim ATM ağına bağlı tüm LEC’ler ile bağlantılıdır. BUS, “broadcast” bir mesaj aldığında, bu mesajı bağlı olduğu tüm LEC’lere gönderir. LEC’ler ise mesajı kendilerine bağlı LAN’lardaki ilgili adreslere ulaştırır. “Multicast” mesajlar ise, BUS tarafından sadece belli bir grup LEC’e yollanır.

LAN Emulasyon Sunucusu (LAN Emulation Server - LES)

 


 

 

            LES’in amacı, LE-ARP (LAN Emulation Address Resolution Protocol) desteklemektir.    LE-ARP protokolü, bir LEC’in gelen bir MAC (Media Access Control) adresinin içeren başka bir LEC’in ATM adresini bulmasını sağlamaktadır. Bir LEC, bilinmeyen bir çerçeveye (karşılık gelen ATM adresi bilinmeyen bir MAC adresi) rastlandığında LES’e LE-ARP sorgusu gönderir. LES de, bu sorguyu diğer LEC’lere gönderir. Bu sorguyu alan tüm Lec’ler belirtilen MAC adresinin kendilerinde olup olmadığının kontrol eder, eğer kendisinde ise kendi ATM adresini de belirterek, LES’e cevap gönderir. LES de ilgili LEC’e haber vererek adres çözümleme işini bitirir.

 

 

10.-ATM 'İN DEZAVANTAJLARI

 

ATM pahalı  bir teknolojidir. ATM anahtarların liste fiyatları temel konfigürasyon için 9000$ 'dan başlayarak tam kurulu bir sistemde 350.000$ 'a kadar çıkan bir çeşitlilik göstermektedir. Fakat yakın bir zamanda bu teknolojinin ucuzlaması ve yaygınlaşması beklenmektedir .

ATM, yeni bir teknoloji olduğundan henüz gerekli donanım ve yazılım desteği yeterli değildir. Bunda en önemli etken standartların oluşmamasıdır. Özellikle yazılım konusunda büyük eksiklikler bulunmaktadır. "ATM teknolojisi henüz olgunlaşma evresindedir. Endüstri uzmanları, olgunlaşması  için iki ya da üç yıllık bir süre olduğunu tahmin etmektedir. " [6]

  ATM anahtarları, router(Yönlendirici) tarafından verilmekte olan hizmet sınıflarının pek çoğunu kendi yapısı içinde kullanıcılara sunmaktadır. Fakat  henüz standartların oluşmaması yüzünden aşağıda sıralanan, router 'ın yapabildiği fonksiyonları anahtarlar henüz yapamamaktadır .

1. Güvenli WAN Erişimi: Yönlendiriciler diğer ağlara bağlanma konusunda şimdilik tek güvenilir cihazlar olarak kabul edilmektedir.

2. Güvenlik Duvarları(Firewall): Yönlendiriciler network'ün belirli alanları dışında kullanıcı erişimini sınırlama özelliğine sahiptir. Bu, ortaya çıkan bir sorunun ağın başka bir bölümüne intikal etmesini engellemektedir.

3. Çoklu Protokol Desteği: Yönlendiriciler, tipik bir heterojen network'lerde bulunan bütün protokolleri ( IP, IPX, SNA ve Apple Talk gibi) çalıştırabilmektedir.

 

11.-ATM 'İN AVANTAJLARI

 

1.   ATM hızla gelişen bir teknolojidir. ITU-T ve ATM Forum, standartlaşma çalışmalarında bulunmaktadır . Gelecekte belirecek talepler şimdiden birçok  büyük firmanın bu konuda araştırmalara başlamasına yol açmaktadır. Büyük firmalar bu konuda iş yapan küçük firmaları kendi bünyelerine katarak bu konuda çalışmalarını hızlandırmaktadır. Bay Networks, Cisco  ve 3Com  gibi büyük Network Firmaları bu pastadan daha büyük bir pay kapabilmek için savaşmaktadır. [6]

 

2.   ATM ile verileri çok büyük hızlarda taşımamız mümkündür. Hızı artırıcı amaçlı olarak hata  kontrolü minimum düzeyde tutulur. Bu durumda, hata kontrolü kullanıcının sorumluluğuna bırakılmaktadır.

 

3.   Video, ses, TV, text gibi türlü veri tiplerinin hepsini  destekleyen ve bütün ağların  bir ortamda entegrasyonu için taban sağlayacak BISDN için ITU-T tarafından switching (anahtarlama) modeli olarak ATM seçilmiştir.

 

4.   ATM, fiziksel (taşıma) ortamından bağımsızdır. Kablolar koaksiyel kablo olabileceği gibi fiber de olabilmektedi. Fiziksel katman olarak SONET tavsiye edilmektedir.

 

5.   ATM var olan sistemlerle uyumludur. Bu, onun her tür ağ ortamıyla sorun olmadan konuşabilmesini sağlamaktadır.

 

6.   ATM, veri iletiminde esnektir. Değişken bit hızlarını destekler  niteliktedir.Kullanıcı isteğine göre iletişim hızı belirlenir. "Hatta bazı anahtarlar, kullanıcılara ait bant genişliği de sunabilirler".  [6]

      ATM ağında hata oranı ve gecikme değeri bildirilerek belli bir kalitede hizmet alınabilir. Bu bilgiler, ağa bağlanıldığında kullanıcı tarafından ağ ortamına bildirilir. İstenilen şey hız ise hata oranı göz önüne alınmayabilir, hata oranı önemliyse o zaman hızdan ödün vermek gerekecektir .

 

7.   ATM, sabit boyutlarda ve küçük hücreleri anahtarladığından ağ kaynaklarını optimum kullanabilir. "Devre anahtarlamadaki gibi devre bütün bağlantı için kapatılmaz. Paket anahtarlama tekniği kullanılarak sadece bilgi transfer edilirken devre kullanılır" [1]. Diğer taraftan anahtarlar, yalnızca iletişimin gerekli olduğu düğümler (nodes) arasında kurduğu bağlantılarla, ağ bant genişliğinin etkin kullanımını sağlamaktadır. [6]

 

8. ATM ağ yapısı büyümeye elverişlidir.

 

 

 

9.  ATM onu yorumlayan firmaya göre bazı değişiklikler taşıyabilir. Belirli şartları sağladıkları sürece değişik ATM -lan'lar birbirleriyle iletişim yapabilirler.

 

10. ATM istatistiki çoklama tekniğini kullanarak çok kullanıcının veri trafiğini tek bir ağ üzerinde birleştirir. Bunu da en etkin şekilde yapar.

 

11. ATM anahtarlama, yönlendiricilere göre daha kolay anlaşılır, uygulaması kolay ve daha ekonomik bir çözümdür. Yönlendiricilerin mevcut yazılımlarının düzeyi, karmaşılığı, mimarisi ve fiyatı anahtarlar karşısında devre dışı kalmalarına yol açmaktadır. [6]

 

12. ATM anahtarları , mevcut ağ ekipmanı üzerinde hiç değişiklik yapmadan ya da çok küçük bazı değişiklikler yaparak ağa eklenebilir.

 

 

12.-SONUÇ

 

B-ISDN teknolojisinin, varolan iletişim ihtiyaçlarının karşılanması ve gelecekte varolabilecek ihtiyaçların karşılanmasına yönelik  esnekliği düşünüldüğünde geleceğin iletişim teknolojisi olacağı açıktır. Ancak, bu yapıyı olanaklı kılan ATM altyapısındaki maliyet ve tam standartlaşamama gibi dezavantajlardan dolayı henüz bu teknolojiye tam olarak bir geçiş sağlanamamıştır.

 

 

 

 

 

13.     KAYNAKÇA


 

 

[1] DE PRYCKER, MARTIN ;“Asynchronous Transfer Mode, Solution For Broadband ISDN”, Ellis Harwood, 1993

[2] STALLINGS, William ;“Networking Standards A Guide to OSI, ISDN, LAN and MAN Standards”

[3] ERDUR, Cenk ; “İleri Bilgisayar Ağları ATM Semineri Raporu” , 20.5.96

[4] ATEŞ, Ahmet Feyzi  ; “B-ISDN, ATM ve Diğer Gelişen Teknolojiler “,  27.5.96

[5] ÇIMENSEL, Ahmet  ; “ATM Networks Semineri (Bölüm1)” , 13.5.96

[6] STEPHEN, P. Klett Jr. ; ComputerWorld Dergisi Sayı 298 , Sayfa 43-48 , 1995

[7] GAGE, Beth  ; ComputerWorld Dergisi Sayı 305 , Sayfa 27-37 , 1995

[8] Çeşitli Internet Kaynakları  (Başlangıç Noktası -“http://www.yahoo.com”)

[9] EBRAHIM, Zahir ; “A Brief Tutorial on ATM“

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

14.-EK-Mini Sözlük


   * AAL: ATM Adaptation Layer

   * ANSA: Advanced Networked Systems Architecture

   * ASIC: Application Specific Integrated Circuit

   * ATM: Asynchronous Transfer Mode

   * AUU: ATM User User indication, "the bit", end of AAL5 block marker

   * AVA: ATM Video Adaptor

   * B-ISDN: Broadband Integrated Services Digital Network

   * CAC: Connection Admission Control

   * CBR: Constant Bit Rate

   * CCITT: Comitée Consultatif International Télégraphique et Téléphonique

     (now the ITU-TS)

   * CLP: Cell Loss Priority (a bit in a B-ISDN cell header)

   * CRC: Cyclical Redundancy Check

   * DAN: Desk Area Network

   * E1: 2 Mbit/sec

   * E2: 8 Mbit/sec

   * E3: 34 Mbit/sec

   * EATM: EISA ATM (an adaptor)

   * EDL: Ethernet Data Link

   * FDDI: Fiber Distributed Data Interface

   * FAS: Framing and Sequencing

   * FIFO: First In First Out

   * GFC: Generic Flow Control (a 4 bit field in a B-ISDN cell header)

   * H.261: A constant bit rate video compression standard.

   * HEC: Header Error Check (an 8 bit CRC in a B-ISDN cell)

   * IOC: Input Output Controller

   * IP: Internet Protocol

   * ISDN: Integrated Services Digital Network

   * ISO: International Standards Organisation

   * ITU: International Telecommunication Union

   * LAN: Local Area Network

   * MAC: Media Access Control

   * MAN: Metropolitan Area Network

   * MPEG: Motion Picture Experts Group (a video compression standard)

   * NOSSDAV: Network and Operating System Support for Digital Audio and

     Video ("nose dive")

   * NNI: Network Network Interface

   * OC3: 155 Mbit/sec

   * OC12: 622 Mbit/sec

   * OSI: Open Systems Interconnection

   * PDU: Protocol Data Unit (a packet)

   * PLT: Payload Type (a 3 bit field in a B-ISDN cell header)

   * PTM: Packet Transfer Mode

   * Q.93B: The Standard (i.e. awful) ATM signalling protocol

   * QOS: Quality of Service

   * SAR: Segmentation and Reassembly

   * SDH: Synchronous Digital Hierarchy

   * SDU: Service Data Unit (a packet)

   * SOC: Start of Cell

   * SONET: Synchronous Optical Network

   * SPROING:To Break

   * STM: Synchronous Transfer Mode

   * STS1: 155 Mbit/sec

   * STS4: 622 Mbit/sec

   * T1: 1.5 Mbit/sec

   * T3: 45 Mbit/sec

   * TDM: Time Division Multiplexing

   * UNI: User Network Interface

   * VC: Virtual Channel or Virtual Circuit

   * VCI: Virtual Circuit Identifier (also Virtual Channel Identifier)

   * VP: Virtual Path

   * VPI: Virtual Path Identifier

   * WAN: Wide Area Network

 

 

 

 

 


 


 


 

 



 
        1.Özet
 
 
Bu projenin amacı günümüz telekomünikasyon yapısını ve ihtiyaçlar doğrultusunda bu  yapının gelişmesini anlatmaktır. Bu yeni ihtiyaçlara cevap verebilecek yapı olarak B-ISDN kapsamında ATM teknolojisi ele alınmıştır. ATM protokolü kendine has katman yapısı ve anahtarlama teknolojisini içermektedir. ATM'de veri iletişiminde hücre adında özel bir yapıya sahip paketler kullanılmaktadır. ATM, kendine has topolojisinin yanında varolan sistemlerle de uyumludur.
 
 
       2.Giriş
 
 
Bilgisayar teknolojisinin ve dolayısıyla bilgisayar ağlarının büyük bir hızla gelişmesi sonucu, bilgisayarların kullanım amaçları ve üstlendikleri hizmetler eskisine oranla çok daha geniş bir alana yayılmıştır. Bu gelişime paralel olarak da yeni kullanım alanları doğmuş ancak bir süre sonra varolan yapılar bu yeni taleplere karşılık veremez hale gelmişlerdir. Şu anda  ihtiyaç duyulan pek çok servis (ses, görüntü, klasik veri iletimi, interaktif servisler vb.) yüksek hızlarda iletim kapasitesi gerektirmektedir.
Veri iletişiminde ortaya çıkan ilerlemeler (VLSI-Very Large Scale Integration, fiber optik ve anahtarlama teknolojilerindeki gelişmeler) bu ihtiyaçlara cevap verebilecek B-ISDN yapısının oluşmasına imkan sağlamıştır.
 ITU-T (International Telecommunication Union),  B-ISDN için transfer modu olarak ATM'i önermiştir. ATM ve B-ISDN teknolojisi aynı zamanda varolan sistemlere de adapte edilebilir olması açısından da avantajlıdır.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3.-GÜNÜMÜZ TELEKOMUNİKASYON ALTYAPISI ve B-ISDN
 
 
            Bugünün telekomunikasyon ağlarının herbiri spesifik hizmetler vermek üzere tasarlanmıştır. Bunun anlamı, herbir telekomunikasyon hizmeti için en az bir ağın olması ve bu ağların hedeflediği spesifik servisi sağlamak amacıyla tasarlanıp çalıştırıldıklarından dolayı, çoğunlukla başka amaçlar için kullanılmaya uygun olmamalarıdır. Örneğin, X.25 veri iletişimi ağları uçtan uca gecikme ve kayma değerlerinin kontrol edilememesi nedeniyle, gerçek zamanlı ses iletişimi için uygun değildirler. Ayrıca, bir ağ içinde, belli zamanlarda boş duran birtakım kaynaklar da başka amaçlar için kullanılamamaktadır. (Örneğin, varolan telefon ağlarının TV yayını için uygun olmamaları sebebiyle günün geç saatlerinde ses iletim ihtiyacının düşük olmasına rağmen, kablolu TV yayını için kullanılamaması.)
Sonuçta birbirinden bağımsız ve farklı birçok iletişim ağı ortaya çıkmış ve bu durum, ağların kullanım esnekliğini ve etkinliğini düşürmüştür. Buna paralel olarak da bu tür ağların tasarım, bakım, üretim maliyetleri de yükselmiştir. Bu ağlara örnek verecek olursak :
·       Düşük hızlarda (300 kb/sn) bilgi transferi sağlayan teleks ağları,
·       POTS (Plain Old Telepnone Service) adıyla da bilinen ve PSTN (Public Switched Telephone Network -  Anahtarlamalı Telefon Ağı ) üzerinden sağlanan iki yönlü ses iletişimi için tasarlanan ağlar,
·       X.25 ve benzeri PSDN (Public Switched Data Networks ) paket anahtarlamalı veri ağları,
·       CATV (Community Antenna TV), kablolu televizyon ağları,
·       LAN (Local Area Networks ), yerel iletişim ağları 
            Yukarıda örnek verdiğimiz telekomunikasyon ağları ve varolan ihtiyaçlar gözönüne alındığında, bu altyapının yetersiz kalacağı açıktır. Özellikle gelecekte kullanılması düşünülen video-telefon, video-konferans, video-kütüphane ve benzeri servisleri düşünürsek, bu tür ihtiyaçları karşılayacak iletişim ağlarının servis türünden bağımsız, genişbantlı tek bir ağ olması gerektiği ortaya çıkmaktadır.
            Bu alandaki çalışmalar seksenli yılların başlarında başlatılmış ve ISDN (Integrated Switched Digital Networks) olarak adlandırılmıştır (Şu anda N-ISDN Narrowband ISDN olarak anılmaktadır). Bu ağların bant genişliğinin arttırılmasıyla hertürlü ses, veri, hareketli video ve yüksek çözünürlükte TV iletiminin entegre edilmesi sağlanmış ve gelişen yapı B-ISDN (Broadband ISDN) olarak adlandırılmıştır.
            B-ISDN yapısını olanaklı kılan faktörler, fiber-optik teknolojisinin gelişerek iletişim hatlarında geniş çapta kullanılır olması ve yarı iletken teknolojisinde sağlanan ilerlemeler olarak gösterilebilir. Böylelikle, yeni geliştirilen yapıda, iletim ortamının daha güvenilir olması ve hata kontrolunun ağ içinde yapılması gerekliliğinin ortadan kalkması ile daha etkin ve maliyeti düşük yeni bir aktarım biçimi kullanılabilmiştir. İşte bu yeni teknoloji ATM (Asynchronous Transfer Mode) olarak adlandırılmaktadır.
ITU-T (Eski adıyla CCITT) tarafından da yapılan araştırmalar sonucu 1988 yılında ATM’ in B-ISDN için en uygun aktarım protokolu oldugu belirlenmiştir.
            ITU-T tarafından B-ISDN yapısı ile verilmesi düşünülen hizmetler şöyle sıralanabilir:
·      HDTV(High Definition TV) Yüksek çözünürlüklü TV servisleri,
·      Videokonferans servisleri,
·      İstek üzerine video (Video on Demand) servisleri,
·      Karşılıklı iletişime dayalı (interaktif) servisler,
·      Mesaj servisleri,
·      Veri transfer servisleri.
 
 
 
4.-ATM NEDİR ?
 
Her türden veriyi yüksek hızlarda taşıyabilen anahtarlanmış, hücre tabanlı aktarım protokolüdür. ATM her türden network trafiğini (veri, ses video ve TV sinyalleri)  53-byte'lık hücreler halinde iletir.
 
4.1-ATM  Anahtarlamanın Tarihçesi
 
ATM’in başlangıcından bu yana gelişimi Şekil-1’de görülmektedir :
 
 
Şekil-1
 
 4.2-Transfer Modları
 
Transfer modu, bir telekomunikasyon ağında kullanılan iletim (transmission), çoklama (multiplexing) ve anahtarlama (switching) tekniklerinin toplamına verilen isimdir. Network dünyasında transfer modu konusunda temel olarak iki kutup bulunmaktadır. Bunlar devre anahtarlama ve paket anahtarlamadır.
Devre ve paket anahtarlama belirtildiği gibi iki uç noktadır ve birbirlerine karşı avantaj ve dezavantajlara sahiptirler. Zamanla bu iki zıt yöntemin de diğer yöntemin avantajlarını kullanan varyasyonları ortaya çıkmıştır. Aşağıda bu metodların başlıca açıklamaları bulunmaktadır.
4.2.1-Devre Anahtarlama (Circuit Switching):
 
Bu transfer modu özellikle telefon ağlarında kullanılır. N-ISDN 'de de bu yöntem kullanılmaktadır.
Devre anahtarlamanın temeli, bir iletim sırasında sadece ilgili bağlantı tarafından kullanılabilen adanmış sabit kapasiteli bir kanal oluşturmaktır.
Belirli zaman aralıklarında (125 µs gibi) sabit uzunlukta bit kümeleri gönderilir (8 bit, 1000 bit gibi). Bu kümelerin her birine 'time slot' denir ve bunlar birleştirilerek çerçeveleri (frame) oluştururlar. (Çerçeveler de belirli aralıklarda tekrarlanır. Bu çerçevelerin içindeki her time slot, devam ettiği sürece belirli bir bağlantıya adanır. Ancak bağlantı kapatıldığında ilgili slot başka bir uygulamanın kullanımına sunulabilir.) Pür hat anahtarlamalı sistemlerde her time slot'un barındırabileceği bit miktarı aynıdır ve sabittir. Yani her servis için sabit bir bit hızı vardır.
Devre anahtarlamalı sistemlerde bir hat, bağlantı boyunca bir uygulamaya adandığından dolayı  sistemde oluşacak gecikmeler ancak iletim hattındaki yayılma gecikmesine bağlıdır.
 
4.2.2-Multirate Circuit Switching:
 
Devre anahtarlamasının kısıtlamalarını ortadan kaldırmak için tasarlanan bu yöntemde, bir bağlantı için birden fazla time slot kullanılabilmektedir. Ancak birden fazla time slot kullanılırsa bunların senkronize edilmesi zorunluluğu ortaya çıkar.
Başka bir problem de 'basic rate'in seçilmesindedir. Eğer bu değer büyük seçilirse (örneğin 2 Mbit/s) küçük hat genişliği gerektiren servisler (ses 64 kbit/s) gereksiz yere kaynak tüketmiş olacaklardır. Bu değer küçük seçilirse de (1 kbit/s) büyük bant genişliği gerektiren servisler (HDTV 144 Mbit/s) için çok fazla miktarda kanalın kontrol edilmesi gerekecektir; bu da işleri çok karmaşık hale getirir. Bu soruna üretilen çözüm ise bir çerçeveyi farklı bit oranları olan slotlara bölmektir.
Böyle bir sistemde her farklı time slot için özel bir tür anahtar kullanılmalıdır (farklı bit rate'lerden dolayı). Abonenin gelen/giden bilgisi anahtarlara/anahtarlardan yönlendirilmeden önce multiplex/demultiplex işleminden geçirilmelidirler (Bu işlem farklı bit rate'deki kanalların ilgili anahtara yönlendirilmesi için yapılır).
Farklı bit rate'ler kullanılabilmesine karşın bunların sabit değerler olmasından dolayı, servislerin ihtiyaçlarında oluşacak değişikliklere karşı esnek olması beklenemez (Bant genişliği ihtiyacının artması, sıkıştırma teknolojisindeki gelişmelerden dolayı ihtiyacın azalması vb.).
Bu sistemler doğal olarak hat anahtarlamanın dezavantajlarını da içerirler (Kaynakların ihtiyaç dışında meşgul edilmesi vb.).
 
4.2.3-Paket Anahtarlama (Packet Switching):
 
Bu transfer modunda kullanıcının bilgileri paketler halinde taşınır. Bu paketlerde kullanıcının bilgisine ek olarak başlık (header) denen ve yönlendirme (routing), hata kontrol ve akış kontrol için kullanılan bilgileri içeren saha da bulunur.
Eski bağlantıların güvenliği düşük olduğundan dolayı bu tip sistemlerde ileri düzeyde hata kontrolü yapılır (İçinden geçilen her node'da paket içeriği, hatalara karşı kontrol edilir…). Her node ‘da hatalı paketler için tekrar gönderim isteği yapılır.(ARQ -Automatic Repeat Request)
Paket boyutları değişkendir. Dolayısıyla kompleks akış kontrolü gerektirirler. Ancak iletişim hızı düşük olduğundan bu pek sorun yaratmamaktadır.Protokollerin karmaşıklığından ve tekrar gönderme işleminden dolayı yüksek hız gerektiren servislerde ve gerçek zamanlı uygulamalarda pek kullanılmazlar.
 
4.2.4-Frame Relaying:
 
Frame Relaying, iletim hatlarının güvenilirliği nedeniyle, ağ içinde paket anahtarlamalı sistemlere (X.25) oranla daha az fonksiyonelliğe sahiptir (Daha kısıtlı hata kontrol ve düzeltme yapılır). Bu da ağ içi anahtarlama noktalarında daha hızlı bilgi işleme imkanı sağlar.
Paketlerin tekrar gönderimi ancak uç noktalar arasında yapılır (yani aradaki node'lar paketlerin tekrar gönderimini istemez). Buna karşın node'larda paketler hala hatalara karşı kontrol edilirler. Bunun nedeni hatalı paketlerin iletimine devam edilmesinin bir anlamının olmamasıdır.
 

4.2.5-Cell Relaying(Fast Packet Switching-ATM):

 

Fast Packet Switching (ATM), birçok varyasyonu içeren bir kavramdır. Ancak bunların temel karakteristiği aynıdır: Ağda minimum fonksiyonellikle paket anahtarlama.
Gönderici ve alıcı arasında bir senkronizasyon yoktur. Senkronizasyon, gerektiğinde boş paketlerin eklenip çıkarılmasıyla sağlanabilir.
ATM'de ağ içinde CRC ya da ARQ türünden hata kontrol fonksiyonları yoktur. Hat anahtarlamada olduğu gibi hataların düzeltilmesi uç noktalardaki protokollere bırakılmıştır.
ATM ‘in Frame Relay’den en önemli farkı, ATM’de verilerin sabit ve küçük boyutlu paketler (hücreler) halinde iletilmesidir. Frame Relay de ise paket boyu değişkendir.
 
5.-ATM HÜCRE YAPISI
 
ATM’de bilgi aktarımı için kullanılan temel birim 53 byte'lık sabit uzunlukta olan ve hücre (cell) olarak adlandırılan özel bir tür pakettir. Hücrelerin ilk 5 byte'lık kısmı başlık (header) olarak adlandırılır ve hücrenin ağ içinde ilerleyebilmesi için gerekli olan temel bilgileri taşır. (Paket anahtarlama yönteminde bulunan ve ileri düzeyde fonksiyonellik sağlayan alanlar hücre başlıklarında olabildiğince azaltılmıştır). Başlığın fonksiyonelliğinin düşük düzeyde tutulması da ATM anahtarlarına yüksek hızda işlem yapma imkanı verir. Geriye kalan 48 byte ise iletilecek olan bilgiyi içerir.
 
5.1- ATM’deki Hücre Tipleri
 
Unassigned Cells: Trafik olmadığı durumda, ATM tabakası tarafından gönderilen boş paketlerdir. Bantgenişliğini doldurmak veya senkronizasyon amaçlı kullanılırlar. Aynı zamanda IDLE hücreleri vardır. Bu hücrelerin özelliği fiziksel tabaka tarafından yaratılmalarıdır. ATM tabakasına çıkmazlar, fiziksel katmanlar arasındaki senkronizasyonda kullanılırlar.
 
Meta-Signaling Cells: Ağ ile bir oturum kurmakta ve oturum servislerini saptamada kullanılırlar.
 
General Broadcast Cells: UNI’deki tüm istasyonlara gönderilen paketleri belirlerler.
 
Point-to-Point Signaling Cells: ATM tabakasında noktadan noktaya bağlantı sağlayan UNI veya NNI arayüzü hücrelerini belirlerler.
 
F4 ve F5 Hüceleri: Sırasıyla VP ve VC bakım hücrelerini belirlerler.
 
Resource Management Cells: VC üzerinde hızlı kaynak yönetimi için ayrılmışlardır.
 
ILMI (Interim Local Management Interface) Cells: ATM kullanıcı aygıtlarının durumlarını ve UNI’deki VP ile VC konfigürasyonu ile ilgili bilgileri taşırlar.
 
5.2-Neden Sabit Uzunluk ?
 
Bir sistemde sabit uzunlukta hücreler kullanıldığında etkinlik, gönderilecek bilginin uzunluğuna göre değişir. Eğer gönderilecek bilgi küçük miktarlardaysa ve hücrelere bölündüğünde son hücrede büyük oranda (30-40 byte) boşluk kalıyorsa bu iletişimdeki oranı pek yüksek olmaz. Ancak gönderilecek bilgi 48 byte'ın tam katıysa yani hücrelerin hepsi tamamen doluysa maximum etkinliğe (%90.5) ulaşılabilir. (Maximum etkinliğin %90.5 olmasının sebebi gönderilen 53 bytelik her hücrenin 5 byte'ının başlığa ayrılmış olmasıdır. 48/53=0.905...)
Değişken uzunlukta hücreler kullanılınca sistemde neredeyse %100 ’lük etkinliğe ulaşılır. Ancak, farklı uzunluktaki paketlerin kuyruklama için buffer'da etkin olarak saklanması oldukça zordur ve komplike algoritmalar gerektirir. Bu kompleks buffer işlemleri de yüksek hız gerektirir. Bu tür pratik nedenlerden dolayı degişken uzunlukta hücre kullanımı engellenmiştir.
Sabit uzunluktaki hücrelerde kalan boşluklar sistem etkinliğine olumsuz yönde etki eder, ancak B-ISDN'de sunulacak servislerin zaten yüksek miktarda bilgi iletimine ihtiyaç duyması bu olumsuzluğu ortadan kaldırır.
 
5.3-Neden 53 Byte ?
 
 Hücre boyunun seçilmesinde farklı faktörler rol oynamıştır. Uzun bilgi alanları iletimin etkinliğini artırır. Çünkü her başlıkla beraber gönderilen bilginin miktarı artar ve böylece başlıklardan kaynaklanan overhead'ın oranı azalır.Ancak bilgi alanının boyu arttıkça paketleme sırasındaki gecikme de (packetization delay) artar. Uzun hücreler kullanıldığında ağ içindeki gecikmenin de belirli limitleri aşması daha kolay olur (Örneğin telefon görüşmeleri için bu gecikme sınırı 25 ms'dir). Bu da ses iletiminde yankı önleyicilerin kullanılmasını zorunlu kılar. Ayrıca uzun hücreler anahtarlarda kullanılan geçici depolama alanlarının büyük olmasını gerektirir. (Hücre kayıplarını önlemek için kuyruklar hücre boyutundan bağımsız olarak belli miktarda hücreyi saklayabilecek kapasitede olmalıdırlar)
Bütün bu etkenler göz önüne alınarak hücredeki bilgi sahasının boyunun 32 ya da 64 byte civarında olması öngörülmüştür (Avrupa ses iletimindeki kolaylığından dolayı 32, Amerika ve Japonya ise etkinliğinden dolayı 64 byte'lık boyutlarda ısrar etmişlerdir). Sonuçta 48 byte bilgi + 5 byte başlık olmak üzere 53 byte hücre boyutu olarak kabul edilmiştir.
 
6.-ATM KATMANLARI
 
ATM ‘in üzerinde kurulduğu fiziksel tabaka yapısı SONET/SDH, DS3 veya FDDI olabilir. ATM, fiziksel ortamdan bağımsızdır ancak geniş tabanlı genel taşıyıcı olarak, eş zamanlı bir iletim  yapısı olan SONET (Synchronous Optical Network) tercih edilir. SONET Bellcore tarafından üretilmiş ve ANSI (American National Standards Institue) tarafından standartlaştırılmıştır. SONET, fiber kablo üzerinde yüksek hızda dijital sinyal iletimini sağlamak için tasarlanmıştır. Verileri 51.84 Mbps hızda taşımak için standart çoklama biçimini kullanır. Ayrıca optik sinyal standardını, farklı kaynaklardan karşılıklı bağlantı için kullanır. Geniş işlem yapma, yönetim ve bakım özelllikleri vardır. Esnek yapısıyla, gelecekte varolacak yeni teknolojilere ayak uydurabilir.
   Fiziksel tabakanın üzerinde ise ATM ve AAL (ATM Adaptation Layer) olmak üzere iki tabaka bulunur. AAL, ATM ile diğer katmanlar arasında arayüz görevini yürütür. AAL, CS (Convergence Sublayer) ve SAR (Segmentation and Reassembly Sublayer) den oluşur. SAR farklı uzunluk ve formattaki PDU (Protocol Data Unit) ‘ları (yani iletilecek veri paketlerini) 48 okteklik (sekizlik) parçalara ayırır. CS’nin fonksiyonları AAL tarafından işlenen trafiğin tipine göre değişir.
   Gönderici taraftaki ATM tabakasında, SAR’dan gelen 48 sekizlik bilgiye 5 byte’lık hücre başlığını ekler. Ağ içindeki anahtarlardaki ATM tabakaları VPI ve VCI bilgilerini kullanarak yönlendirme işlemlerini gerçekleştirir. Alıcıdaki ATM tabakası 5 byte’lık başlık bilgisini çıkarır ve AAL’ e iletir.
 
6.1- AAL  Katmanı Tarafından Desteklenen Trafik Sınıfları
 
ATM AAL katmanı, değişik trafik tiplerini desteklemek için 5 tane değişik trafik sınıfına sahiptir. Her trafik tipi için kaynak ve varış noktaları arasında herhangi bir zaman ilişkisi olmasının gerekip gerekmediği, bit hızının karakteristiği ve bağlantı uyumlu olup olmadığı, trafik tipleri için birbirinden farklıdır.
 
6.2 -AAL Tipleri
 
AAL, trafik tiplerini desteklemek amacıyla AAL farklı protokolllere sahiptir.
 
6.2.1-AAL-1
 
A Sınıf trafiği destekler ve PDU yapısı 48 sekizlikten oluşur. Payload(Kullanıcı Verisi), 46 veya 47 sekizlik olabilmektedir. SNP (Sequence Number Protection), SN üzerinde hata kontrolü yapar. SNP sahası, ancak 1 bitlik hataları düzeltebilmektedir. Payload ise CSI (Convergence Sublayer Indication) , işaretci sahanın kullanıp kullanılmayacağını gösterir. CSI’nın sıfır olması işaretçinin kullanılmadığını ve kullanıcı verisinin 47 sekizlik olduğunu gösterir. İşaretçi, verilerin hücre içinde yerleşimini tutmaktadır.
 
6.2.2- AAL –2
 
Sınıf-B trafiğini destekleyen protokoldür. Başlık kısmında SN (Sequence Number) ve IT (Information Type) bulunur. IT sahası, BOM (Beginning Of Message), COM (Continuation of Message) ve EOM (End Of Message) sahalarından oluşur. Kuyruk kısmında, LI (Length Indicator) sahası Payload sahasındaki sekizlik sayısını tutar, CRC’de hata kontrolünde kullanılır.
 
6.2.3 - AAL-3/4
 
İlk olarak, bağlantı uyumlu VBR trafiğini destekleyen AAL-3 ve bağlantısız VBR trafiği için AAL-4 protokolleri tanımlandı. Sonra bu iki tip birleştirilerek, AAL-3/4 protokolü tanımlandı.
SN, IT, LI ve CRC sahaları AAL-2 protokolünde kullanılan yapıyla aynıdır, ama AAL-3/4 ‘te bu sahaların uzunlukları bellidir. MID (Message IDentification) sahası, belli bir bağlantıdan gelen trafiğin birleştirilmesinde kullanılır.
 
6.2.4- AAL-5
Forum tarafından yüksek hızda, bağlantı uyumlu servis kullanıcılarına hizmet veren, az overhead’e sahip, hata bulma oranı yüksek olan protokoldur. Frame Relay trafiğinde uygundur.
6.2.5-AAL-6
 
ATM-Forum tarafından ortaya çıkarılan, MPEG kodlu video için tanımlanacaktır.
 
                  
 
Şekil-2 : B-ISDN protokol katmanları ve üstlendikleri görevler görünmektedir.
 
 
7.-ATM’DE BAĞLANTI YAPISI
 
ATM’de mantıksal bağlantılar, sanal kanal bağlantıları (VCC-Virtual Channel Connection) olarak adlandırılır. VCC, B-ISDN ‘in en temel birimidir. Bir VCC , iki son kullanıcı arasında ağ aracılığıyla kurulur. Değişken oranlarda (variable rate), sabit boyutlu hücreler full-duplex (çift yönlü) akışla bağlantı üzerinden taşınır. VCC ‘ler aynı zamanda kullanıcı-network exchange (kontrol sinyalleme) ve network-network exchange (network yönetimi ve yönlendirme ) için kullanılır. Şekil-3’te sanal bir ATM bağlantısının kesiti gorulmektedir
 
 
 
 

Şekil-3

   Sanal yol (VP-Virtual Path) kavramı, yüksek hızlı ağlarda kontrol harcama-larının yüzdesinin bütün network harcamaları içinde yüksek yüzdelere artması sonucu geliştirilmiştir. Sanal yol tekniği, network içinde ortak yolları paylaşan bağlantıları gruplayarak (VPC-Virtual Path Connection) kontrol masraflarını azaltmaya yarar. Network yönetim işlemleri bundan sonra çok sayıdaki bireysel kanallar yerine az sayıdaki bağlantı gruplarına uygulanabilir.
   VPC ’lerin kulanımından doğan avantajlar :
Þ  Basitleştirilmiş network mimarisi (Ağ ortamındaki fonksiyonların VPC ve VCC kavramlarına göre sınıflandırılmalarından dolayı işlemler daha basitleşir),
Þ  Artırılmış network performansı ve güvenilirlik (Ağ daha az iletişim birimiyle uğraşır),
Þ  Azaltılmış işlem ve kısa bağlantı kurulma zamanı (Bağlantı işlemlerinin büyük kısmı VPC ilk kez oluşturulurken yapılır. Var olan bir VPC’ye VCC’ler eklemek çok az bir işlem gerektirir),
Þ  Geliştirilmiş ağ servisleri. [2]
 
ATM'de veri bağlantıları VCI ve VPI ile tanımlandıktan sonra, verilen herhangi bir yöne giden sanal yollar çoklanarak fiziksel hatta verilir. Sanal kanal bağlantıları son kullanıcılar arasında anlamlıdır. Fakat bu bağlantı tanımlayıcıları, hücreler ATM ağı içinde ilerlerken değişebilir. Bu yüzden belli bir VCI değerinin kullanıcı açısından bir önemi yoktur. Sorumluluk ATM ağındadır.
            VC ve VP ile oluşan bağlantı yapısı şöyledir: İki kullanıcı için kontrol işlemi tek tek bütün sanal kanallar yerine sadece VP bazında yapılabilir. Yani, bütün kanallar yerine sadece bir yol (path) incelenir.
   İki nokta arasında sonuçta oluşan bağlantının tümü Şekil-4 ‘te ifade edimiştir.
 

Şekil-4

 
8.-ATM ANAHTARLAMA
 
            ATM anahtarlamasındaki temel fikir mantıksal bir kanaldan anahtara giren bilginin yol üzerindeki bir sonraki noktaya iletilmesi için başka bir ATM kanalına yönlendirilmesidir. Genelde bir anahtardan çıkan çok sayıda mantıksal ATM kanalı olmasından dolayı, yönlendirmeden önce ilgili çıkış kanalı seçilmelidir. Bu seçim, giriş portunun numarasına ve hücrenin VPI, VCI değerlerine bağlı olarak yapılır.
 
8.1 -ATM Anahtarları
 
Anahtara ulaşan her hücrenin giriş port numarasına,VPI ve VCI değerlerine bakılır. Ardından, bu değerlerden yararlanılarak yönlendirme tablosundan hücrenin çıkış portu ve yeni VPI, VCI değerleri bulunur. Yeni bulunan VPI ve VCI değerleri; hücre, anahtardan çıkmadan önce başlıktaki eski değerlerin yerlerine yerleştirilir. Sonunda da hücre, tablodan bulunan çıkış portuna yönlendirilir.
   Bir anahtara genelde birden çok porttan hücre girdiğinden, bu hücrelerin çıkış portlarının çakışması olasıdır. Böyle bir durumda ilgili çıkış portu boşalıncaya kadar kimi hücreler geçici olarak bir tampon alanda saklanmak zorundadırlar. Bu hücreleri sıraya sokma işlemi kuyruklama olarak adlandırılır.
   ATM anahtarları, sanal yol (VP) ve sanal kanal (VC) anahtarları olmak üzere kendi aralarında ikiye ayrılırlar. Sanal yol anahtarları  yönlendirme sırasında sadece başlıktaki VPI değerini yenilerler. Halbuki sanal kanal anahtarları başlıktaki hem VPI hem de VCI degerlerini yenilerler.
   Anahtarlar için böyle bir ayrıma gidilmesinin nedeni ağ içindeki ara noktalarda yapılan işi azaltarak anahtarlamayı hızlandırmaktır. Ara noktalarda  sanal yollar değişmekte ancak bunların içerdiği kanallar aynı kalmaktadır. Böyle durumlarda sadece VPI değerlerini inceleyen bir anahtar kullanmak daha etkin bir yoldur.
 
Şekil-5 ’te sanal yol ve sanal kanal anahtarlarına örnek görülmektedir.
Şekil-5
Sonuç olarak bir ATM anahtarının temel görevleri aşağıdaki üç maddede toplanabilir:
1.    Hücreleri yönlendirmek (routing),
2.    Gerektiğinde hücreleri kuyruklamak (queing),
3.      Gelen hücrelerin başlıklarındaki VPI ve VCI değerlerini yönlendirme tablosundaki karşılıkları ile değiştirmek.
 
8.2-ATM Anahtarlarının Performansını Etkileyen Faktörler
 
Bağlantı Bloklama (Connection Blocking)
Bağlantı bloklama özelliği, anahtardaki bağlantı sayısının ve yükün çok fazla olmasından dolayı giriş portundan gelen bilgilerin bir çıkış portuna yönlendirilememesi durumunda bağlantının reddedilmesi anlamına gelir.
 
Hücre Kayıpları (Cell Loss)
Eğer anahtar içindeki kuyruklara hücreler çok hızlı ve çok sayıda gelirse, kuyruklarda taşma olacak ve bu da bazı hücrelerin kaybolmasına neden olacaktır. ATM anahtarları tasarımcıları, hücre kaybolma olasılığını 10-8 ile 10-11 arasında tutmaya çalışmaktadır.
 
Hücre Eklenmeleri (Cell Insertion)
ATM anahtarı içinde bazı hücreler yanlış yönlendirme sonucunda, başka bir mantıksal bağlantıya gidebilirler. Böylece bazı çıkış portlarında gereksiz hücre birikmesi olabilir. Bu tip bir olayın olması olasılığı da 10-11 ile 10-14 arasın tutulmaya çalışılmaktadır.
 
Anahtarlama Gecikmesi (Switching Delay)
Hücrelerin anahtar içinden geçerken mümkün olduğunca hızlı geçmesi gerekmektedir. Aksi halde, gecikme duyarlı gerçek zamanlı verilerin iletiminde sorunlarla karşılaşılacaktır. Bu gecikmeler, 10 ve 1000 ms arasında değerler alabilmektedir. Bu değerler birtakım olasılıklarla birlikte de verilebilmektedir. Örneğin, 10-10 değerinde 100 ms gecikme sözü, “anahtardaki gecikmenin 100 ms’den fazla olması olasılığı 10-10 dan azdır” anlamına gelmektedir.
 
9.-ATM TOPOLOJİSİ
 
ATM, yapı ve geliştirme bakımından esnek bir topolojiye sahiptir. Bunun yanında varolan ağ topolojilerine uygulanabilir ve etkin bir yapı oluşturulabilir. ATM’in topoloji yapısında iki türlü arabirimden sözedilir. Bunlardan birincisi Public UNI (Public User-to-Network Interface - Genel kullanıcı-ağ arayüzü), bir diğeri ise Private UNI (özel UNI) olarak adlandırılmaktadır.
Şekil-6 ’te ATM ağ topolojisinin genel olarak yapı mantığı verilmiştir
 
NETWORK
 
B-TE1-2: Broadband Terminal Equipment
B-NT1-2: Broadband Network Termination
B-TA     : Broadband Terminal Adapter
CPE       : Customer Premises Equipment
 
ATM
network
 
B-L/ET
 
B-NTI
 
B-NT2
 
B-TA
 
B-TE1/
B-TE2
 
ATM
endpoint
 
ATM
endpoint
 
 TA
 
private ATM
switch
 
private
UNI
 
public
UNI
 
public ATM
switch
 
CPE
 
R
 
SB
 
TB
 
UB
 
NETWORK
 

 
 
Şekil-6
 
Şekil-7’de ATM’in topoloji yapısı temel alınarak oluşturulmuş örnek bir Yerel Bilgisayar Ağı (LAN) görülmektedir:
 
 
Şekil-7
 
9.1-ATM Yerel Bilgisayar Ağları (ATM LANs) ve ATM LAN
Emulasyonu
 
   ATM gelecekteki genişbant çoklu-ortam servislerinin destekleyecek bir teknolojidir. Bununla beraber, iletişimde IEEE 802 tabanlı yerel ağlar ve bu ağlar üzerinde kullanılan uygulamalar günümüzde oldukça yaygındır. Bu yüzden ATM’in ilk aşamada bir LAN teknolojisi olarak IEEE 802 ağlarıyla uyumlu olması gerekir. Bu uyumun sağlanması için ATM, veri bağlantı katmanı gibi düşünülerek, varolan ağ katmanları, bu yeni bağlantı katmanını destekleyecek şekilde geliştirilmektedir. Böylelikle ATM üzerinde IP ve benzeri diğer protokoller çalışabilmektedir.
   Varolan LAN uygulamalarının ATM ağlarında desteklenebilmesi için bir başka çözüm ATM LAN Emulasyonudur. LAN Emulasyonu, bağlantı uyumlu ATM ağları üzerinde bağlantısız IEEE 802 ağları servislerinin nasıl gerçekleştirilebileceği üzerinde durur. Diğer bir deyişle, noktadan noktaya bağlantı sağlayan ATM anahtarının sanal paylaşılmış iletim ortamı görüntüsünü vermesini sağlamaktır. LAN Emulasyonu, ATM uç sistemleri ve ATM-LAN köprülerinde ağ katmanının altında gerçekleşir.
 
 9.1.1-LAN Emulasyonu Mimarisi
 
LAN emulasyon servisi aşağıdaki birimlerden oluşmuştur:
LAN Emulasyon istemcisi (LAN Emulation Client - LEC)
Bu birim, LAN ile ATM ağı arasındaki köprüdür. Kendilerine bağlı olan LAN’lardan gelen mesajları kabul eder. Eğer mesaj “broadcast” veya “multicast” ise mesajı “BUS” adı verilen ve aşağıda açıklanan birime gönderir.
BUS (Broadcast and Unknown Server)
Bu birim ATM ağına bağlı tüm LEC’ler ile bağlantılıdır. BUS, “broadcast” bir mesaj aldığında, bu mesajı bağlı olduğu tüm LEC’lere gönderir. LEC’ler ise mesajı kendilerine bağlı LAN’lardaki ilgili adreslere ulaştırır. “Multicast” mesajlar ise, BUS tarafından sadece belli bir grup LEC’e yollanır.
LAN Emulasyon Sunucusu (LAN Emulation Server - LES)
 
 
 
            LES’in amacı, LE-ARP (LAN Emulation Address Resolution Protocol) desteklemektir.    LE-ARP protokolü, bir LEC’in gelen bir MAC (Media Access Control) adresinin içeren başka bir LEC’in ATM adresini bulmasını sağlamaktadır. Bir LEC, bilinmeyen bir çerçeveye (karşılık gelen ATM adresi bilinmeyen bir MAC adresi) rastlandığında LES’e LE-ARP sorgusu gönderir. LES de, bu sorguyu diğer LEC’lere gönderir. Bu sorguyu alan tüm Lec’ler belirtilen MAC adresinin kendilerinde olup olmadığının kontrol eder, eğer kendisinde ise kendi ATM adresini de belirterek, LES’e cevap gönderir. LES de ilgili LEC’e haber vererek adres çözümleme işini bitirir.
 
 
10.-ATM 'İN DEZAVANTAJLARI
 
ATM pahalı  bir teknolojidir. ATM anahtarların liste fiyatları temel konfigürasyon için 9000$ 'dan başlayarak tam kurulu bir sistemde 350.000$ 'a kadar çıkan bir çeşitlilik göstermektedir. Fakat yakın bir zamanda bu teknolojinin ucuzlaması ve yaygınlaşması beklenmektedir .
ATM, yeni bir teknoloji olduğundan henüz gerekli donanım ve yazılım desteği yeterli değildir. Bunda en önemli etken standartların oluşmamasıdır. Özellikle yazılım konusunda büyük eksiklikler bulunmaktadır. "ATM teknolojisi henüz olgunlaşma evresindedir. Endüstri uzmanları, olgunlaşması  için iki ya da üç yıllık bir süre olduğunu tahmin etmektedir. " [6]
  ATM anahtarları, router(Yönlendirici) tarafından verilmekte olan hizmet sınıflarının pek çoğunu kendi yapısı içinde kullanıcılara sunmaktadır. Fakat  henüz standartların oluşmaması yüzünden aşağıda sıralanan, router 'ın yapabildiği fonksiyonları anahtarlar henüz yapamamaktadır .
1. Güvenli WAN Erişimi: Yönlendiriciler diğer ağlara bağlanma konusunda şimdilik tek güvenilir cihazlar olarak kabul edilmektedir.
2. Güvenlik Duvarları(Firewall): Yönlendiriciler network'ün belirli alanları dışında kullanıcı erişimini sınırlama özelliğine sahiptir. Bu, ortaya çıkan bir sorunun ağın başka bir bölümüne intikal etmesini engellemektedir.
3. Çoklu Protokol Desteği: Yönlendiriciler, tipik bir heterojen network'lerde bulunan bütün protokolleri ( IP, IPX, SNA ve Apple Talk gibi) çalıştırabilmektedir.
 
11.-ATM 'İN AVANTAJLARI
 
1.   ATM hızla gelişen bir teknolojidir. ITU-T ve ATM Forum, standartlaşma çalışmalarında bulunmaktadır . Gelecekte belirecek talepler şimdiden birçok  büyük firmanın bu konuda araştırmalara başlamasına yol açmaktadır. Büyük firmalar bu konuda iş yapan küçük firmaları kendi bünyelerine katarak bu konuda çalışmalarını hızlandırmaktadır. Bay Networks, Cisco  ve 3Com  gibi büyük Network Firmaları bu pastadan daha büyük bir pay kapabilmek için savaşmaktadır. [6]
 
2.   ATM ile verileri çok büyük hızlarda taşımamız mümkündür. Hızı artırıcı amaçlı olarak hata  kontrolü minimum düzeyde tutulur. Bu durumda, hata kontrolü kullanıcının sorumluluğuna bırakılmaktadır.
 
3.   Video, ses, TV, text gibi türlü veri tiplerinin hepsini  destekleyen ve bütün ağların  bir ortamda entegrasyonu için taban sağlayacak BISDN için ITU-T tarafından switching (anahtarlama) modeli olarak ATM seçilmiştir.
 
4.   ATM, fiziksel (taşıma) ortamından bağımsızdır. Kablolar koaksiyel kablo olabileceği gibi fiber de olabilmektedi. Fiziksel katman olarak SONET tavsiye edilmektedir.
 
5.   ATM var olan sistemlerle uyumludur. Bu, onun her tür ağ ortamıyla sorun olmadan konuşabilmesini sağlamaktadır.
 
6.   ATM, veri iletiminde esnektir. Değişken bit hızlarını destekler  niteliktedir.Kullanıcı isteğine göre iletişim hızı belirlenir. "Hatta bazı anahtarlar, kullanıcılara ait bant genişliği de sunabilirler".  [6]
      ATM ağında hata oranı ve gecikme değeri bildirilerek belli bir kalitede hizmet alınabilir. Bu bilgiler, ağa bağlanıldığında kullanıcı tarafından ağ ortamına bildirilir. İstenilen şey hız ise hata oranı göz önüne alınmayabilir, hata oranı önemliyse o zaman hızdan ödün vermek gerekecektir .
 
7.   ATM, sabit boyutlarda ve küçük hücreleri anahtarladığından ağ kaynaklarını optimum kullanabilir. "Devre anahtarlamadaki gibi devre bütün bağlantı için kapatılmaz. Paket anahtarlama tekniği kullanılarak sadece bilgi transfer edilirken devre kullanılır" [1]. Diğer taraftan anahtarlar, yalnızca iletişimin gerekli olduğu düğümler (nodes) arasında kurduğu bağlantılarla, ağ bant genişliğinin etkin kullanımını sağlamaktadır. [6]
 
8. ATM ağ yapısı büyümeye elverişlidir.
 
 
 
9.  ATM onu yorumlayan firmaya göre bazı değişiklikler taşıyabilir. Belirli şartları sağladıkları sürece değişik ATM -lan'lar birbirleriyle iletişim yapabilirler.
 
10. ATM istatistiki çoklama tekniğini kullanarak çok kullanıcının veri trafiğini tek bir ağ üzerinde birleştirir. Bunu da en etkin şekilde yapar.
 
11. ATM anahtarlama, yönlendiricilere göre daha kolay anlaşılır, uygulaması kolay ve daha ekonomik bir çözümdür. Yönlendiricilerin mevcut yazılımlarının düzeyi, karmaşılığı, mimarisi ve fiyatı anahtarlar karşısında devre dışı kalmalarına yol açmaktadır. [6]
 
12. ATM anahtarları , mevcut ağ ekipmanı üzerinde hiç değişiklik yapmadan ya da çok küçük bazı değişiklikler yaparak ağa eklenebilir.
 
 
12.-SONUÇ
 
B-ISDN teknolojisinin, varolan iletişim ihtiyaçlarının karşılanması ve gelecekte varolabilecek ihtiyaçların karşılanmasına yönelik  esnekliği düşünüldüğünde geleceğin iletişim teknolojisi olacağı açıktır. Ancak, bu yapıyı olanaklı kılan ATM altyapısındaki maliyet ve tam standartlaşamama gibi dezavantajlardan dolayı henüz bu teknolojiye tam olarak bir geçiş sağlanamamıştır.
 
 
 
 
 

13.     KAYNAKÇA

 
 
[1] DE PRYCKER, MARTIN ;“Asynchronous Transfer Mode, Solution For Broadband ISDN”, Ellis Harwood, 1993
[2] STALLINGS, William ;“Networking Standards A Guide to OSI, ISDN, LAN and MAN Standards”
[3] ERDUR, Cenk ; “İleri Bilgisayar Ağları ATM Semineri Raporu” , 20.5.96
[4] ATEŞ, Ahmet Feyzi  ; “B-ISDN, ATM ve Diğer Gelişen Teknolojiler “,  27.5.96
[5] ÇIMENSEL, Ahmet  ; “ATM Networks Semineri (Bölüm1)” , 13.5.96
[6] STEPHEN, P. Klett Jr. ; ComputerWorld Dergisi Sayı 298 , Sayfa 43-48 , 1995
[7] GAGE, Beth  ; ComputerWorld Dergisi Sayı 305 , Sayfa 27-37 , 1995
[8] Çeşitli Internet Kaynakları  (Başlangıç Noktası -“http://www.yahoo.com”)
[9] EBRAHIM, Zahir ; “A Brief Tutorial on ATM“
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

14.-EK-Mini Sözlük

   * AAL: ATM Adaptation Layer
   * ANSA: Advanced Networked Systems Architecture
   * ASIC: Application Specific Integrated Circuit
   * ATM: Asynchronous Transfer Mode
   * AUU: ATM User User indication, "the bit", end of AAL5 block marker
   * AVA: ATM Video Adaptor
   * B-ISDN: Broadband Integrated Services Digital Network
   * CAC: Connection Admission Control
   * CBR: Constant Bit Rate
   * CCITT: Comitée Consultatif International Télégraphique et Téléphonique
     (now the ITU-TS)
   * CLP: Cell Loss Priority (a bit in a B-ISDN cell header)
   * CRC: Cyclical Redundancy Check
   * DAN: Desk Area Network
   * E1: 2 Mbit/sec
   * E2: 8 Mbit/sec
   * E3: 34 Mbit/sec
   * EATM: EISA ATM (an adaptor)
   * EDL: Ethernet Data Link
   * FDDI: Fiber Distributed Data Interface
   * FAS: Framing and Sequencing
   * FIFO: First In First Out
   * GFC: Generic Flow Control (a 4 bit field in a B-ISDN cell header)
   * H.261: A constant bit rate video compression standard.
   * HEC: Header Error Check (an 8 bit CRC in a B-ISDN cell)
   * IOC: Input Output Controller
   * IP: Internet Protocol
   * ISDN: Integrated Services Digital Network
   * ISO: International Standards Organisation
   * ITU: International Telecommunication Union
   * LAN: Local Area Network
   * MAC: Media Access Control
   * MAN: Metropolitan Area Network
   * MPEG: Motion Picture Experts Group (a video compression standard)
   * NOSSDAV: Network and Operating System Support for Digital Audio and
     Video ("nose dive")
   * NNI: Network Network Interface
   * OC3: 155 Mbit/sec
   * OC12: 622 Mbit/sec
   * OSI: Open Systems Interconnection
   * PDU: Protocol Data Unit (a packet)
   * PLT: Payload Type (a 3 bit field in a B-ISDN cell header)
   * PTM: Packet Transfer Mode
   * Q.93B: The Standard (i.e. awful) ATM signalling protocol
   * QOS: Quality of Service
   * SAR: Segmentation and Reassembly
   * SDH: Synchronous Digital Hierarchy
   * SDU: Service Data Unit (a packet)
   * SOC: Start of Cell
   * SONET: Synchronous Optical Network
   * SPROING:To Break
   * STM: Synchronous Transfer Mode
   * STS1: 155 Mbit/sec
   * STS4: 622 Mbit/sec
   * T1: 1.5 Mbit/sec
   * T3: 45 Mbit/sec
   * TDM: Time Division Multiplexing
   * UNI: User Network Interface
   * VC: Virtual Channel or Virtual Circuit
   * VCI: Virtual Circuit Identifier (also Virtual Channel Identifier)
   * VP: Virtual Path
   * VPI: Virtual Path Identifier
   * WAN: Wide Area Network
 
 
 
 

 

 

 

 
 
        1.Özet
 
 
Bu projenin amacı günümüz telekomünikasyon yapısını ve ihtiyaçlar doğrultusunda bu  yapının gelişmesini anlatmaktır. Bu yeni ihtiyaçlara cevap verebilecek yapı olarak B-ISDN kapsamında ATM teknolojisi ele alınmıştır. ATM protokolü kendine has katman yapısı ve anahtarlama teknolojisini içermektedir. ATM'de veri iletişiminde hücre adında özel bir yapıya sahip paketler kullanılmaktadır. ATM, kendine has topolojisinin yanında varolan sistemlerle de uyumludur.
 
 
       2.Giriş
 
 
Bilgisayar teknolojisinin ve dolayısıyla bilgisayar ağlarının büyük bir hızla gelişmesi sonucu, bilgisayarların kullanım amaçları ve üstlendikleri hizmetler eskisine oranla çok daha geniş bir alana yayılmıştır. Bu gelişime paralel olarak da yeni kullanım alanları doğmuş ancak bir süre sonra varolan yapılar bu yeni taleplere karşılık veremez hale gelmişlerdir. Şu anda  ihtiyaç duyulan pek çok servis (ses, görüntü, klasik veri iletimi, interaktif servisler vb.) yüksek hızlarda iletim kapasitesi gerektirmektedir.
Veri iletişiminde ortaya çıkan ilerlemeler (VLSI-Very Large Scale Integration, fiber optik ve anahtarlama teknolojilerindeki gelişmeler) bu ihtiyaçlara cevap verebilecek B-ISDN yapısının oluşmasına imkan sağlamıştır.
 ITU-T (International Telecommunication Union),  B-ISDN için transfer modu olarak ATM'i önermiştir. ATM ve B-ISDN teknolojisi aynı zamanda varolan sistemlere de adapte edilebilir olması açısından da avantajlıdır.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3.-GÜNÜMÜZ TELEKOMUNİKASYON ALTYAPISI ve B-ISDN
 
 
            Bugünün telekomunikasyon ağlarının herbiri spesifik hizmetler vermek üzere tasarlanmıştır. Bunun anlamı, herbir telekomunikasyon hizmeti için en az bir ağın olması ve bu ağların hedeflediği spesifik servisi sağlamak amacıyla tasarlanıp çalıştırıldıklarından dolayı, çoğunlukla başka amaçlar için kullanılmaya uygun olmamalarıdır. Örneğin, X.25 veri iletişimi ağları uçtan uca gecikme ve kayma değerlerinin kontrol edilememesi nedeniyle, gerçek zamanlı ses iletişimi için uygun değildirler. Ayrıca, bir ağ içinde, belli zamanlarda boş duran birtakım kaynaklar da başka amaçlar için kullanılamamaktadır. (Örneğin, varolan telefon ağlarının TV yayını için uygun olmamaları sebebiyle günün geç saatlerinde ses iletim ihtiyacının düşük olmasına rağmen, kablolu TV yayını için kullanılamaması.)
Sonuçta birbirinden bağımsız ve farklı birçok iletişim ağı ortaya çıkmış ve bu durum, ağların kullanım esnekliğini ve etkinliğini düşürmüştür. Buna paralel olarak da bu tür ağların tasarım, bakım, üretim maliyetleri de yükselmiştir. Bu ağlara örnek verecek olursak :
·       Düşük hızlarda (300 kb/sn) bilgi transferi sağlayan teleks ağları,
·       POTS (Plain Old Telepnone Service) adıyla da bilinen ve PSTN (Public Switched Telephone Network -  Anahtarlamalı Telefon Ağı ) üzerinden sağlanan iki yönlü ses iletişimi için tasarlanan ağlar,
·       X.25 ve benzeri PSDN (Public Switched Data Networks ) paket anahtarlamalı veri ağları,
·       CATV (Community Antenna TV), kablolu televizyon ağları,
·       LAN (Local Area Networks ), yerel iletişim ağları 
            Yukarıda örnek verdiğimiz telekomunikasyon ağları ve varolan ihtiyaçlar gözönüne alındığında, bu altyapının yetersiz kalacağı açıktır. Özellikle gelecekte kullanılması düşünülen video-telefon, video-konferans, video-kütüphane ve benzeri servisleri düşünürsek, bu tür ihtiyaçları karşılayacak iletişim ağlarının servis türünden bağımsız, genişbantlı tek bir ağ olması gerektiği ortaya çıkmaktadır.
            Bu alandaki çalışmalar seksenli yılların başlarında başlatılmış ve ISDN (Integrated Switched Digital Networks) olarak adlandırılmıştır (Şu anda N-ISDN Narrowband ISDN olarak anılmaktadır). Bu ağların bant genişliğinin arttırılmasıyla hertürlü ses, veri, hareketli video ve yüksek çözünürlükte TV iletiminin entegre edilmesi sağlanmış ve gelişen yapı B-ISDN (Broadband ISDN) olarak adlandırılmıştır.
            B-ISDN yapısını olanaklı kılan faktörler, fiber-optik teknolojisinin gelişerek iletişim hatlarında geniş çapta kullanılır olması ve yarı iletken teknolojisinde sağlanan ilerlemeler olarak gösterilebilir. Böylelikle, yeni geliştirilen yapıda, iletim ortamının daha güvenilir olması ve hata kontrolunun ağ içinde yapılması gerekliliğinin ortadan kalkması ile daha etkin ve maliyeti düşük yeni bir aktarım biçimi kullanılabilmiştir. İşte bu yeni teknoloji ATM (Asynchronous Transfer Mode) olarak adlandırılmaktadır.
ITU-T (Eski adıyla CCITT) tarafından da yapılan araştırmalar sonucu 1988 yılında ATM’ in B-ISDN için en uygun aktarım protokolu oldugu belirlenmiştir.
            ITU-T tarafından B-ISDN yapısı ile verilmesi düşünülen hizmetler şöyle sıralanabilir:
·      HDTV(High Definition TV) Yüksek çözünürlüklü TV servisleri,
·      Videokonferans servisleri,
·      İstek üzerine video (Video on Demand) servisleri,
·      Karşılıklı iletişime dayalı (interaktif) servisler,
·      Mesaj servisleri,
·      Veri transfer servisleri.
 
 
 
4.-ATM NEDİR ?
 
Her türden veriyi yüksek hızlarda taşıyabilen anahtarlanmış, hücre tabanlı aktarım protokolüdür. ATM her türden network trafiğini (veri, ses video ve TV sinyalleri)  53-byte'lık hücreler halinde iletir.
 
4.1-ATM  Anahtarlamanın Tarihçesi
 
ATM’in başlangıcından bu yana gelişimi Şekil-1’de görülmektedir :
 
 
Şekil-1
 
 4.2-Transfer Modları
 
Transfer modu, bir telekomunikasyon ağında kullanılan iletim (transmission), çoklama (multiplexing) ve anahtarlama (switching) tekniklerinin toplamına verilen isimdir. Network dünyasında transfer modu konusunda temel olarak iki kutup bulunmaktadır. Bunlar devre anahtarlama ve paket anahtarlamadır.
Devre ve paket anahtarlama belirtildiği gibi iki uç noktadır ve birbirlerine karşı avantaj ve dezavantajlara sahiptirler. Zamanla bu iki zıt yöntemin de diğer yöntemin avantajlarını kullanan varyasyonları ortaya çıkmıştır. Aşağıda bu metodların başlıca açıklamaları bulunmaktadır.
4.2.1-Devre Anahtarlama (Circuit Switching):
 
Bu transfer modu özellikle telefon ağlarında kullanılır. N-ISDN 'de de bu yöntem kullanılmaktadır.
Devre anahtarlamanın temeli, bir iletim sırasında sadece ilgili bağlantı tarafından kullanılabilen adanmış sabit kapasiteli bir kanal oluşturmaktır.
Belirli zaman aralıklarında (125 µs gibi) sabit uzunlukta bit kümeleri gönderilir (8 bit, 1000 bit gibi). Bu kümelerin her birine 'time slot' denir ve bunlar birleştirilerek çerçeveleri (frame) oluştururlar. (Çerçeveler de belirli aralıklarda tekrarlanır. Bu çerçevelerin içindeki her time slot, devam ettiği sürece belirli bir bağlantıya adanır. Ancak bağlantı kapatıldığında ilgili slot başka bir uygulamanın kullanımına sunulabilir.) Pür hat anahtarlamalı sistemlerde her time slot'un barındırabileceği bit miktarı aynıdır ve sabittir. Yani her servis için sabit bir bit hızı vardır.
Devre anahtarlamalı sistemlerde bir hat, bağlantı boyunca bir uygulamaya adandığından dolayı  sistemde oluşacak gecikmeler ancak iletim hattındaki yayılma gecikmesine bağlıdır.
 
4.2.2-Multirate Circuit Switching:
 
Devre anahtarlamasının kısıtlamalarını ortadan kaldırmak için tasarlanan bu yöntemde, bir bağlantı için birden fazla time slot kullanılabilmektedir. Ancak birden fazla time slot kullanılırsa bunların senkronize edilmesi zorunluluğu ortaya çıkar.
Başka bir problem de 'basic rate'in seçilmesindedir. Eğer bu değer büyük seçilirse (örneğin 2 Mbit/s) küçük hat genişliği gerektiren servisler (ses 64 kbit/s) gereksiz yere kaynak tüketmiş olacaklardır. Bu değer küçük seçilirse de (1 kbit/s) büyük bant genişliği gerektiren servisler (HDTV 144 Mbit/s) için çok fazla miktarda kanalın kontrol edilmesi gerekecektir; bu da işleri çok karmaşık hale getirir. Bu soruna üretilen çözüm ise bir çerçeveyi farklı bit oranları olan slotlara bölmektir.
Böyle bir sistemde her farklı time slot için özel bir tür anahtar kullanılmalıdır (farklı bit rate'lerden dolayı). Abonenin gelen/giden bilgisi anahtarlara/anahtarlardan yönlendirilmeden önce multiplex/demultiplex işleminden geçirilmelidirler (Bu işlem farklı bit rate'deki kanalların ilgili anahtara yönlendirilmesi için yapılır).
Farklı bit rate'ler kullanılabilmesine karşın bunların sabit değerler olmasından dolayı, servislerin ihtiyaçlarında oluşacak değişikliklere karşı esnek olması beklenemez (Bant genişliği ihtiyacının artması, sıkıştırma teknolojisindeki gelişmelerden dolayı ihtiyacın azalması vb.).
Bu sistemler doğal olarak hat anahtarlamanın dezavantajlarını da içerirler (Kaynakların ihtiyaç dışında meşgul edilmesi vb.).
 
4.2.3-Paket Anahtarlama (Packet Switching):
 
Bu transfer modunda kullanıcının bilgileri paketler halinde taşınır. Bu paketlerde kullanıcının bilgisine ek olarak başlık (header) denen ve yönlendirme (routing), hata kontrol ve akış kontrol için kullanılan bilgileri içeren saha da bulunur.
Eski bağlantıların güvenliği düşük olduğundan dolayı bu tip sistemlerde ileri düzeyde hata kontrolü yapılır (İçinden geçilen her node'da paket içeriği, hatalara karşı kontrol edilir…). Her node ‘da hatalı paketler için tekrar gönderim isteği yapılır.(ARQ -Automatic Repeat Request)
Paket boyutları değişkendir. Dolayısıyla kompleks akış kontrolü gerektirirler. Ancak iletişim hızı düşük olduğundan bu pek sorun yaratmamaktadır.Protokollerin karmaşıklığından ve tekrar gönderme işleminden dolayı yüksek hız gerektiren servislerde ve gerçek zamanlı uygulamalarda pek kullanılmazlar.
 
4.2.4-Frame Relaying:
 
Frame Relaying, iletim hatlarının güvenilirliği nedeniyle, ağ içinde paket anahtarlamalı sistemlere (X.25) oranla daha az fonksiyonelliğe sahiptir (Daha kısıtlı hata kontrol ve düzeltme yapılır). Bu da ağ içi anahtarlama noktalarında daha hızlı bilgi işleme imkanı sağlar.
Paketlerin tekrar gönderimi ancak uç noktalar arasında yapılır (yani aradaki node'lar paketlerin tekrar gönderimini istemez). Buna karşın node'larda paketler hala hatalara karşı kontrol edilirler. Bunun nedeni hatalı paketlerin iletimine devam edilmesinin bir anlamının olmamasıdır.
 

4.2.5-Cell Relaying(Fast Packet Switching-ATM):

 

Fast Packet Switching (ATM), birçok varyasyonu içeren bir kavramdır. Ancak bunların temel karakteristiği aynıdır: Ağda minimum fonksiyonellikle paket anahtarlama.
Gönderici ve alıcı arasında bir senkronizasyon yoktur. Senkronizasyon, gerektiğinde boş paketlerin eklenip çıkarılmasıyla sağlanabilir.
ATM'de ağ içinde CRC ya da ARQ türünden hata kontrol fonksiyonları yoktur. Hat anahtarlamada olduğu gibi hataların düzeltilmesi uç noktalardaki protokollere bırakılmıştır.
ATM ‘in Frame Relay’den en önemli farkı, ATM’de verilerin sabit ve küçük boyutlu paketler (hücreler) halinde iletilmesidir. Frame Relay de ise paket boyu değişkendir.
 
5.-ATM HÜCRE YAPISI
 
ATM’de bilgi aktarımı için kullanılan temel birim 53 byte'lık sabit uzunlukta olan ve hücre (cell) olarak adlandırılan özel bir tür pakettir. Hücrelerin ilk 5 byte'lık kısmı başlık (header) olarak adlandırılır ve hücrenin ağ içinde ilerleyebilmesi için gerekli olan temel bilgileri taşır. (Paket anahtarlama yönteminde bulunan ve ileri düzeyde fonksiyonellik sağlayan alanlar hücre başlıklarında olabildiğince azaltılmıştır). Başlığın fonksiyonelliğinin düşük düzeyde tutulması da ATM anahtarlarına yüksek hızda işlem yapma imkanı verir. Geriye kalan 48 byte ise iletilecek olan bilgiyi içerir.
 
5.1- ATM’deki Hücre Tipleri
 
Unassigned Cells: Trafik olmadığı durumda, ATM tabakası tarafından gönderilen boş paketlerdir. Bantgenişliğini doldurmak veya senkronizasyon amaçlı kullanılırlar. Aynı zamanda IDLE hücreleri vardır. Bu hücrelerin özelliği fiziksel tabaka tarafından yaratılmalarıdır. ATM tabakasına çıkmazlar, fiziksel katmanlar arasındaki senkronizasyonda kullanılırlar.
 
Meta-Signaling Cells: Ağ ile bir oturum kurmakta ve oturum servislerini saptamada kullanılırlar.
 
General Broadcast Cells: UNI’deki tüm istasyonlara gönderilen paketleri belirlerler.
 
Point-to-Point Signaling Cells: ATM tabakasında noktadan noktaya bağlantı sağlayan UNI veya NNI arayüzü hücrelerini belirlerler.
 
F4 ve F5 Hüceleri: Sırasıyla VP ve VC bakım hücrelerini belirlerler.
 
Resource Management Cells: VC üzerinde hızlı kaynak yönetimi için ayrılmışlardır.
 
ILMI (Interim Local Management Interface) Cells: ATM kullanıcı aygıtlarının durumlarını ve UNI’deki VP ile VC konfigürasyonu ile ilgili bilgileri taşırlar.
 
5.2-Neden Sabit Uzunluk ?
 
Bir sistemde sabit uzunlukta hücreler kullanıldığında etkinlik, gönderilecek bilginin uzunluğuna göre değişir. Eğer gönderilecek bilgi küçük miktarlardaysa ve hücrelere bölündüğünde son hücrede büyük oranda (30-40 byte) boşluk kalıyorsa bu iletişimdeki oranı pek yüksek olmaz. Ancak gönderilecek bilgi 48 byte'ın tam katıysa yani hücrelerin hepsi tamamen doluysa maximum etkinliğe (%90.5) ulaşılabilir. (Maximum etkinliğin %90.5 olmasının sebebi gönderilen 53 bytelik her hücrenin 5 byte'ının başlığa ayrılmış olmasıdır. 48/53=0.905...)
Değişken uzunlukta hücreler kullanılınca sistemde neredeyse %100 ’lük etkinliğe ulaşılır. Ancak, farklı uzunluktaki paketlerin kuyruklama için buffer'da etkin olarak saklanması oldukça zordur ve komplike algoritmalar gerektirir. Bu kompleks buffer işlemleri de yüksek hız gerektirir. Bu tür pratik nedenlerden dolayı degişken uzunlukta hücre kullanımı engellenmiştir.
Sabit uzunluktaki hücrelerde kalan boşluklar sistem etkinliğine olumsuz yönde etki eder, ancak B-ISDN'de sunulacak servislerin zaten yüksek miktarda bilgi iletimine ihtiyaç duyması bu olumsuzluğu ortadan kaldırır.
 
5.3-Neden 53 Byte ?
 
 Hücre boyunun seçilmesinde farklı faktörler rol oynamıştır. Uzun bilgi alanları iletimin etkinliğini artırır. Çünkü her başlıkla beraber gönderilen bilginin miktarı artar ve böylece başlıklardan kaynaklanan overhead'ın oranı azalır.Ancak bilgi alanının boyu arttıkça paketleme sırasındaki gecikme de (packetization delay) artar. Uzun hücreler kullanıldığında ağ içindeki gecikmenin de belirli limitleri aşması daha kolay olur (Örneğin telefon görüşmeleri için bu gecikme sınırı 25 ms'dir). Bu da ses iletiminde yankı önleyicilerin kullanılmasını zorunlu kılar. Ayrıca uzun hücreler anahtarlarda kullanılan geçici depolama alanlarının büyük olmasını gerektirir. (Hücre kayıplarını önlemek için kuyruklar hücre boyutundan bağımsız olarak belli miktarda hücreyi saklayabilecek kapasitede olmalıdırlar)
Bütün bu etkenler göz önüne alınarak hücredeki bilgi sahasının boyunun 32 ya da 64 byte civarında olması öngörülmüştür (Avrupa ses iletimindeki kolaylığından dolayı 32, Amerika ve Japonya ise etkinliğinden dolayı 64 byte'lık boyutlarda ısrar etmişlerdir). Sonuçta 48 byte bilgi + 5 byte başlık olmak üzere 53 byte hücre boyutu olarak kabul edilmiştir.
 
6.-ATM KATMANLARI
 
ATM ‘in üzerinde kurulduğu fiziksel tabaka yapısı SONET/SDH, DS3 veya FDDI olabilir. ATM, fiziksel ortamdan bağımsızdır ancak geniş tabanlı genel taşıyıcı olarak, eş zamanlı bir iletim  yapısı olan SONET (Synchronous Optical Network) tercih edilir. SONET Bellcore tarafından üretilmiş ve ANSI (American National Standards Institue) tarafından standartlaştırılmıştır. SONET, fiber kablo üzerinde yüksek hızda dijital sinyal iletimini sağlamak için tasarlanmıştır. Verileri 51.84 Mbps hızda taşımak için standart çoklama biçimini kullanır. Ayrıca optik sinyal standardını, farklı kaynaklardan karşılıklı bağlantı için kullanır. Geniş işlem yapma, yönetim ve bakım özelllikleri vardır. Esnek yapısıyla, gelecekte varolacak yeni teknolojilere ayak uydurabilir.
   Fiziksel tabakanın üzerinde ise ATM ve AAL (ATM Adaptation Layer) olmak üzere iki tabaka bulunur. AAL, ATM ile diğer katmanlar arasında arayüz görevini yürütür. AAL, CS (Convergence Sublayer) ve SAR (Segmentation and Reassembly Sublayer) den oluşur. SAR farklı uzunluk ve formattaki PDU (Protocol Data Unit) ‘ları (yani iletilecek veri paketlerini) 48 okteklik (sekizlik) parçalara ayırır. CS’nin fonksiyonları AAL tarafından işlenen trafiğin tipine göre değişir.
   Gönderici taraftaki ATM tabakasında, SAR’dan gelen 48 sekizlik bilgiye 5 byte’lık hücre başlığını ekler. Ağ içindeki anahtarlardaki ATM tabakaları VPI ve VCI bilgilerini kullanarak yönlendirme işlemlerini gerçekleştirir. Alıcıdaki ATM tabakası 5 byte’lık başlık bilgisini çıkarır ve AAL’ e iletir.
 
6.1- AAL  Katmanı Tarafından Desteklenen Trafik Sınıfları
 
ATM AAL katmanı, değişik trafik tiplerini desteklemek için 5 tane değişik trafik sınıfına sahiptir. Her trafik tipi için kaynak ve varış noktaları arasında herhangi bir zaman ilişkisi olmasının gerekip gerekmediği, bit hızının karakteristiği ve bağlantı uyumlu olup olmadığı, trafik tipleri için birbirinden farklıdır.
 
6.2 -AAL Tipleri
 
AAL, trafik tiplerini desteklemek amacıyla AAL farklı protokolllere sahiptir.
 
6.2.1-AAL-1
 
A Sınıf trafiği destekler ve PDU yapısı 48 sekizlikten oluşur. Payload(Kullanıcı Verisi), 46 veya 47 sekizlik olabilmektedir. SNP (Sequence Number Protection), SN üzerinde hata kontrolü yapar. SNP sahası, ancak 1 bitlik hataları düzeltebilmektedir. Payload ise CSI (Convergence Sublayer Indication) , işaretci sahanın kullanıp kullanılmayacağını gösterir. CSI’nın sıfır olması işaretçinin kullanılmadığını ve kullanıcı verisinin 47 sekizlik olduğunu gösterir. İşaretçi, verilerin hücre içinde yerleşimini tutmaktadır.
 
6.2.2- AAL –2
 
Sınıf-B trafiğini destekleyen protokoldür. Başlık kısmında SN (Sequence Number) ve IT (Information Type) bulunur. IT sahası, BOM (Beginning Of Message), COM (Continuation of Message) ve EOM (End Of Message) sahalarından oluşur. Kuyruk kısmında, LI (Length Indicator) sahası Payload sahasındaki sekizlik sayısını tutar, CRC’de hata kontrolünde kullanılır.
 
6.2.3 - AAL-3/4
 
İlk olarak, bağlantı uyumlu VBR trafiğini destekleyen AAL-3 ve bağlantısız VBR trafiği için AAL-4 protokolleri tanımlandı. Sonra bu iki tip birleştirilerek, AAL-3/4 protokolü tanımlandı.
SN, IT, LI ve CRC sahaları AAL-2 protokolünde kullanılan yapıyla aynıdır, ama AAL-3/4 ‘te bu sahaların uzunlukları bellidir. MID (Message IDentification) sahası, belli bir bağlantıdan gelen trafiğin birleştirilmesinde kullanılır.
 
6.2.4- AAL-5
Forum tarafından yüksek hızda, bağlantı uyumlu servis kullanıcılarına hizmet veren, az overhead’e sahip, hata bulma oranı yüksek olan protokoldur. Frame Relay trafiğinde uygundur.
6.2.5-AAL-6
 
ATM-Forum tarafından ortaya çıkarılan, MPEG kodlu video için tanımlanacaktır.
 
                  
 
Şekil-2 : B-ISDN protokol katmanları ve üstlendikleri görevler görünmektedir.
 
 
7.-ATM’DE BAĞLANTI YAPISI
 
ATM’de mantıksal bağlantılar, sanal kanal bağlantıları (VCC-Virtual Channel Connection) olarak adlandırılır. VCC, B-ISDN ‘in en temel birimidir. Bir VCC , iki son kullanıcı arasında ağ aracılığıyla kurulur. Değişken oranlarda (variable rate), sabit boyutlu hücreler full-duplex (çift yönlü) akışla bağlantı üzerinden taşınır. VCC ‘ler aynı zamanda kullanıcı-network exchange (kontrol sinyalleme) ve network-network exchange (network yönetimi ve yönlendirme ) için kullanılır. Şekil-3’te sanal bir ATM bağlantısının kesiti gorulmektedir
 
 
 
 

Şekil-3

   Sanal yol (VP-Virtual Path) kavramı, yüksek hızlı ağlarda kontrol harcama-larının yüzdesinin bütün network harcamaları içinde yüksek yüzdelere artması sonucu geliştirilmiştir. Sanal yol tekniği, network içinde ortak yolları paylaşan bağlantıları gruplayarak (VPC-Virtual Path Connection) kontrol masraflarını azaltmaya yarar. Network yönetim işlemleri bundan sonra çok sayıdaki bireysel kanallar yerine az sayıdaki bağlantı gruplarına uygulanabilir.
   VPC ’lerin kulanımından doğan avantajlar :
Þ  Basitleştirilmiş network mimarisi (Ağ ortamındaki fonksiyonların VPC ve VCC kavramlarına göre sınıflandırılmalarından dolayı işlemler daha basitleşir),
Þ  Artırılmış network performansı ve güvenilirlik (Ağ daha az iletişim birimiyle uğraşır),
Þ  Azaltılmış işlem ve kısa bağlantı kurulma zamanı (Bağlantı işlemlerinin büyük kısmı VPC ilk kez oluşturulurken yapılır. Var olan bir VPC’ye VCC’ler eklemek çok az bir işlem gerektirir),
Þ  Geliştirilmiş ağ servisleri. [2]
 
ATM'de veri bağlantıları VCI ve VPI ile tanımlandıktan sonra, verilen herhangi bir yöne giden sanal yollar çoklanarak fiziksel hatta verilir. Sanal kanal bağlantıları son kullanıcılar arasında anlamlıdır. Fakat bu bağlantı tanımlayıcıları, hücreler ATM ağı içinde ilerlerken değişebilir. Bu yüzden belli bir VCI değerinin kullanıcı açısından bir önemi yoktur. Sorumluluk ATM ağındadır.
            VC ve VP ile oluşan bağlantı yapısı şöyledir: İki kullanıcı için kontrol işlemi tek tek bütün sanal kanallar yerine sadece VP bazında yapılabilir. Yani, bütün kanallar yerine sadece bir yol (path) incelenir.
   İki nokta arasında sonuçta oluşan bağlantının tümü Şekil-4 ‘te ifade edimiştir.
 

Şekil-4

 
8.-ATM ANAHTARLAMA
 
            ATM anahtarlamasındaki temel fikir mantıksal bir kanaldan anahtara giren bilginin yol üzerindeki bir sonraki noktaya iletilmesi için başka bir ATM kanalına yönlendirilmesidir. Genelde bir anahtardan çıkan çok sayıda mantıksal ATM kanalı olmasından dolayı, yönlendirmeden önce ilgili çıkış kanalı seçilmelidir. Bu seçim, giriş portunun numarasına ve hücrenin VPI, VCI değerlerine bağlı olarak yapılır.
 
8.1 -ATM Anahtarları
 
Anahtara ulaşan her hücrenin giriş port numarasına,VPI ve VCI değerlerine bakılır. Ardından, bu değerlerden yararlanılarak yönlendirme tablosundan hücrenin çıkış portu ve yeni VPI, VCI değerleri bulunur. Yeni bulunan VPI ve VCI değerleri; hücre, anahtardan çıkmadan önce başlıktaki eski değerlerin yerlerine yerleştirilir. Sonunda da hücre, tablodan bulunan çıkış portuna yönlendirilir.
   Bir anahtara genelde birden çok porttan hücre girdiğinden, bu hücrelerin çıkış portlarının çakışması olasıdır. Böyle bir durumda ilgili çıkış portu boşalıncaya kadar kimi hücreler geçici olarak bir tampon alanda saklanmak zorundadırlar. Bu hücreleri sıraya sokma işlemi kuyruklama olarak adlandırılır.
   ATM anahtarları, sanal yol (VP) ve sanal kanal (VC) anahtarları olmak üzere kendi aralarında ikiye ayrılırlar. Sanal yol anahtarları  yönlendirme sırasında sadece başlıktaki VPI değerini yenilerler. Halbuki sanal kanal anahtarları başlıktaki hem VPI hem de VCI degerlerini yenilerler.
   Anahtarlar için böyle bir ayrıma gidilmesinin nedeni ağ içindeki ara noktalarda yapılan işi azaltarak anahtarlamayı hızlandırmaktır. Ara noktalarda  sanal yollar değişmekte ancak bunların içerdiği kanallar aynı kalmaktadır. Böyle durumlarda sadece VPI değerlerini inceleyen bir anahtar kullanmak daha etkin bir yoldur.
 
Şekil-5 ’te sanal yol ve sanal kanal anahtarlarına örnek görülmektedir.
Şekil-5
Sonuç olarak bir ATM anahtarının temel görevleri aşağıdaki üç maddede toplanabilir:
1.    Hücreleri yönlendirmek (routing),
2.    Gerektiğinde hücreleri kuyruklamak (queing),
3.      Gelen hücrelerin başlıklarındaki VPI ve VCI değerlerini yönlendirme tablosundaki karşılıkları ile değiştirmek.
 
8.2-ATM Anahtarlarının Performansını Etkileyen Faktörler
 
Bağlantı Bloklama (Connection Blocking)
Bağlantı bloklama özelliği, anahtardaki bağlantı sayısının ve yükün çok fazla olmasından dolayı giriş portundan gelen bilgilerin bir çıkış portuna yönlendirilememesi durumunda bağlantının reddedilmesi anlamına gelir.
 
Hücre Kayıpları (Cell Loss)
Eğer anahtar içindeki kuyruklara hücreler çok hızlı ve çok sayıda gelirse, kuyruklarda taşma olacak ve bu da bazı hücrelerin kaybolmasına neden olacaktır. ATM anahtarları tasarımcıları, hücre kaybolma olasılığını 10-8 ile 10-11 arasında tutmaya çalışmaktadır.
 
Hücre Eklenmeleri (Cell Insertion)
ATM anahtarı içinde bazı hücreler yanlış yönlendirme sonucunda, başka bir mantıksal bağlantıya gidebilirler. Böylece bazı çıkış portlarında gereksiz hücre birikmesi olabilir. Bu tip bir olayın olması olasılığı da 10-11 ile 10-14 arasın tutulmaya çalışılmaktadır.
 
Anahtarlama Gecikmesi (Switching Delay)
Hücrelerin anahtar içinden geçerken mümkün olduğunca hızlı geçmesi gerekmektedir. Aksi halde, gecikme duyarlı gerçek zamanlı verilerin iletiminde sorunlarla karşılaşılacaktır. Bu gecikmeler, 10 ve 1000 ms arasında değerler alabilmektedir. Bu değerler birtakım olasılıklarla birlikte de verilebilmektedir. Örneğin, 10-10 değerinde 100 ms gecikme sözü, “anahtardaki gecikmenin 100 ms’den fazla olması olasılığı 10-10 dan azdır” anlamına gelmektedir.
 
9.-ATM TOPOLOJİSİ
 
ATM, yapı ve geliştirme bakımından esnek bir topolojiye sahiptir. Bunun yanında varolan ağ topolojilerine uygulanabilir ve etkin bir yapı oluşturulabilir. ATM’in topoloji yapısında iki türlü arabirimden sözedilir. Bunlardan birincisi Public UNI (Public User-to-Network Interface - Genel kullanıcı-ağ arayüzü), bir diğeri ise Private UNI (özel UNI) olarak adlandırılmaktadır.
Şekil-6 ’te ATM ağ topolojisinin genel olarak yapı mantığı verilmiştir
 
NETWORK
 
B-TE1-2: Broadband Terminal Equipment
B-NT1-2: Broadband Network Termination
B-TA     : Broadband Terminal Adapter
CPE       : Customer Premises Equipment
 
ATM
network
 
B-L/ET
 
B-NTI
 
B-NT2
 
B-TA
 
B-TE1/
B-TE2
 
ATM
endpoint
 
ATM
endpoint
 
 TA
 
private ATM
switch
 
private
UNI
 
public
UNI
 
public ATM
switch
 
CPE
 
R
 
SB
 
TB
 
UB
 
NETWORK
 

 
 
Şekil-6
 
Şekil-7’de ATM’in topoloji yapısı temel alınarak oluşturulmuş örnek bir Yerel Bilgisayar Ağı (LAN) görülmektedir:
 
 
Şekil-7
 
9.1-ATM Yerel Bilgisayar Ağları (ATM LANs) ve ATM LAN
Emulasyonu
 
   ATM gelecekteki genişbant çoklu-ortam servislerinin destekleyecek bir teknolojidir. Bununla beraber, iletişimde IEEE 802 tabanlı yerel ağlar ve bu ağlar üzerinde kullanılan uygulamalar günümüzde oldukça yaygındır. Bu yüzden ATM’in ilk aşamada bir LAN teknolojisi olarak IEEE 802 ağlarıyla uyumlu olması gerekir. Bu uyumun sağlanması için ATM, veri bağlantı katmanı gibi düşünülerek, varolan ağ katmanları, bu yeni bağlantı katmanını destekleyecek şekilde geliştirilmektedir. Böylelikle ATM üzerinde IP ve benzeri diğer protokoller çalışabilmektedir.
   Varolan LAN uygulamalarının ATM ağlarında desteklenebilmesi için bir başka çözüm ATM LAN Emulasyonudur. LAN Emulasyonu, bağlantı uyumlu ATM ağları üzerinde bağlantısız IEEE 802 ağları servislerinin nasıl gerçekleştirilebileceği üzerinde durur. Diğer bir deyişle, noktadan noktaya bağlantı sağlayan ATM anahtarının sanal paylaşılmış iletim ortamı görüntüsünü vermesini sağlamaktır. LAN Emulasyonu, ATM uç sistemleri ve ATM-LAN köprülerinde ağ katmanının altında gerçekleşir.
 
 9.1.1-LAN Emulasyonu Mimarisi
 
LAN emulasyon servisi aşağıdaki birimlerden oluşmuştur:
LAN Emulasyon istemcisi (LAN Emulation Client - LEC)
Bu birim, LAN ile ATM ağı arasındaki köprüdür. Kendilerine bağlı olan LAN’lardan gelen mesajları kabul eder. Eğer mesaj “broadcast” veya “multicast” ise mesajı “BUS” adı verilen ve aşağıda açıklanan birime gönderir.
BUS (Broadcast and Unknown Server)
Bu birim ATM ağına bağlı tüm LEC’ler ile bağlantılıdır. BUS, “broadcast” bir mesaj aldığında, bu mesajı bağlı olduğu tüm LEC’lere gönderir. LEC’ler ise mesajı kendilerine bağlı LAN’lardaki ilgili adreslere ulaştırır. “Multicast” mesajlar ise, BUS tarafından sadece belli bir grup LEC’e yollanır.
LAN Emulasyon Sunucusu (LAN Emulation Server - LES)
 
 
 
            LES’in amacı, LE-ARP (LAN Emulation Address Resolution Protocol) desteklemektir.    LE-ARP protokolü, bir LEC’in gelen bir MAC (Media Access Control) adresinin içeren başka bir LEC’in ATM adresini bulmasını sağlamaktadır. Bir LEC, bilinmeyen bir çerçeveye (karşılık gelen ATM adresi bilinmeyen bir MAC adresi) rastlandığında LES’e LE-ARP sorgusu gönderir. LES de, bu sorguyu diğer LEC’lere gönderir. Bu sorguyu alan tüm Lec’ler belirtilen MAC adresinin kendilerinde olup olmadığının kontrol eder, eğer kendisinde ise kendi ATM adresini de belirterek, LES’e cevap gönderir. LES de ilgili LEC’e haber vererek adres çözümleme işini bitirir.
 
 
10.-ATM 'İN DEZAVANTAJLARI
 
ATM pahalı  bir teknolojidir. ATM anahtarların liste fiyatları temel konfigürasyon için 9000$ 'dan başlayarak tam kurulu bir sistemde 350.000$ 'a kadar çıkan bir çeşitlilik göstermektedir. Fakat yakın bir zamanda bu teknolojinin ucuzlaması ve yaygınlaşması beklenmektedir .
ATM, yeni bir teknoloji olduğundan henüz gerekli donanım ve yazılım desteği yeterli değildir. Bunda en önemli etken standartların oluşmamasıdır. Özellikle yazılım konusunda büyük eksiklikler bulunmaktadır. "ATM teknolojisi henüz olgunlaşma evresindedir. Endüstri uzmanları, olgunlaşması  için iki ya da üç yıllık bir süre olduğunu tahmin etmektedir. " [6]
  ATM anahtarları, router(Yönlendirici) tarafından verilmekte olan hizmet sınıflarının pek çoğunu kendi yapısı içinde kullanıcılara sunmaktadır. Fakat  henüz standartların oluşmaması yüzünden aşağıda sıralanan, router 'ın yapabildiği fonksiyonları anahtarlar henüz yapamamaktadır .
1. Güvenli WAN Erişimi: Yönlendiriciler diğer ağlara bağlanma konusunda şimdilik tek güvenilir cihazlar olarak kabul edilmektedir.
2. Güvenlik Duvarları(Firewall): Yönlendiriciler network'ün belirli alanları dışında kullanıcı erişimini sınırlama özelliğine sahiptir. Bu, ortaya çıkan bir sorunun ağın başka bir bölümüne intikal etmesini engellemektedir.
3. Çoklu Protokol Desteği: Yönlendiriciler, tipik bir heterojen network'lerde bulunan bütün protokolleri ( IP, IPX, SNA ve Apple Talk gibi) çalıştırabilmektedir.
 
11.-ATM 'İN AVANTAJLARI
 
1.   ATM hızla gelişen bir teknolojidir. ITU-T ve ATM Forum, standartlaşma çalışmalarında bulunmaktadır . Gelecekte belirecek talepler şimdiden birçok  büyük firmanın bu konuda araştırmalara başlamasına yol açmaktadır. Büyük firmalar bu konuda iş yapan küçük firmaları kendi bünyelerine katarak bu konuda çalışmalarını hızlandırmaktadır. Bay Networks, Cisco  ve 3Com  gibi büyük Network Firmaları bu pastadan daha büyük bir pay kapabilmek için savaşmaktadır. [6]
 
2.   ATM ile verileri çok büyük hızlarda taşımamız mümkündür. Hızı artırıcı amaçlı olarak hata  kontrolü minimum düzeyde tutulur. Bu durumda, hata kontrolü kullanıcının sorumluluğuna bırakılmaktadır.
 
3.   Video, ses, TV, text gibi türlü veri tiplerinin hepsini  destekleyen ve bütün ağların  bir ortamda entegrasyonu için taban sağlayacak BISDN için ITU-T tarafından switching (anahtarlama) modeli olarak ATM seçilmiştir.
 
4.   ATM, fiziksel (taşıma) ortamından bağımsızdır. Kablolar koaksiyel kablo olabileceği gibi fiber de olabilmektedi. Fiziksel katman olarak SONET tavsiye edilmektedir.
 
5.   ATM var olan sistemlerle uyumludur. Bu, onun her tür ağ ortamıyla sorun olmadan konuşabilmesini sağlamaktadır.
 
6.   ATM, veri iletiminde esnektir. Değişken bit hızlarını destekler  niteliktedir.Kullanıcı isteğine göre iletişim hızı belirlenir. "Hatta bazı anahtarlar, kullanıcılara ait bant genişliği de sunabilirler".  [6]
      ATM ağında hata oranı ve gecikme değeri bildirilerek belli bir kalitede hizmet alınabilir. Bu bilgiler, ağa bağlanıldığında kullanıcı tarafından ağ ortamına bildirilir. İstenilen şey hız ise hata oranı göz önüne alınmayabilir, hata oranı önemliyse o zaman hızdan ödün vermek gerekecektir .
 
7.   ATM, sabit boyutlarda ve küçük hücreleri anahtarladığından ağ kaynaklarını optimum kullanabilir. "Devre anahtarlamadaki gibi devre bütün bağlantı için kapatılmaz. Paket anahtarlama tekniği kullanılarak sadece bilgi transfer edilirken devre kullanılır" [1]. Diğer taraftan anahtarlar, yalnızca iletişimin gerekli olduğu düğümler (nodes) arasında kurduğu bağlantılarla, ağ bant genişliğinin etkin kullanımını sağlamaktadır. [6]
 
8. ATM ağ yapısı büyümeye elverişlidir.
 
 
 
9.  ATM onu yorumlayan firmaya göre bazı değişiklikler taşıyabilir. Belirli şartları sağladıkları sürece değişik ATM -lan'lar birbirleriyle iletişim yapabilirler.
 
10. ATM istatistiki çoklama tekniğini kullanarak çok kullanıcının veri trafiğini tek bir ağ üzerinde birleştirir. Bunu da en etkin şekilde yapar.
 
11. ATM anahtarlama, yönlendiricilere göre daha kolay anlaşılır, uygulaması kolay ve daha ekonomik bir çözümdür. Yönlendiricilerin mevcut yazılımlarının düzeyi, karmaşılığı, mimarisi ve fiyatı anahtarlar karşısında devre dışı kalmalarına yol açmaktadır. [6]
 
12. ATM anahtarları , mevcut ağ ekipmanı üzerinde hiç değişiklik yapmadan ya da çok küçük bazı değişiklikler yaparak ağa eklenebilir.
 
 
12.-SONUÇ
 
B-ISDN teknolojisinin, varolan iletişim ihtiyaçlarının karşılanması ve gelecekte varolabilecek ihtiyaçların karşılanmasına yönelik  esnekliği düşünüldüğünde geleceğin iletişim teknolojisi olacağı açıktır. Ancak, bu yapıyı olanaklı kılan ATM altyapısındaki maliyet ve tam standartlaşamama gibi dezavantajlardan dolayı henüz bu teknolojiye tam olarak bir geçiş sağlanamamıştır.
 
 
 
 
 

13.     KAYNAKÇA

 
 
[1] DE PRYCKER, MARTIN ;“Asynchronous Transfer Mode, Solution For Broadband ISDN”, Ellis Harwood, 1993
[2] STALLINGS, William ;“Networking Standards A Guide to OSI, ISDN, LAN and MAN Standards”
[3] ERDUR, Cenk ; “İleri Bilgisayar Ağları ATM Semineri Raporu” , 20.5.96
[4] ATEŞ, Ahmet Feyzi  ; “B-ISDN, ATM ve Diğer Gelişen Teknolojiler “,  27.5.96
[5] ÇIMENSEL, Ahmet  ; “ATM Networks Semineri (Bölüm1)” , 13.5.96
[6] STEPHEN, P. Klett Jr. ; ComputerWorld Dergisi Sayı 298 , Sayfa 43-48 , 1995
[7] GAGE, Beth  ; ComputerWorld Dergisi Sayı 305 , Sayfa 27-37 , 1995
[8] Çeşitli Internet Kaynakları  (Başlangıç Noktası -“http://www.yahoo.com”)
[9] EBRAHIM, Zahir ; “A Brief Tutorial on ATM“
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

14.-EK-Mini Sözlük

   * AAL: ATM Adaptation Layer
   * ANSA: Advanced Networked Systems Architecture
   * ASIC: Application Specific Integrated Circuit
   * ATM: Asynchronous Transfer Mode
   * AUU: ATM User User indication, "the bit", end of AAL5 block marker
   * AVA: ATM Video Adaptor
   * B-ISDN: Broadband Integrated Services Digital Network
   * CAC: Connection Admission Control
   * CBR: Constant Bit Rate
   * CCITT: Comitée Consultatif International Télégraphique et Téléphonique
     (now the ITU-TS)
   * CLP: Cell Loss Priority (a bit in a B-ISDN cell header)
   * CRC: Cyclical Redundancy Check
   * DAN: Desk Area Network
   * E1: 2 Mbit/sec
   * E2: 8 Mbit/sec
   * E3: 34 Mbit/sec
   * EATM: EISA ATM (an adaptor)
   * EDL: Ethernet Data Link
   * FDDI: Fiber Distributed Data Interface
   * FAS: Framing and Sequencing
   * FIFO: First In First Out
   * GFC: Generic Flow Control (a 4 bit field in a B-ISDN cell header)
   * H.261: A constant bit rate video compression standard.
   * HEC: Header Error Check (an 8 bit CRC in a B-ISDN cell)
   * IOC: Input Output Controller
   * IP: Internet Protocol
   * ISDN: Integrated Services Digital Network
   * ISO: International Standards Organisation
   * ITU: International Telecommunication Union
   * LAN: Local Area Network
   * MAC: Media Access Control
   * MAN: Metropolitan Area Network
   * MPEG: Motion Picture Experts Group (a video compression standard)
   * NOSSDAV: Network and Operating System Support for Digital Audio and
     Video ("nose dive")
   * NNI: Network Network Interface
   * OC3: 155 Mbit/sec
   * OC12: 622 Mbit/sec
   * OSI: Open Systems Interconnection
   * PDU: Protocol Data Unit (a packet)
   * PLT: Payload Type (a 3 bit field in a B-ISDN cell header)
   * PTM: Packet Transfer Mode
   * Q.93B: The Standard (i.e. awful) ATM signalling protocol
   * QOS: Quality of Service
   * SAR: Segmentation and Reassembly
   * SDH: Synchronous Digital Hierarchy
   * SDU: Service Data Unit (a packet)
   * SOC: Start of Cell
   * SONET: Synchronous Optical Network
   * SPROING:To Break
   * STM: Synchronous Transfer Mode
   * STS1: 155 Mbit/sec
   * STS4: 622 Mbit/sec
   * T1: 1.5 Mbit/sec
   * T3: 45 Mbit/sec
   * TDM: Time Division Multiplexing
   * UNI: User Network Interface
   * VC: Virtual Channel or Virtual Circuit
   * VCI: Virtual Circuit Identifier (also Virtual Channel Identifier)
   * VP: Virtual Path
   * VPI: Virtual Path Identifier
   * WAN: Wide Area Network
 
 
 
 

 

 

 

 
 
GİRİŞ
CGI Nedir?
CGI'nin uzun hali "Common Gateway Interface"dir. Türkçesi "Web Server'a Ortak Çıkış Kapısı" dir. Server'ın veritabanlarına, dökümanlara ve diğer programlara bilgi gönderebileceği (veya alabileceği), ve bu bilgiyi web üzerinden kullanıcılara sunabileceği bir metoddur. Kısaca web için programlama diyebiliriz yani. CGI programları değişik dillerde yazılabilir. Ama en popüleri Perl'dür ve Perl'ü anlatacağız.
Neden CGI bilmeliyiz?
Bir web sayfası hazırlıyorsanız, sayfanızın kaç kişi tarafından ziyaret edildiğini bilmek, ya da sayfanızda ziyaretçilerin düşüncelerini mail adresinize gönderebileceği bir form olmasını istersiniz. Bugün profesyonelce hazırlanan web sayfaları form gönderme ve sayaç gibi basit scriptlerden tutun da karmaşık veritabanı scriptlerine varana kadar birçok değişik scriptle desteklenmektedir. Kısacası günümüzde CGI bilmek bir ayrıcalıktır.
Başlangıç için neler gerekli?
Her ne kadar UNIX sistemi üzerinde Perl ile CGI programlamayı anlatacak olsak da başlangıç için UNIX bilgisine sahip olmanız gerekmiyor. Çünkü zaten bilmeniz gereken kısmı burada size anlatılacak. UNIX bilgisi gerekli değil dedik ama, tabi ki bir UNIX accountunuzun olması gerekiyor. Eğer yoksa size http://www.virtualave.net'de bir account açtırmanızı tavsiye ederim. Aslında tam olarak bir UNIX accountu vermiyorlar ama CGI scriptlerinizi çalıştırabileceğiniz bir cgi-bin dizininiz oluyor. Buraya FTP ile bağlanıp scriptlerinizi gönderebilirsiniz. Bu konuda daha ayrıntılı bilgi edinmek için web sitesini ziyaret ediniz.
Eğer UNIX değil de Windows NT kullanıyorsanız yine de buradaki programların çoğunu çalıştırabilir ve Perl öğrenebilirsiniz. Çoğu NT makinesi UNIX makinesinin çalıştırdığı kodları çalıştırabilir. Ama örneklerimizden bazıları UNIX'e özel yazıldığı için makinenizde çalışmayacaktır. Daha fazla bilgi için perl.com'un Perl Resources For Windows (Windows İçin Perl Kaynakları) listesini gözden geçirin.
Scriptlerinizi Windows kurulu bir bilgisayarda çalıştırmak için http://www.activestate.com/ActivePerl/download.htm adresinden ActivePerl'ü indirebilirsiniz. Eğer yazdığınız scriptleri UNIX sistemine göndermeden önce kendi bilgisayarınızda denemek istiyorsanız bu programı mutlaka indirin.
UNIX sistemine telnet ile bağlanacağımız için bir telnet programına ihtiyacınız olacak tabi. Windows'la birlikte gelen basit telnet programı da işinizi görür. Windows kullanıcısı değilseniz ya da başka bir program kullanmak istiyorsanız tavsiye edeceğim program:
Macintosh için: NCSA Telnet
Windows için: CRT

Eğer scriptlerinizi kendi bilgisayarınızda yazıp gönderecekseniz tavsiye edeceğim program:
Macintosh için: Fetch
Windows için: CuteFTP

Okuma kolaylığı açısından Perl ve HTML kodlarını sabit genişlikli bir font kullanarak yazacağım. Mesela:
print "Bu bir Perl kodu.\n";
Ayrıca UNIX komut satırında yazmanız gereken komutları anlatırken <Dosya Adı> gibi < ve > karakterleri arasında yazacağım kısımları kendinize uygun şekilde değiştirmeniz gerekecek. Örneğin chmod 755 <dosya adı> dediğim zaman yapmanız gereken dosyanızın adı sayac.cgi ise komut satırında chmod 755 sayac.cgi yazmak.
Sanırım bu kadar hazırlık yeterli. Şimdi ilk bölüme geçebiliriz.

Bölüm 1: Başlangıç

Programlama dili olarak Perl'ü seçtik, çünkü basit bir dil, kolay öğreniliyor ve karmaşık problemleri halledebilecek kadar da güçlü. Ayrıca hem ücretsiz hem de bulunması çok kolay. Zaten çok büyük bir ihtimalle UNIX server'ınızda ya da NT makinenizde kuruludur. Yine de download etmeniz gerekiyorsa www.perl.com'u ziyaret ediniz. Perl ile yazdığınız scriptleri derlemenize gerek yoktur. Scriplerinizi yazar ve çalıştırırsınız (Daha doğrusu web server'ınız çalıştırır). Script kendi başına sadece text kodudur. Aslında bütün işi web server'ınızda kurulu olan Perl yorumlayıcısı yapar. Bunun size sağladığı avantaj yazdığınız scriptleri ya hiçbir değişiklik yapmadan ya da çok küçük bir iki değişiklikle istediğiniz servera kopyalayabilecek olmanız. Dezavantajı ise scripti çalıştırmadan hatalı olup olmadığını anlayamamanız.
Perl scriptlerinizi kendi bilgisayarınızda istediğiniz text editörü ile (Notepad, SimpleText vb.) ya da UNIX'te yazabilirsiniz. UNIX kullanıyorsanız pico'yu deneyin. Basit ve kullanımı kolay bir text editörü. UNIX komut satırında pico <dosya adı> yazarak yeni bir dosya ya da varolan bir dosyayı açabilirsiniz. Pico ile ilgili daha fazla bilgi almak için man pico yazınız.
Scriptlerinizi kendi makinenizde yazıp FTP ile gönderecekseniz dikkat etmeniz gereken husus binary değil ASCII olarak göndermek. CuteFTP kullanıyorsanız sorun yok. Ama WS FTP programı Perl dosyaları için genelde ASCII değil binary kullanıyor.
Scriptlerinizi server'ınızda CGI scriptlerini çalıştırabileceğiniz dizine (public_html ya da /home/httpd/cgi-bin olabilir) upload etmelisiniz. Başka bir dizine upload etmişseniz daha sonra da taşıma işlemini yapabilirsiniz. UNIX'te taşıma işlemini şu komutla yapabilirsiniz:
mv <taşınacak dosya> <taşınacağı dizin>       (Daha fazla bilgi için man mv)
Scriptinizi gerekli dizine taşıdıktan sonra bu dosyayı "çalıştırılabilir" hale getirmeniz gerekir. Bunun için kullanmanız gereken komut:
chmod 755 <dosya adı>
Bu komut dosyanın sizin tarafınızdan okunabilir, yazılabilir ve çalıştırılabilir, diğer bütün kullanıcılar tarafından da okunabilir ve çalıştırılabilir hale getirilmesini sağlar.
Aynı işi çoğu FTP programı ile yapabilirsiniz. Fakat dikkat etmeniz gereken kısım bütün kullanıcılara okuma ve çalıştırma hakkı vermek ve tabi ki sadece kendinize yazma hakkı vermek.
UNIX ve Perl'de büyük küçük harf ayrımı vardır. Yani UNIX'te "perl" ile "PERL" aynı şey değildir.
Perl Scriptinin Temelleri
Bir HTML dosyasının yapısında <head> ve <body> etiketlerinin mutlaka bulunması gerektiği gibi bir Perl scriptinin ilk satırında
#!/usr/bin/perl
satırının mutlaka bulunması gerekir. Bu satır server'a bu dosyanın bir Perl scripti olduğunu ve Perl'ün nerede olduğunu söyler. Bu satır sisteminizde Perl'ün nerede olduğuna bağlı olarak değişebilir. Bunu öğrenmenin en emin yolu which perl ya da whereis perl komutunu kullanmaktır. Perl sisteminizde kurulu ise Perl'ün hangi dizinde olduğu yazacaktır.
Server'a Perl'ün yerini tanıttıktan sonra Perl kodlarınızı yazabilirsiniz. Hatırlamanız gereken önemli bir konu Perl'de büyük küçük harf ayrımının olduğu. Yani Perl için "x" ile "X" aynı şeyler değildir. Ayrıca çoğu Perl kodunun sonunda noktalı virgül (;) kullanmalısınız (Bazı döngü ve özel yapılar hariç).
Şimdi birlikte ilk scriptimizi yazalım. Yeni bir dosya oluşturun ve şunları yazın. (Daha iyi aklınızda kalması açısından Kopyala - Yapıştır yöntemini kullanmamanızı tavsiye ederim.)
#!/usr/bin/perl
print "Merhaba\n;"
Bu dosyayı "ilkscript.pl" adıyla kaydedin ve UNIX komut satırında şunu yazın:
chmod 755 ilkscript.pl
Bu komut dosyanın erişim yetkilerini değiştirerek onu çalıştırılabileceğiniz hale getirir. Bunu her yeni script yazışınızda yapmanız gerekir. Fakat varolan bir dosya üzerinde değişiklik yaptığınız zaman bu komutu vermenize gerek yoktur.
Şimdi, yazdığınız scripti çalıştırmanız için vermeniz gereken komut:
./ilkscript.pl
Eğer herşey yolunda gitmişse ekranda "Merhaba" yazması gerekir.
 Olmadı mı?
Eğer scriptiniz çalışmazsa şunları kontrol edin:
1. Scriptinizi ASCII olarak upload ettiniz mi?
2. Scriptinizin ilk satırı #!/usr/bin/perl mü?
3. Perl'ün yeri gerçekten #!/usr/bin/perl mü yoksa başka bir dizinde mi? Perl'ün nerede olduğunu which perl ya da whereis perl yazarak bulabilirsiniz.
CGI Scriptinin Temelleri
CGI programları aynı zamanda birer Perl scriptidir. Fakat aralarındaki önemli bir fark CGI programlarının genelde bir web sayfası üretmesidir. Örneğin bir form gönderildikten sonra mesajın gönderildiğine dair yeni bir sayfa açılır. Eğer yazdığınız script bir HTML sayfası oluşturacaksa herhangi bir yazı yazdırmadan önce
print "Content-type:text/html\n\n";
satırını mutlaka yazmalısınız. Unutulması ihtimaline karşı en başa yazılması daha iyi olur (#!/usr/bin/perl satırından sonra tabi).
Bu satır web browser'ınıza kendisine gönderilecek bilginin bir HTML sayfası olduğunu söyler. Eğer bu satırı yazmayı unutursanız ya da bu satırdan önce başka birşey yazdırırsanız browser <Internal Server Error> (Dahili Server Hatası) verir.
Şimdi yaptığımız Perl scriptini biraz değiştirelim ve web sayfası gösteren bir CGI scriptine çevirelim.
Önce dosyanın uzantısını .cgi olarak değiştirelim. UNIX'te bunu
mv ilkscript.pl ilkcgi.cgi
komutunu vererek yapabilirsiniz. Daha sonra bu dosyanın içeriğini şu şekilde değiştirin:
#!/usr/bin/perl
print "Content-type:text/html\n\n";
print "<html><head><title>Deneme Sayfası</title></head>\n";
print "<body>\n";
print "<h2>Merhaba</h2>\n";
print "</body></html>\n";
Eğer scriptinizdeki değişiklikleri UNIX üzerinde yapmışsanız erişim yetkilerini tekrar düzenlemenize gerek yoktur. Ama kendi bilgisayarınızda yazıp upload etmişseniz chmod 755 ilkcgi.cgi komutunu verip erişim yetkilerini değiştirin ve ./ilkcgi.cgi komutu ile scriptinizi çalıştırın. Ekrana HTML kodları gelecektir. AMA eğer yazdığınız kodlarda bir hata varsa o zaman ekranda hatanın kaçıncı satırda olduğu yazar. Bu da özellikle uzun ve karmaşık scriptler yazarken olası hatayı düzeltmemizde bize oldukça kolaylık sağlar.
Şimdi de browser'ınızın adres satırına tam adresini yazarak scriptinizi çağırın. Browser'ınızda "Merhaba" yazdığını göreceksiniz.
Olmadı mı?
Scriptinizin çalışmamasının nedeni şunlar olabilir:
1. Eğer karşınıza "Merhaba" yerine Perl kodları çıkmışsa scriptin uzantısını .cgi olatak değiştirmemiş olabilirsiniz. Ya da scriptin bulunduğu dizin CGI programlarını çalıştıracak şekilde ayarlanmamıştır (CGI scriptlerinizi hangi dizinde çalıştırabileceğinizi server'ınızın yöneticisine sormalısınız).
2. Browser'ınız "Internal Server Error" hatası veriyorsa scriptinizi ./ilkcgi.cgi komutu ile çalıştırın. Ekranda hatanın nerede olduğu yazacaktır.
Yukarıdaki scripti şu şekilde yazarsak her satırda print yazmaktan kurtuluruz:
#!/usr/bin/perl
print "Content-type:text/html\n\n";
print <<HTMLSonu;
<html><head><title>Deneme Sayfası</title></head>
<body>
<h2>Merhaba</h2>
</body></html>
HTMLSonu
;
print <<HTMLSonu; satırında << ile HtmlSonu arasında boşluk olmadığına dikkat edin.
Bu sayfada Perl kodları, daha anlaşılır olması açısından satır girintileri kullanarak yazılmıştır. Perl kodlarını yazarken mutlaka ilk sütundan başlayarak yazılmalıdır. Özellikle HTMLSonu satırından önce kesinlikle boşluk bırakılmamalıdır. Eğer bırakılırsa scriptiniz çalışmaz.
HTML kodlarını bu yöntemle yazdırırsak aşağıdaki örnekte olduğu gibi print komutunu kullanırken iç içe çift tırnak (") karakteri kullanmak zorunda olduğumuz zaman çift tırnaktan önce ters bölü (\) karakteri yazmak zorunda kalmayız.
print "<a href=\"http://cc.sau.edu.tr/\">"
print komutunda iç içe tırnak karakterleri kullanmak için yukarıdaki gibi çift tırnaktan önce ters bölü karakterini yazmak zorundayız.

Bölüm 2: Perl Değişkenleri

Perl'de işe yarar programlar yazabilmek için Perl değişkenlerini tanımamız gerekir. Değişken demek, değerleri saklayacağımız yer demektir. Değişkene değer atadıktan sonra program boyunca bu değeri geri çağırabilir, kullanabilir ve değiştirebiliriz. Perl'de 3 çeşit değişken mevcuttur: Scalar, Array ve Hash değişkenler.
Scalar Değişkenler
Scalar değişkenlere tek bir değer atanır. Bu değer bir sayı, bir cümle ya da başka bir scalar değişken olabilir. Scalar değişkenlerin adlarının başında $ işareti bulunur. Örneğin $x, $y, $z, $adres, $kullanici birer scalar değişken adıdır. Scalar değişkenlere değer atama işlemi de aşağıdaki örneklerde görüldüğü gibi yapılır.
$sayi = 1;
$isim = "Sinan";
$pi = 3.141592;
Değişkenleri kullanmadan önce tanımlamanıza gerek yoktur. Ayrıca Perl değişkenleri program içinde tip de değiştirebilir. İşte bir örnek:
$sihir = 23;
$sihir = "Sihirli sayımız $sihir";
Bazı programlama dillerinin tersine Perl bu durumu kabul eder ve bir hata mesajı vermez.
Şimdi ilkscript.pl isimli scripti biraz değiştirelim ve birkaç değişken ekleyelim:
#!/usr/bin/perl
$kursadi = "CGI Programlama";
print "Merhaba. Adın ne?\n";
$siz = <STDIN>;
chomp($siz);
print "Merhaba $siz. $kursadi kursuna hoş geldiniz.\n";
Scripti kaydedin ve UNIX'te çalıştırın. Program size isminizi soracak ve birşeyler yazıp enter'a basmanızı bekleyecektir. Bu işlem
$siz = <STDIN>;
satırı dolayısıyla gerçekleşir. Yazdığınız yazı $siz değişkenine atanır. Yazdığınız yazının sonundaki enter tuşunu simgeleyen "Carriage Return" karakteri aşağıdaki komut satırı ile silinir.
chomp($siz);
Aşağıdaki satır işletildiğinde değişkenlerin yerine atandığı değerler ekranınızda görünür. En sondaki \n Per'de "Carriage Return" işaretini temsil eder. Yani programa, yazıyı yazdıktan sonra enter'a basmasını söyler.
print "Merhaba $siz. $kursadi kursuna hoş geldiniz.\n";
Array Değişkenler
Array'ın Türkçe karşılığı "Dizi"dir. Array değişkenler için değerler listesi diyebiliriz. Scalar değişkenler tek bir değer içermesine karşın array değişkenler birden fazla değer içerirler. Array değişken adlarının başında at işareti (@) bulunur. İşte bir örnek:
@renkler = ("sari","kirmizi","yesil");
Perl'de dizi indisleri 0'dan başlar. Yani @renkler dizisinin ilk elemanını $renkler[0] verir. @renkler dizisinin tek bir elemanının değerini göstereceği zaman @ işareti yerine $ işareti kullanılır. $ işareti tek bir değeri, @ işareti ise bütün diziyi kastettiğimiz anlamına gelir.
Bir dizinin tüm elemanları şu şekilde yazdırılabilir:
#!/usr/bin/perl
# bu bir açıklamadır.
# diyez (#) işareti ile başlayan bütün satırlar açıklamadır.
@renkler = ("sari","kirmizi","yesil");
print "$renkler[0]\n";
print "$renkler[1]\n";
print "$renkler[2]\n";
Fakat elbette ki bunu yapmanın daha kolay bir yolu var. foreach yapısı kullanılarak dizileri rahatlıkla yazdırabiliriz.
#!/usr/bin/perl
# bu bir açıklamadır.
# diyez (#) işareti ile başlayan bütün satırlar açıklamadır.
@renkler = ("sari","kirmizi","yesil");
foreach $i (@renkler) {
print "$i\n";
}
foreach döngüsünün her tekrarlanışında $i değişkenine @renkler dizisinin bir elemanı atanır. İlk tekrarda $i değişkeninin değeri "sari", ikinci tekrarda "kirmizi" ve üçüncü tekrarda "yesil" olur. { ve } parantezleri döngünün başlangıç ve sonunu belirtir. Yani bu parantezler arasında kalan komutlar $i değişkeninin bütün değerleri için tekrarlanır.

Dizi Fonksiyonları

Perl'de dizilere değer atamayı ve dizilerden değer okumayı kolaylaştıran fonksiyonlar mevcuttur.
@renkler = ("sari","kirmizi","yesil","mavi","turuncu","bordo");
$ilkrenk = pop(@renkler);
# $ilkrenk değişkenine @renkler dizisinin ilk değeri olan "sari" atanır.
$sonrenk = shift(@renkler);
# $sonrenk değişkenine @renkler dizisinin son değeri olan "bordo" atanır.
Bir diziye değer eklemek için push fonksiyonu kullanılır:
push(@renkler,"gri");
# @renkler dizisinin sonuna "gri" ilave edilir.
@yenirenkler = ("lacivert","pembe");
push(@renkler,@yenirenkler);
# @yenirenkler dizisindeki değerler @renkler dizisinin sonuna ilave edilir.
Dizilerle ilgili işe yarayabilecek birkaç fonksiyon daha:
sort(@renkler);
# @renkler dizisinin elemanlarını alfabetik sıraya koyar.
reverse(@renkler);
# @renkler dizindeki elemanların diziliş sırasını ters çevirir.
@join(", ",@renkler);
# @renkler dizisini elemanların arasında ", " olacak şekilde birleştirir.
$uzunluk = $#renkler;
# $uzunluk değişkenine @renkler dizisinin uzunluğu atanır.
Hash Değişkenler
Hash değişkenleri Array değişkenlerin özel bir hali olarak düşünebiliriz. Hash değişken adlarının başında yüzde işareti (%) bulunur. Hash değişkenler öğe çiftlerinden oluşur: Anahtar ve Değer. Aşağıdaki örneği inceledikten sonra daha rahat anlayacağınızı tahmin ediyorum:
Değişken       
Anahtar    
Değer     
%sayfalar = (
"sinan",
"http://www.sinanilyas.cjb.net",
 
"koray",
"http://cc.sau.edu.tr/~ktoksoz",
 
"baris",
"http://turk.eu.org/uruzgar");
Aynı Hash şu şekilde de tanımlanabilir:
%sayfalar = (
"sinan" => 
"http://www.sinanilyas.cjb.net",
 
"koray" => 
"http://cc.sau.edu.tr/~ktoksoz",
 
"baris" => 
"http://turk.eu.org/uruzgar");
%sayfalar değişkeninde anahtar olarak kişinin ismini, değer olarak da web sayfasının adresi saklanır. Tıpkı Array'de olduğu gibi, bir Hash değişkenden tek bir değer okunacağı zaman $ işareti kullanılır.
print "$sayfalar{'baris'}\n";
Yukarıdaki satır Barış'ın web sayfasının adresini yazdırır. Eğer değişkendeki bütün değerleri yazdırmak istiyorsanız bir foreach döngüsü kullanabilirsiniz:
foreach $anahtar (keys %sayfalar) {
   print "$anahtar'ın web sayfasının adresi: $sayfalar{$anahtar}\n";
}
Bu örnekte %sayfalar değişkeninin anahtarlarını öğrenebilmek için bir hash değişkeninin anahtarlarını dizi olarak veren keys fonksiyonu kullanılmıştır. keys fonksiyonunun tek bir dezavantajı vardır: Anahtarları rastgele bir sırayla vermesi. Yani bu örnekte kimin adresinin önce, kiminkinin sonra ekrana yazılacağı belli değildir. Adresleri belli bir sırayla yazdırmak istiyorsanız aşağıda gösterildiği gibi foreach döngüsünde anahtarları kendiniz yazmalısınız.
foreach $anahtar ("sinan","koray","baris") {
   print "$anahtar'ın web sayfasının adresi: $sayfalar{$anahtar}\n";
}
Hash değişkenler formla gönderilen verileri ayırmada çok işimize yarayacak. Örneğin $form{'soyad'} bize formunuzdaki soyad kutucuğuna yazılan değeri verecek. Televizyoncuların deyimiyle: "AZ SONRA!" :)
Neyse, biz yine işimize bakalım ve adres listesi veren bir web sayfası üreten yeni bir CGI scripti yazalım. Tabi ki Hash değişken kullanarak.
#!/usr/bin/perl

%sayfalar = ("sinan" => "http://www.sinanilyas.cjb.net",
             "koray" => "http://cc.sau.edu.tr/~ktoksoz",
             "baris" => "http://turk.eu.org/uruzgar" );

print "Content-type:text/html\n\n";

print <<IlkKisim;
<html><head><title>Adres Listesi</title></head>
<body>
<h2>Adres Listesi</h2>
<ul>
IlkKisim
;

foreach $anahtar (keys %sayfalar) {
print "<li><a href=\"$sayfalar{$anahtar}\">$anahtar</a>\n";
}

print <<SonKisim;
</ul>
<p>
</body>
</html>
SonKisim
;
 
Yukarıdaki scripti "adreslistesi.cgi" adıyla kaydedin ve çalıştırılabilmesi için erişim yetkilerini 755 olacak şekilde değiştirin. Sonra da web browser'ınızdan çağırın. Açılan sayfada isme tıkladığınız zaman o kişinin web sayfasının açıldığını göreceksiniz.

Bölüm 3: CGI Ortam Değişkenleri

Ortam değişkenleri CGI programı çalıştırılıdığı zaman browser'ınızın (ve web server'ınızın) programa gönderdiği bilgilerdir. Ortam değişkenleri %ENV isimli Hash değişkende saklanır.
 CGI Ortam Değişkenleri
 DOCUMENT_ROOT
 Server'ınızın kök dizinini verir.
 HTTP_COOKIE
 Eğer varsa ziyaretçinin "cookie"sini verir.
 HTTP_HOST
 Server'ınızın "hostname"ini verir.
 HTTP_REFERER
 Scriptin çağrıldığı sayfanın adresini verir.
 HTTP_USER_AGENT
 Ziyaretçinin browser'ının tipini verir.
 PATH
 Server'ınızın "system path"ini verir. (Genelde /bin, /usr/sbin vs.)
 QUERY_STRING
 GET metodu ile yollanan bilgiyi verir.
 REMOTE_ADDR
 Ziyaretçinin IP adresini verir.
 REMOTE_HOST
 Ziyaretçinin "hostname"ini verir. (*)
 REMOTE_PORT
 Ziyaretçinin web server'ınıza bağlandığı portu verir.
 REMOTE_USER
 Ziyaretçinin kullanıcı adını verir. (.htaccess korumalı sayfalar için)
 REQUEST_METHOD
 Bilgi gönderme metodunu verir. (GET ya da POST)
 SCRIPT_FILENAME
 Scriptin tam yolunu verir.
 SERVER_ADMIN
 Server'ınızın webadmin'inin e-mail adresini verir.
 SERVER_NAME
 Server'ınızın tam domain adını verir. (Örn: cc.sau.edu.tr)
 SERVER_PORT
 Server'ınızın dinlemede olduğu portu verir.
 SERVER_SOFTWARE
 Serverdaki web server programını verir. (Örn: Apache 1.3)
(*) Eğer server'ınızda "reverse-name-lookups" yoksa REMOTE_HOST ziyaretçinin IP adresini verir.
Bazı server'larda bunlardan başka değişkenler de olabiliyor. Daha fazla bilgi için server'ınızın dökümanlarını inceleyiniz. Farketmişseniz bazı değişkenler server'la ilgili, bazıları ise ziyaretçi ile ilgili bilgileri içeriyor. Server'la ilgili olanların programa bildirdiği bilgiler o server'da çalışan bütün CGI programları için aynı olacaktır. Fakat ziyaretçi ile ilgili bilgiler program her çalıştırıldığında farklı olabilir.
Her CGI çalıştırıldığında bütün ortam değişkenleri atanmaz. REMOTE_USER değişkeni sadece .htaccess dosyası ile korunan dizin ya da altdizinler için atanır. Bu durumda REMOTE_USER değişkeninin alacağı değer .htaccess dosyasındaki kullanıcı adıdır.
%ENV değişkeni CGI çalıştırıldığında otomatik olarak atanır ve isterseniz tamamını isterseniz sadece belli değerleri kullanabilirsiniz. Mesela aşağıdaki kod ile ziyaretçinin IP adresini yazdırabilirsiniz.
print "IP adresiniz: $ENV{'REMOTE_ADDR'}\n";
Şimdi bütün ortam değişkenlerini yazdıran bir CGI yazalım. Yeni bir dosya oluşturun, "ortam.cgi" adıyla kaydedin ve içine şunları yazın:
#!/usr/bin/perl

print "Content-type:text/html\n\n";
print <<HTMLSonu;
<html><head><title>Ortam Değişkenleri</title></head>
<body>
HTMLSonu
;

foreach $anahtar (sort(keys %ENV)) {
   print "$anahtar = $ENV{$anahtar}<br>\n";
}

print "</body></html>";
 
Scripti kaydedin, erişim yetkilerini 755 olarak ayarlayın ve browser'ınızdan çağırın. Eğer hata mesajı alırsanız programı UNIX'te çalışmayı deneyip hatanın nerede olduğunu öğrenebileceğinizi hatırlayın.
Bu örnekte sort fonksiyonu kullanılarak %ENV değişkeninin anahtarları alfabetik sıraya koyduk. Perl'ün sort fonksiyonu karakter değerlerini karşılaştırdığı için sayıları düzgün bir şekilde sıraya koyamaz.

Basit Bir Sorgu Formu

Bir HTML formundan CGI'a bilgi göndermek için iki yol vardır. GET ve POST. Form bilgisinin server'a nasıl yollandığını bu metodlar belirler. GET metodunda formla gönderilen bilgiler URL'in bir parçası olarak gönderilir ve QUERY_STRING ortam değişkenine atanır. POST metodunda nasıl gönderildiğini bir sonraki bölümde anlatacağız.
QUERY_STRING değişkenine birkaç değişik yolla atama yapabiliriz. Birinci yöntem aşağıda görüldüğü gibidir.
http://hammer.prohosting.com/cgi-bin/ortam.cgi?deneme1
http://hammer.prohosting.com/cgi-bin/ortam.cgi?deneme2
http://hammer.prohosting.com/cgi-bin/ortam.cgi?deneme3

Yukarıdaki linklerin her birine tıklayın. QUERY_STRING değişkeninin değerinin soru işaretinden sonra gelen yazı olduğunu göreceksiniz. Bu örneklerde QUERY_STRING değişkeni "deneme1","deneme2" ve "deneme3" değerlerini alır.
Bir başka yöntem de aşağıdaki gibi basit bir form hazırlamaktır.
<form action="http://hammer.prohosting.com/~sinan/cgi-bin/ornek/ortam.cgi" method="GET">
Buraya birşeyler yazın: <input type="text" name="ornek_yazi" size=30><p>
</form>
"Gönder" düğmesinin olmadığını farketmişsinizdir sanırım. GET metodu ile sadece enter'a basarsınız ve form gönderilir. (Bu yöntem sadece bir tane girdi alanı olduğu zaman işe yarar. Birden fazla girdi alanını göndermek için mutlaka "Gönder" düğmesi koymalısınız.)
Yukarıdaki kodları kullanarak bir HTML dosyası hazırlayın ve "get.html" adıyla kaydedip browser'ınızla açın. Daha sonra form alanına birşeyler yazın ve enter'a basın. QUERY_STRING değişkeninin değeri aşağıdaki gibi olur.
$ENV{'QUERY_STRING'} = ornek_yazi=iste+yazdiginiz+yazi
Eşittir (=) işaretinin solundaki yazı form alanının adıdır. Sağındaki yazı ise formdaki kutucuğa yazdığınız yazıdır. FAKAT farkettiğiniz gibi boşlukların yerini artı (+) işareti almış. Hatta çeşitli noktalama işaretleri ve özel karakterlerin yerine %-kod şeklinde özel kodlar çıkmış.
Buna "URL Kodlama" denir ve ister GET metodu ister POST metodu kullanılsın, herhangi bir form ile bilgi gönderildiği zaman meydana gelir.
Perl scriptiniz bu bilgiyi eski haline getirebilir fakan uzun ve karmaşık bilgiler yollandığında POST metodunu kullanmak daha iyidir. GET metodu daha çok veritabanından bilgi aratma gibi tek alanlı formlar için elverişlidir.
GET metodu ile birden fazla alanlı formları da gönderebilirsiniz.
<form action="http://hammer.prohosting.com/~sinan/cgi-bin/ornek/ortam.cgi" method="GET">
   Adınız: <input type="text" name="ad" size=30><p>
Soyadınız: <input type="text" name="soyad" size=30><p>
<input type="submit" value="Gönder">
</form>
Bo formla gönderilen bilgiler aşağıdaki gibi görünür.
$ENV{'QUERY_STRING'} = ad=umut+baris&soyad=ruzgar
Değerler & işareti ile ayrılmıştır. Bu iki değeri birbirinden ayırmak için Perl'ün split fonksiyonunu kullanacağız.
@degerler = split(/\&/,$ENV{'QUERY_STRING'});
foreach $i (@degerler) {
     ($alanadi, $deger) = split(/=/,$i);
     print "$alanadi = $deger\n";
}
split fonksiyonu bir karakter sırasını, belirtilen karakter ya da karakterlerden ayırarak bir dizi oluşturur. Örneğimizin ilk satırında QUERY_STRING değişkeninin değeri & işaretinden ikiye ayrılmıştır. & işaretinden önce \ kullanılmasının nedeni & işaretinin Perl'de özel bir anlamı olmasıdır. (Perl'de bazı özel karakterleri kullanırken başına \ işareti koymamız gerekebilir). Bu ayırma işlemi sonucu @degerler dizisine iki değer atanır: ad=umut+baris ve soyad=ruzgar. foreach döngüsünde önce = işaretinden alan adı ve alanlara yazılan yazılar birbirinden ayrılarak $alanadi ve deger değişkenlerine atanır. Sonra da birbirinden ayrılmış olan bu değerler yazdırılır.
GET metodu hakkında bazı uyarılar: Bu metod bilgi göndermek için güvenli değildir. Bu yüzden şifre ve kredi kartı bilgileri gibi gizli bilgileri gönderirken asla bu metodu kullanmayınız. Gönderilen bilgi URL'in bir parçası olarak gönderildiği için server'ın log dosyalarında kaydedilir ve log dosyaları da server'daki bütün kullanıcılar tarafından okunabilir. Gizli bilgiler bir sonraki bölümde göreceğimiz POST metodu ile güvenli bir biçimde gönderilebilir.

Bölüm 4: Form İşleme

POST metodunda bilgiler URL ile birlikte gönderilmediği GET metodundan daha güvenlidir. POST metodunun GET metoduna bir diğer üstünlüğü de daha fazla bilgi gönderebilmesidir. Ayrıca, GET metodu ile gönderilen bilgiler web browser, web server ya da proxy server'ın kaşe belleğinde (cache) saklanabilir fakat POST metodu ile bilgiler her defasında yeniden gönderilir. Dezavantajı ise POST ile gönderilen bilgiler daha karmaşık olacağından dolayı bu bilgileri çözmek için daha biraz daha karmaşık bir kod yazmamız gerekir.
Web server, form bilgilerini CGI programına kodlayarak gönderir. Alfanumerik karakterler olduğu gibi gönderilir; boşluklar artı (+) işaretine çevrilir; tab, çift tırnak (") gibi özel işaretler de "%HH" şeklinde kodlanır. Burada "HH" karakterin ASCII karşılığının hexadesimal (16'lık sistemdeki) değeridir. Bu kodlama işlemine "URL kodlama" denir. Aşağıdaki tabloda sık kullanılan bazı karakterlerin kodlanmış karşılıklarını görebilirsiniz.
Normal
Karakter
Kodlanmış
Hali
 \n (enter)
 %0A
 \t (tab)
 %09
 /
 %2F
 ~
 %7E
 :
 %3A
 ;
 %3B
 @
 %40
 &
 %26
Gönderilen bilgiyle işe yarar şeyler yapabilmek için CGI bu kodlanmış bilgiyi çözmelidir. Neyse ki Perl'de substitute ve translate komutlarıyla bunu yapmak oldukça kolaydır. Perl, karakter içerisinde arama yapma ve değiştirme konusunda oldukça yeteneklidir. substitute komutunun temel yazılış biçimi aşağıdaki gibidir.
$yazi =~ s/aranan/yerinekonan/;
Bu örnek $yazi scalar değişkeninde aranan kelimesinin yerine yerinekonan kelimesini koyar. Araya konan operatör =~ (eşittir ve yanında tilde) işaretidir.
Daha iyi anlaşılacağını düşündüğüm başka bir örnek:
$selamlama = "Merhaba. Benim adım xisimx.\n";
$selamlama =~ s/xnamex/Sinan/;
print $selamlama;
Yukarıdaki örnek "Merhaba. Benim adım Sinan." yazdıracaktır. $selamlama değişkeninde "xisimx"in yerini "Sinan"ın aldığına dikkat edin.
Buna yakın fakat bir parça farklı bir komut da translate komutudur.
$yazi =~ tr/arananlistesi/yerinekonanlistesi/;
Bu komut "arananlistesi"ndeki bütün karakterleri "yerinekonan" listesindekilerle değiştirir. İşte bir örnek:
$kucukh =~ tr/[A-Z]/[a-z]/;
Bu örnek bütün yazıyı küçük harfe çevirir. [A-Z]'deki parantezler karşılaştırılacak karakter sınıfını belirtir.
Şimdi tekrar formlara dönelim. Formla gönderilen bilginin kodunu çözmeniz için bilgide iki değişiklik yapmalısınız:
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
İlk satırda + işaretleri boşluğa çevrilir. İkinci satırda ise pack() fonksiyonu kullanılarak %HH hex çiftleri ASCII karşılıklarına çevrilir.
Şimdi "post.cgi" adında yeni bir CGI hazırlayalım.
#!/usr/bin/perl

print "Content-type:text/html\n\n";

read(STDIN, $tampon, $ENV{'CONTENT_LENGTH'});
@ciftler = split(/&/, $tampon);
foreach $cift (@ciftler) {
   ($isim, $deger) = split(/=/, $cift);
   $deger =~ tr/+/ /;
   $deger =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
   $FORM{$isim} = $deger;
}

print "<html><head><title>Form Bilgileri</title></head><body>";
print "<h2>Formla gönderilen bilgiler:</h2>\n";

foreach $anahtar (keys(%FORM)) {
   print "$anahtar = $FORM{$anahtar}<br>";
}

print "</body></html>";
Şimdi yukarıdaki kodları açıklayalım. Form ile gönderilen bilgi önce $tampon scalar değişkenine okunuyor. Sonra & işaretlerinden ayrılarak elde edilen "formdegiskeni=deger" şeklindeki form alanı bilgileri @ciftler dizisine yerleştiriliyor. Sonra foreach döngüsünde herbir form alanı bilgisi = işaretinden ayrılıyor ve URL kodu çözülerek %FORM Hash değişkenine atanıyor. %FORM değişkenindeki anahtar adları form alanının adıdır. Mesela <input type="text" name="ad" size=30> HTML kodunda koyu yazılan "ad" değeri form alanının adıdır. Formunuzda "ad" ve "soyad" isimli iki form alanı varsa scriptinizde bu değerleri $FORM{'ad'} ve $FORM{'soyad'} şeklinde kullanabilirsiniz.
Aşağıdaki örneği inceleyerek split fonksiyonunun nasıl çalıştığını hatırlayalım.
$yazi = "sari&kirmizi&yesil";
@renkler = split(/&/,$yazi);
@renkler değişkeninin yeni değeri ("sari","kirmizi","yesil") olur.
Şimdi de scriptimizi denemeye geldi sıra. Form için aşağıdaki kodları kullanarak bir HTML dosyası oluşturun ve "post.html" adıyla kaydedin.
<form action="http://hammer.prohosting.com/~sinan/cgi-bin/ornek/post.cgi" method="POST">
<pre>
   Adınız: <input type="text" name="ad" size=30><br>
Soyadınız: <input type="text" name="soyad" size=30><br>
</pre>
<input type="submit" value="Gönder">
<input type="reset" value="Tümünü Sil">
</form>
İsterseniz scriptimizi biraz daha geliştirelim. Scriptimiz form bilgilerini mail adresimize göndersin. İlk önce sistemimizde sendmail programının nerede olduğunu bulalım. Bunu öğrenmek için which sendmail ya da whereis sendmail komutunu kullanabilirsiniz. (benim kullandığım serverda bu programın yeri /usr/sbin/sendmail olduğundan örneklerimizde bu şekilde kullanacağız. Eğer sizin server'ınızda farklı bir yerde ise kendi server'ınızdaki yerini yazmanız gerekir.)
Not: @ işaretini çift tırnak arasında ya da print <<HTMLSonu bloğunda kullanırken önüne "silyas\@esentepe.sau.edu.tr" örneğindeki gibi \ işareti koymalısınız. Tek tırnak arasında 'silyas@esentepe.sau.edu.tr' örneğinde olduğu gibi \ işareti koymadan güvenle kullanabilirsiniz.
#!/usr/bin/perl

print "Content-type:text/html\n\n";

read(STDIN, $tampon, $ENV{'CONTENT_LENGTH'});
@ciftler = split(/&/, $tampon);
foreach $cift (@ciftler) {
    ($isim, $deger) = split(/=/, $cift);
    $deger =~ tr/+/ /;
    $deger =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
    $FORM{$isim} = $deger;
}

$mailprog = '/usr/sbin/sendmail';

# bunu kendi mail adresinizle değiştirin

$gonderilen = 'silyas@esentepe.sau.edu.tr';

# burada maili göndermek üzere sendmail programı açılıyor
# eğer sendmail programı bulunamazsa hata alt programı (en altta)
# işletilerek programın bulunamadığı yazıyor

open (MAIL, "|$mailprog -t") or &hata("$mailprog bulunamadı!\n");

# sendmail programına mailin kime gönderileceği bildiriliyor

print MAIL "To: $gonderilen\n";

# sendmail programına ziyaretçinin email adresi bildiriliyor.
# bu "Yanıtla" tuşuna bastığınızda işe yarar
# kullanmak zorunda değilsiniz
# formunuzda 'email' ve 'isim' kutularının bulunduğu varsayılmıştır.

print MAIL "Reply-to: $FORM{'email'} ($FORM{'isim'})\n";

# sendmail programına mailin konusu gönderiliyor
# konudan sonra iki tane \n olduğuna dikkat edin

print MAIL "Subject: Form Bilgileri\n\n";

# sendmail programına form bilgileri gönderiliyor

foreach $anahtar (keys(%FORM)) {
   print MAIL "$anahtar = $FORM{$anahtar}\n";
}

# bilgiler gönderildikten sonra sendmail programını kapatmayı unutmayın

close(MAIL);

# teşekkür sayfası oluşturuluyor

print <<HTMLSonu;
<html><head><title>Teşekkürler</title></head><body>
<h2>Teşekkürler</h2>
Mailiniz gönderildi. Formu gönderdiğiniz için teşekkürler<p>
</body></html>
HTMLSonu
;

# hata alt programı

sub hata {
    ($hatamesaji) = @_;
    print "<html><head><title>Hata!</title></head><body>"
    print "<h2>Hata</h2>\n";
    print "$hatamesaji<p>\n";
    print "</body></html>\n";
    exit;
}
Yukarıdaki scriptte yeni bir yapı kullandık: hata isimli bir "alt program". Alt programlar programların sadece çağırıldıkları zaman işletilen komutlarıdır diyebiliriz. Örneğimizde hata alt programı sadece sendmail programı bulunamazsa çalıştırılır. Programınızın bu durumda size bir server hatası vermesi yerine neyin yanlış gittiğine dair bilgi vermesini istersiniz. hata alt programıyla bu yapılıyor. sendmail programının bulunmadığını bildiren bir web sayfası gösteriyor ve Perl'den çıkıyor. Perl'de alt programlar &altprogramadi ya da &atlprogramadi (argümanlar) şeklinde çağrılır. Argümanlar alt programa gönderilen değerlerdir.
Şimdi aşağıdaki kodlarla bir form oluşturun ve scripti deneyin.
<form action="http://hammer.prohosting.com/~sinan/cgi-bin/ornek/mail.cgi" method="POST">
<pre>
          Adınız: <input type="text" name="isim" size=30>
E-mail adresiniz: <input type="text" name="email" size=30>
    Web sayfanız: <input type="text" name="web_sayfasi" size=30>
         Yaşınız: <input type="text" name="yas" size=3>
</pre>
<input type="submit" value="Gönder">
<input type="reset" value="Tümünü Sil">

</form>
Eğer herşey yolunda giderse birkaç dakika sonra form bilgileri e-mail adresine gelecektir.
Eğer form bilgilerini birkaç adrese birden göndermek istiyorsanız adresleri aşağıdaki gibi aralarına virgül koyarak yazabilirsiniz.
$gonderilen = 'silyas@esentepe.sau.edu.tr', zeytinbey@bbs.ege.edu.tr, sinanilyas@hotmail.com';

Bölüm 5: İleri Seviye Formlar

Bir önceki bölümde form bilgilerinin kodlarının nasıl çözülecegini ve mail olarak gönderileceğini gördük. Fakat yazdığımız scriptte bir eksiklik vardı: Hata kontrolü. Eğer boş formlar almak istemiyorsanız ya da belli alanların mutlaka doldurulmasını istiyorsanız, hatta bir anket yapıyor ve verilen cevaba göre scriptinizin farklı işler yapmasını istiyorsanız şimdi yazacaklarımı dikkatlice okuyun.
Belli bir şartın doğru olup olmadığını kontrol etmek için if blokunu kullanırız.
if ($degiskenadi eq "birseyler") {
  # koşul doğruysa işletilecek komutlar
}
elsif ($degiskenadi eq "baskaseyler") {
  # bu koşul doğruysa işletilecek komutlar
}
else {
  # yukarıdaki koşulların hiçbiri doğru değilse işletilecek komutlar
}
elsif ve else bloklarının konulması şart değildir. Sadece tek bir şartın doğruluğunu kontrol edecekseniz şu şekilde kullanabilirsiniz:
if ($varname > 23) {
  # $sayi 23'ten büyükse işletilecek komutlar
}
Perl'de değişkenin sayı ya da yazı oluşuna göre değişik karşılaştırma operatörleri vardır.
Karşılaştırma İfadesi
Sayı İçin
Yazı İçin
 $x eşittir $y
 $x == $y
 $x eq $y
 $x eşit değildir $y
 $x != $y
 $x ne $y
 $x büyüktür $y
 $x > $y
 $x gt $y
 $x büyük eşittir $y
 $x >= $y
 $x ge $y
 $x küçüktür $y
 $x < $y
 $x lt $y
 $x küçük eşittir $y
 $x <= $y
 $x le $y
Farkettiğiniz gibi, yazıların karşılaştırılmasında karakter operatörler (eq, ne, vs.), sayıların karşılaştırılmasında işaret operatörler (==, !=, vs.) kullanılır.
Şimdi "mail.cgi" isimli scriptimizi açıp sendmail programını açan satırın (open (MAIL, "|$mailprog -t") or &hata("$mailprog bulunamadı!\n");) hemen öncesine şu kodları yerleştirin ve scripti "mail2.cgi" adıyla kaydedin.
if ($FORM{'isim'} eq "") {
    &hata("Lütfen isminizi yazın");
}
Hata mesajının yazdırılmasında hata alt programından faydalanılıyor. Scriptimize bu kodu eklemekle formunuzdaki isim alanının doldurulmasını zorunlu kılmış olduk. Aşağıdaki gibi birden fazla alanı da kontrol edebilirdik.
if ($FORM{'isim'} eq "" or $FORM{'email'} eq "" or $FORM{'yas'} eq "") {
    &hata("Lütfen isminizi, e-mail adresinizi ve yaşınızı yazın");
}
Yukarıdaki kod "isim", "email" ya da "yas" isimli alanların herhangi biri boş bırakıldığı takdirde hata mesajının yazdırılmasını sağlayacaktır. Koşullar or operatörü ile ayrılmışlardır. (or yerine || da kullanılabilir.)

Onay Kutuları

Formdaki onay kutularının nasıl yazdırıldığını bir örnekle açıklayalım. İlk önce aşağıdaki kodlarla bir sayfa oluşturun ve "renk.html" adıyla kaydedin.
<html><head><title>Sevdiğiniz Renkler</title></head><body>
<form action="http://hammer.prohosting.com/~sinan/cgi-bin/ornek/renk.cgi" method="POST">

<h3>Sevdiğiniz renkleri işaretleyin</h3>
<input type="checkbox" name="kirmizi" value=1> Kırmızı<br>
<input type="checkbox" name="sari" value=1> Sarı<br>
<input type="checkbox" name="yesil" value=1> Yeşil<br>
<input type="checkbox" name="mavi" value=1> Mavi<p>

<input type="submit" value="Gönder">

</form>
</body></html>
Burada value sıfatına istediğiniz değeri verebilirsiniz. Yukarıda CGI programında daha kısa kod yazabilmek için "1" değeri verilmiştir.
Şimdi de bu formun kodunu çözecek CGI programını yazalım.
#!/usr/bin/perl

print "Content-type:text/html\n\n";

read(STDIN, $tampon, $ENV{'CONTENT_LENGTH'});
@ciftler = split(/&/, $tampon);
foreach $cift (@ciftler) {
    ($isim, $deger) = split(/=/, $cift);
    $deger =~ tr/+/ /;
    $deger =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
    $FORM{$isim} = $deger;
}

print "<html><head><title>Sonuçlar</title></head>\n";
print "<body>\n";
print "<h2>Sonuçlar</h2>\n";

@renkler = ("kirmizi","sari","yesil","mavi");
foreach $renk (@renkler) {
    if ($FORM{$renk} == 1) {
       print "$renk rengini işaretlediniz<br>\n";
    }
}

print "</body></html>\n";

Radyo Düğmeleri

Radyo düğmeleri onay kutularından biraz farklıdır. Form hazırlarken radyo düğmelerinin hepsinin name sıfatına aynı değer atandığı için yazdırılması daha kolaydır. Bir örnek vererek bunu açıklayalım.
Aşağıdaki kodlarla bir sayfa hazırlayın ve "renk2.html" adıyla kaydedin.
<html><head>
<title>En Sevdiğiniz Renk</title>
</head>
<body>
<form action="http://hammer.prohosting.com/~sinan/cgi-bin/ornek/renk2.cgi" method="POST">

<h3>İçlerinde en sevdiğiniz renk hangisi?</h3>
<input type="radio" name="renk" value="kirmizi"> Kırmızı<br>
<input type="radio" name="renk" value="sari"> Sarı<br>
<input type="radio" name="renk" value="yesil"> Yeşil<br>
<input type="radio" name="renk" value="mavi"> Mavi<p>

<input type="submit" value="Gönder">

</form>
</body>
</html>
Şimdi de aşağıdaki kodları yazın ve "renk2.cgi" adıyla kaydedin. ("renk.cgi"den tek farkının foreach döngüsünün yerine konan print "En sevdiğiniz renk: $FORM{'renk'}\n"; satırı olduğuna dikkat edin.)
#!/usr/bin/perl

print "Content-type:text/html\n\n";

read(STDIN, $tampon, $ENV{'CONTENT_LENGTH'});
@ciftler = split(/&/, $tampon);
foreach $cift (@ciftler) {
    ($isim, $deger) = split(/=/, $cift);
    $deger =~ tr/+/ /;
    $deger =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
    $FORM{$isim} = $deger;
}

print "<html><head><title>Sonuçlar</title></head>\n";
print "<body>\n";
print "<h2>Sonuçlar</h2>\n";

print "En sevdiğiniz renk: $FORM{'renk'}\n";

print "</body></html>\n";
Scriptimizi bir adım daha geliştirerek ziyaretçiye sadece seçtiği rengi söylemekle kalmayıp aynı zamanda fon rengini seçilen renk yapacak şekilde değiştirelim.
#!/usr/bin/perl

print "Content-type:text/html\n\n";

read(STDIN, $tampon, $ENV{'CONTENT_LENGTH'});
@ciftler = split(/&/, $tampon);
foreach $cift (@ciftler) {
    ($isim, $deger) = split(/=/, $cift);
    $deger =~ tr/+/ /;
    $deger =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
    $FORM{$isim} = $deger;
}

%renkler = ("kirmizi" => "red",
            "sari" => "yellow",
            "yesil" => "green",
            "mavi" => "blue");
print "<html><head><title>En Sevdiğiniz Renk</title></head>\n";
print "<body bgcolor=$renkler{$FORM{'renk'}}>\n";
print "<h2>En sevdiğiniz renk: $FORM{'renk'}</h2><br>\n";
print "</body></html>";

Seçim Kutuları

Seçim kutularının kodunun çözülmesi hemen hemen radyo butonları gibidir. Yine konunun daha iyi anlaşılması bakımından bir örnek verelim.
Aşağıdaki kod ile formu oluşturun ve sayfayı "renk3.html" adıyla kaydedin.
<form action="http://hammer.prohosting.com/~sinan/cgi-bin/ornek/renk2a.cgi" method="POST">

<select name="renk">
<option value="kirmizi"> Kırmızı
<option value="sari"> Sarı
<option value="yesil"> Yeşil
<option value="mavi"> Mavi
</select><p>

<input type="submit" value="Gönder">
</form>
Seçim kutularının değerlendirilmesi radyo botonları ile aynı olduğundan yeni bir script yazmamıza gerek yok. Formumuzu "renk2a.cgi" scriptine gönderebiliriz.
Şu ana kadar öğrendiğimiz bilgilerle onay kutuları, radyo düğmeleri ve seçim kutuları içeren form bilgilerini web sayfasına yazan bir CGI scripti hazırlayabiliriz. Aşağıdaki kodlarla yeni bir HTML dosyası oluşturun ve "form.html" adıyla kaydedin.
<html><head><title>Form</title></head>
<body>
<form action="http://hammer.prohosting.com/~sinan/cgi-bin/ornek/form.cgi" method="POST">

İsminiz: <input type="text" name="isim" size=30><p>

E-mail adresiniz: <input type="text" name="email" size=30><p>

Bu siteye nasıl ulaştınız?
<select name="nasilulasti">
<option value=0 selected>Seçim yapın...
<option value=1>Direk adresini yazdım
<option value=2>Siteyi bookmark etmiştim
<option value=3>Arama motorundan buldum
<option value=4>Başka bir siteden
<option value=5>Adresi bir kitaptan aldım
<option value=6>Diğer
</select><p>

Siteye 5 üzerinden kaç verirsiniz?<br>
<input type="radio" name="puan" value=1> 1
<input type="radio" name="puan" value=2> 2
<input type="radio" name="puan" value=3> 3
<input type="radio" name="puan" value=4> 4
<input type="radio" name="puan" value=5> 5<p>

Aşağıdakilerden hangileriyle ilgilenirsiniz?<br>
<input type="checkbox" name="wds" value=1> Web Design<br>
<input type="checkbox" name="wsy" value=1> Web Server Yöneticiliği<br>
<input type="checkbox" name="tic" value=1> Elektronik Ticaret<br>
<input type="checkbox" name="als" value=1> İnternetten Alışveriş<br>
<input type="checkbox" name="egt" value=1> İnternet Aracılığıyla Eğitim<br>
<p>

Sayfa hakkında yorumlarınız:<br>
<textarea name="yorum" rows=5 cols=70 wrap="virtual">
</textarea>
<p>

<input type="submit" value="Gönder">
<input type="reset" value="Tümünü Sil">
</form>
</body></html>
Şimdi de "form.cgi" programını yazalım.
#!/usr/bin/perl

print "Content-type:text/html\n\n";

read(STDIN, $tampon, $ENV{'CONTENT_LENGTH'});
@ciftler = split(/&/, $tampon);
foreach $cift (@ciftler) {
    ($isim, $deger) = split(/=/, $cift);
    $deger =~ tr/+/ /;
    $deger =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
    $FORM{$isim} = $deger;
}

# "Bu siteye nasıl ulaştınız?" sorusunun cevabı
# numara olarak gönderildiği için bunu çevirebilmek
# için bir hash değişkene ihtiyacımız var

%nasilulasti = ( 0 => "",
                 1 => "Direk adresini yazdım",
                 2 => "Siteyi bookmark etmiştim",
                 3 => "Arama motorundan buldum",
                 4 => "Başka bir siteden",
                 5 => "Adresi bir kitaptan aldım",
                 6 => "Diğer" );

print <<HTMLBas;
<html><head><title>Sonuçlar</title></head>
<body>
<h2>Sonuçlar</h2>

Formla gönderdiğiniz bilgiler aşağıdaki şekildedir:<p>

İsminiz: $FORM{'isim'}<p>

E-mail adresiniz: $FORM{'email'}<p>

Siteye nasıl ulaştığınız: $nasilulasti{$FORM{'nasilulasti'}}<p>

Siteye verdiğiniz puan: $FORM{'puan'}<p>

HTMLBas
;

%secim = ("wds" => "Web Design",
          "wsy" => "Web Server Yöneticiliği",
          "tic" => "Elektronik Ticaret",
          "als" => "İnternetten Alışveriş",
          "egt" => "İnternet Aracılığıyla Eğitim" );

print "Aşağıdaki konularla ilgileniyorsunuz:<br>\n";
foreach $anahtar (keys %secim) {
   if ($FORM{$anahtar} == 1) {
      print "$secim{$anahtar}<br>\n";
   }
}

print <<HTMLSon;
<p>
Sayfa hakkında yorumlarınız:<br>
$FORM{'yorum'}
<p>
</body></html>
HTMLSon
;
Eğer form bilgilerinin mail adresinize gönderilmesini istiyorsanız geçen bölümde öğrendiğiniz bilgilerle bunu yapabilirsiniz.

Bölüm 6: Dosya İşlemleri

Daha ileri seviye CGI uygulamaları hazırlamaya başladığınızda bilgileri daha sonra kullanmak üzere dosyalara yazarak saklamak isteyeceksiniz. Mesela bir misafir defteri (guestbook) programınız olabilir ve isim, e-mail gibi bilgileri bir log dosyasına kaydetmek isteyebilirsiniz. Ya da bir sayac programının bir dosyadaki sayıyı arttırmasını isteyebilirsiniz. Hatta bir veritabanı dosyasından bilgi tarayarak bulup web sayfasına yazdıran bir program yapmak isteyebilirsiniz. Bütün bunları yapabilmek için dosya işlemlerini yani dosyadan bilgi okuma ve dosyaya bilgi yazmayı öğrenmelisiniz.
Çoğu server minimum erişim yetkileriyle çalışır. Bu server'ın güvenliği açısından önemlidir fakat dosyalara yazmayı güçleştirir. CGI programının yeni dosyalar oluşturmaya yetkisi yoktur. CGI programının dosyaya bilgi yazabilmesi için dosyanın erişim yetkilerinin aşağıdaki komutla "herkes tarafından yazılabilir" yapılması gerekir.
chmod 666 <dosya adı>
Bu komut dosyanın herkes tarafından okunabilir ve yazılabilir olmasını sağlar. Yalnız işin bir de kötü tarafı var. Server'ınızdaki diğer kullanıcılar rahatlıkla dosyanızı silebilirler. Ve malesef bu konuda diğer kullanıcılara güvenmekten başka yapabileceğiniz birşey yok :)
Eğer dosyayı sadece içinden bilgi okumak için kullanacaksanız aşağıdaki komutula sadece okuma yetkisi verebilirsiniz.
chmod 644 <dosya adı>

Dosyaları Açma

Dosyaları açmak için open komutunu kullanırız.
open(dosyadegiskeni,dosyaadi);
Şimdi bunu açıklamak için birkaç örnek verelim.
open(DOSYA,"bilgi.txt");    # bilgi.txt dosyasını okumak için açar
open(DOSYA,">bilgi.txt");   # bilgi.txt dosyasını üstüne yazmak için açar
open(DOSYA,">>bilgi.txt");  # bilgi.txt dosyasını eklemek için açar
Dosya değişkeni, dosyanın programda kullanılacak olan adıdır diyebiliriz. Yani dosyayı açtıktan sonra programın bir yerinde dosyaya erişmek için dosyanın sistemdeki adını değil dosya değişkenini kullanırız. Bu örneklerde dosya değişkeni "DOSYA" olarak seçilmiştir. Fakat dosya değişkeni olarak istediğiniz şeyi yazabilirsiniz.
Dosyanın adının başında eğer > işareti varsa dosya üstüne yazılmak için açılmıştır yani dosyada bulunan bütün bilgiler silinir ve yerine yenileri yazılır. Dosyanın adının başında eğer >> işareti varsa dosya sonuna bilgi eklemek için açılmıştır yani dosyada bulunan bilgiler silinmeden yeni yazacaklarımız dosyadaki bilgilerin sonuna eklenir.
Bu arada bir konuda sizi uyarmak istiyorum: CGI programınız eğer tam yolunu yazmamışsanız dosyanızı bulamayabilir. Bu yüzden sadece "bilgi.txt" yazmak yerine "/home/httpd/cgi-bin/bilgi.txt" şeklinde dosyanın tam yolunu yazmanız gerekebilir.
Dosya açmak için yukarıda kullandığımız kodun eksik bir yönü var: Hata kontrolü. Dosyanın açıldığından emin olmak için dosyayı aşağıda gösterildiği şekilde açmalısınız.
open(DOSYA,">bilgi.txt") or &hata("bilgi.txt dosyası bulunamadı...");
Burada 4. bölümdeki hata alt programı kullanılarak dosya açılmadığı takdirde programın gerekli açıklamayı yazdırarak Perl'den çıkması sağlanır.
Şimdi geçen bölümde yazdığımız "form.cgi" programında bazı değişiklikler yaparak form bilgilerini bir dosyaya yazdıralım. Aşağıdaki kodları "form2.cgi" adıyla kaydedin.
#!/usr/bin/perl
print "Content-type:text/html\n\n";

read(STDIN, $tampon, $ENV{'CONTENT_LENGTH'});
@ciftler = split(/&/, $tampon);
foreach $cift (@ciftler) {
    ($isim, $deger) = split(/=/, $cift);
    $deger =~ tr/+/ /;
    $deger =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;

    $deger =~ s/\n/ /g; # satır sonu işaretlerini yok etmek için eklendi

    $FORM{$isim} = $deger;
}

open(DOSYA,">>formbilgileri.txt") or &hata("formbilgileri.txt dosyası açılamadı. Lütfen silyas\@esentepe.sau.edu.tr adresine mail atarak webmaster'ı uyarınız.");

print DOSYA "$FORM{'isim'}|$FORM{'email'}|$FORM{'nasilulasti'}|$FORM{'puan'}|";

%secim = ("wds" => "Web Design",
          "wsy" => "Web Server Yöneticiliği",
          "tic" => "Electronic Commerce",
          "als" => "Elektronik Ticaret",
          "egt" => "İnternet Aracılığıyla Eğitim" );

foreach $anahtar (keys %secim) {
    if ($FORM{$anahtar} == 1) {
        print DOSYA "$anahtar,";
    }
}

print DOSYA "|$FORM{'yorum'}\n";
close(DOSYA);

print <<HTMLSonu;
<html><head><title>Teşekkürler</title></head>
<body>
<h2>Teşekkürler</h2>
Gönderdiğiniz bilgiler kaydedildi.
</body></html>
HTMLSonu
;

sub hata {
    ($hatamesaji) = @_;
    print "<h2>Hata!</h2>\n";
    print $hatamesaji;
    exit;
}
Şimdi bilgilerin yazılacağı dosyayı oluşturup "yazılabilir" yapmalısınız. Bunun için programı kaydettiğiniz dizinde şu komutları yazın:
touch formbilgileri.txt
chmod 666 formbilgileri.txt
touch komutu ile yeni ve boş bir dosya oluşturulur ve chmod komutu ile herkesin dosyaya yazabilmesi sağlanır.
Şimdi "form.html" dosyasını açın ve formu "form2.cgi" ile göndermesi için gerekli değişikliği yapın. Sonra da "form2.html" adıyla kaydedin. Formu doldurup gönderdiğinizde herşey yolunda gitmişse "formbilgileri.txt" dosyasının içeriği aşağıdaki gibi olacaktır.
sinan ilyas|silyas@esentepe.sau.edu.tr|1|5|wds,egt,|siteniz harika
Bu şekilde text dosyasından oluşan ve her satırı yeni bir kayıt olan veritabanı dosyalarına "flat-file database" denir. Bu örnekte alanlar pipe (|) işareti ile ayrılmıştır. İsterseniz gönderilen bilgide bulunmacak başka bir karakter kullanabilirsiniz.
Yukarıdaki kodla ilgili bir şeyi daha açıklayalım.
$deger =~ s/\n/ /g;
Bu satırla ifadelerin sonlarındaki satır sonu işarertlerini yok ediyoruz çünkü veritabanı dosyamızda her kaydın tek satırda olması gerekiyor. Ayrıca, dikkat etmişseniz peşpeşe birkaç print komutu kullanmamıza rağmen herşey tek bir satıra yazdırıldı. Bunun nedeni son print komutuna kadar \n ifadesini kullanmamış olmamız.
Buna bir örnek verirsek sanırım daha iyi anlaşılır.
print "Merhaba, ";
print "ben ";
print "Sinan.\n";
Kodları aşağıdaki gibi bir çıktı verir.
Merhaba, ben Sinan.

Dosyaları Kapatma

Dosya ile işiniz bittiği zaman dosyayı kapatmalısınız. Bunu aşağıdaki komutla yapabilirsiniz.
close(dosyadegiskeni);

Dosyalardan Bilgi Okuma

Bir gün merak edip formla gönderilen bilgilerin bir özetini görmek isteyebilirsiniz. Bunun için programda bilgilerin kaydedildiği dosyayı açtırıp bütün kayıtları okutup gereken hesapları yaptırmalısınız.
Bir dosyadan bilgiyi okuturken ister tek bir satırı, isterseniz bütün dosyayı okuyabilirsiniz. İşte bir örnek:
open(DOSYA,"formbilgileri.txt") or &hata("Dosya açılamadı.");

$a = <DOSYA>; # $a değişkenine dosyadan bir tek satır okur
@b = <DOSYA>; # @b değişkenine dosyanın tamamını okur

close(DOSYA);
Bu kodlar "formbilgileri.txt" dosyasının ilk satırını $a scalar değişkenine, geri kalan satırları @b dizisine okur. Bu durumda @b disizinin her bir elemanı bir satır olur. Her iki kod satırında da okutma işi <DOSYA> koduyla yapılıyor. Dosyadan ne kadar bilgi okunacağını atanacağı değişkenin tipi belirliyor.
Aşağıdaki dosyanın tamamını bir diziye okuduktan sonra dosyanın içeriğini satır satır ekrana yazdırır.
open(DOSYA,"formbilgileri.txt") or &hata("Dosya açılamadı.");
@bilgiler = <DOSYA>;
close(DOSYA);

foreach $satir (@bilgiler) {
    chomp($satir);
    print "$satir\n";
}
Bu kodlar dosyanın açık kalma süresini en aza indirir. Bu yüzden dosyadan bilgi okurken bu metodu kullanmanızı tavsiye ederim.
Şimdi "formbilgileri.txt" dosyasından bilgileri okuyup kaç kişinin formu gönderdiğini, siteye en çok hangi yolla ulaşıldığını, siteye verilen puanların ortalamasını, hangi bilgisayar alanıyla kaç kişinin ilgilendiğini ve yapılan yorumların listesi yazdıran bir CGI programı yazalım.
Şimdi "özet.cgi" adında yeni bir dosya oluşturun ve içine şu kodları yazın:
#!/usr/bin/perl
print "Content-type:text/html\n\n";

open(DOSYA,"formbilgileri.txt") or &hata("formbilgileri.txt dosyası açılamadı. Lütfen silyas\@esentepe.sau.edu.tr adresine mail atarak webmaster'a haber verin.");

@bilgiler = <DOSYA>;
close(DOSYA);

# Bilgileri özetlemek için önce bazı değişkenler hazırlanıyor.
$sayi = 0; # Formu gönderenlerin sayısı
$toplampuan = 0; # Verilen puanların toplamı
$yorumlar = ""; # Gönderilen bütün yorumlar
%nasilulasti_sayisi = (); # Hangi şekilde kaç kişinin ulaştığı
%ilgi = (); # Hangi bilgisayar alanıyla kaç kişinin ilgilendiğinin sayısı

%nasilulasti = ( 0 => "",
                 1 => "Direk adresini yazdım",
                 2 => "Siteyi bookmark etmiştim",
                 3 => "Arama motorundan buldum",
                 4 => "Başka bir siteden",
                 5 => "Adresi bir kitaptan aldım",
                 6 => "Diğer" );

foreach $i (@bilgiler) {
chomp($i);
($isim,$email,$nasil,$puan,$secim,$yorum) = split(/\|/,$i);

   # Bu satır "$sayi = $sayi + 1" ile aynı işi görür.
   $sayi++;

   $toplampuan = $toplampuan + $puan;

   # Bu satır $yorumlar değişkeninin sonuna $yorum değişkeninin
   # içeriğini ekler.

   $yorumlar .= "$yorum\n";

   $nasilulasti_sayisi{$nasil}++;

   @ilgilistesi = split(/,/,$secim);
   foreach $j (@ilgilistesi) {
      $ilgi{$j}++;
   }
}

# Verilen puanlarınn ortalaması bulunuyor.

if ($sayi > 0) { # Sıfıra bölmemek için
   $ort_puan = int($toplampuan / $sayi);
} else {
   $ort_puan = 0;
}

# Sonuçları bildiren web sayfası hazırlanıyor.

print <<HTMLSonu;
<html><head><title>Özet</title></head>
<body>
<h2>Özet</h2>

Gönderilen form sayısı: $sayi<p>

Verilen puanların ortalaması: $ort_puan<p>

Siteye kaç kişinin ne şekilde ulaştığı:<br>
<ul>
   <li>(yanıtlamayan) - $nasilulasti_sayisi{0}
   <li>$nasilulasti{1} - $nasilulasti_sayisi{1}
   <li>$nasilulasti{2} - $nasilulasti_sayisi{2}
   <li>$nasilulasti{3} - $nasilulasti_sayisi{3}
   <li>$nasilulasti{4} - $nasilulasti_sayisi{4}
   <li>$nasilulasti{5} - $nasilulasti_sayisi{5}
   <li>$nasilulasti{6} - $nasilulasti_sayisi{6}
</ul>

Kaç kişinin hangi bilgisayar alanıyla ilgili olduğu:<br>
<ul>
   <li>Web Design: $ilgi{'wds'}
   <li>Web Server Yöneticiliği: $ilgi{'wsy'}
   <li>Electronic Commerce: $ilgi{'tic'}
   <li>Elektronik Ticaret: $ilgi{'tic'}
   <li>İnternet Aracılığıyla Eğitim: $ilgi{'egt'}
</ul><p>

Sayfa Hakkında Yorumlar:<p>
$yorumlar

HTMLSonu
;

sub hata {
   ($hatamesaji) = @_;
   print "<h2>Hata!</h2>\n";
   print $hatamesaji;
   exit;
}
 

Bölüm 7: Dosyada Metin Arama

Bu bölümde bir dosyanın içerisinde belli bir metni nasıl aratabileceğimizi anlatacağım. Eğer bütün sitede arama yaptırmak istiyorsanız bunu kendiniz yapmanızı tavsiye etmem. Bunun için Glimpse ve SWISH gibi hazır site indexleme araçlarını kullanabilirsiniz. (SWISH'i tavsiye ederim)
Dosyada arama yaptırmanın değişik yolları vardır. Eğer bir tek dosyada arama yaptıracaksanız, bir döngü ile dosyadaki bütün kayıtları teker teker okutup aradığınız verinin o kayıtta geçip geçmediğini kontrol edebilir, ya da Perl'ün grep() fonksiyonunu kullanarak dosyanın tamamını bir seferde tarayabilirsiniz. Birinci yolu geçen bölümde öğrendiğimiz bilgilerle yapabilirsiniz. Bu bölümde ikinci yol olan grep() fonksiyonunu kullanarak bunu nasıl yapabileceğinizi anlatacağım.
grep() fonksiyonunun kullanımı aşağıdaki gibidir.
@sonuclar = grep(/$arananmetin/,@liste);
Sanırım bir örnek verirsek daha iyi anlaşılır.
#!/usr/bin/perl
@liste = ("sinan","koray","baris","orhan");
$arananmetin = "an";
@sonuclar = grep(/$arananmetin/,@liste);
foreach $i (@sonuclar) { print "$i\n"; }
Bu programın çıktısı aşağıdaki gibi olur.
sinan
orhan
Şimdi biraz daha gelişmiş bir örnek verelim. Aşağıdaki gibi, öğrencilerin okul numarası, isim ve yaş bilgilerinin kaydedildiği "ogrenci.txt" isimli bir veritabanı dosyamız olsun.
1|768|Hasan Şahin|15
2|515|Mustafa Öztürk|16
3|663|İlhan Yıldırım|16
4|697|Fikret Yılmaz|15
5|716|Haluk Çiçek|15
Şimdi de bu veritabanında arama yaptırmak için bir script yazalım.
#!/usr/bin/perl
$veridosyasi = "ogrenci.txt";
read(STDIN, $tampon, $ENV{'CONTENT_LENGTH'});
@ciftler = split(/&/, $tampon);

foreach $cift (@ciftler) {
   ($alanadi, $deger) = split(/=/, $cift);
   $deger =~ tr/+/ /;
   $deger =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
   $deger =~ s/~!/ ~!/g;
   $FORM{$alanadi} = $deger;
}

$arananmetin = $FORM{'isim'};

open(DOSYA,$veridosyasi);
@bilgiler = <DOSYA>;
close(DOSYA);
print "Content-type:text/html\n\n";
print "<html><head><title>Arama Sonuçları</title></head>\n";
print "<body><h3>Arama Sonuçları</h3>\n";

$bulunansayisi = 0;

@sonuclar = grep(/$arananmetin/,@bilgiler);

if ($#sonuclar >= 0) {
   foreach $i (@sonuclar) {
       chomp($i);
       ($kayitno,$okulno,$adsoyad,$yas) = split(/\|/,$i);
       print "<b>$adsoyad</b> Okul No: $okulno Yaş: $yas<br>\n";
       $bulunansayisi++;
   }
print "<br><b>$bulunansayisi</b> kayıt bulundu.<p>\n";
}
else {
   print "Kayıt Bulunamadı.<p>\n";
}

print "</body></html>\n";
Bu programı "ogrenci1.cgi" adıyla kaydedin. Şimdi sıra bu scripti çağıracak formu hazırlamaya geldi.
<form action="http://hammer.prohosting.com/~sinan/cgi-bin/ornek/ogrenci1.cgi">
Aradığınız kişinin ismini girin <input type="Text" name="isim"> </form>
Not: $#sonuclar @sonuclar dizisinin eleman sayısının bir eksiğini verir.
Formumuzdaki kutucuğa "Hasan" (tırnak koymadan) yazarsanız script size "Hasan Şahin" isimli öğrenciye ait bilgileri verir. Fakat, script kayıtları alan ayırımı yapmadan taradığı için isim yerine örneğin "15" (tırnaksız) yazarsak bize 15 yaşındaki ve okul numarasında 15 geçen öğrencilere ait bilgileri verir. Bunu hatayı gidermek için scriptimizi aşağıdaki şekilde değiştirmemiz gerekir.
#!/usr/bin/perl
$veridosyasi = "ogrenci.txt";
read(STDIN, $tampon, $ENV{'CONTENT_LENGTH'});
@ciftler = split(/&/, $tampon);

foreach $cift (@ciftler) {
   ($alanadi, $deger) = split(/=/, $cift);
   $deger =~ tr/+/ /;
   $deger =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
   $deger =~ s/~!/ ~!/g;
   $FORM{$alanadi} = $deger;
}

$arananmetin = $FORM{'isim'};

open(DOSYA,$veridosyasi);
@bilgiler = <DOSYA>;
close(DOSYA);
print "Content-type:text/html\n\n";
print "<html><head><title>Arama Sonuçları</title></head>\n";
print "<body><h3>Arama Sonuçları</h3>\n";

$bulunansayisi = 0;

@sonuclar = grep(/$arananmetin/,@bilgiler);

if ($#sonuclar >= 0) {
   foreach $i (@sonuclar) {
       chomp($i);
       ($kayitno,$okulno,$adsoyad,$yas) = split(/\|/,$i);
       if ($adsoyad =~ $arananmetin) {
          print "<b>$adsoyad</b> Okul No: $okulno Yaş: $yas<br>\n";
          $bulunansayisi++;
       }
   }
}

if ($bulunansayisi == 0) {
   print "Kayıt Bulunamadı.<p>\n";
}
else {
   print "<br><b>$bulunansayisi</b> kayıt bulundu.<p>\n";
}

print "</body></html>\n";
Not: if ($adsoyad =~ $arananmetin) satırı $arananmetin değişkenine atanan metnin, $adsoyad değişkenine atanan metnin içerisinde geçip geçmediğini bulmak için kullanılmıştır.
Bu örnekte $bulunansayisi isimli değişkenin değeri sadece aranan metin "isim" alanında bulunduğu zaman arttırılır. Eğer aranan metin "isim" alanında değil de örneğin "yaş" alanında bulunursa kayıt ekrana yazdırılmaz ve $bulunansayisi değişkeninin değeri arttırılmaz. Scriptin sonunda $bulunansayisi değişkeninin değeri kontrol edilir ve eğer 0'sa "Kayıt bulunamadı" mesajı yazdırılır.

Bölüm 8: Son Birkaç Söz

Eveeeet. Şimdi neler öğrendik bir gözden geçirelim. CGI nedir, nasıl çalıştırılır, Perl değişkenleri nelerdir ve nasıl kullanılır, form gönderme metodları nelerdir, aralarında ne gibi farklar vardır, web üzerinden gönderilen formlar nasıl okunabilir hale getirilerek e-mail adresine gönderilir, onay kutuları, radyo butonları ve seçim alanları bulunan formlar nasıl değerlendirilir, dosyalara bilgi nasıl yazılır, dosyalardan bilgi nasıl okunur, dosyalarda nasıl arama yapılır...
Ne çok şey öğrenmişiz değil mi? Gerçekten de birçok şey öğrendik, ama hala öğrenmemiz gereken şeyler öğrendiklerimizden çok daha fazla. Bu arada benim bu anlattıklarımdan fazla şey bildiğimi sanmayın. :) Hatta tercüme etmeye başladığımda daha az şey biliyordum diyebilirim çünkü tercüme ederken aynı zamanda öğrenmeye devam ediyordum.
Eğer başka kaynaklar arıyorsanız ilk bakacağınız yer olmalı. Burada zip formatında sıkıştırılmış birçok kitap var. Sanırım bu kitaplar size yeterli olur. Ama hazır scriptler ve daha başka kaynaklar arayanlar için ben yine de bildiğim diğer adresleri buraya yazıyorum.
http://www.worldwidemart.com/scripts/
http://www.lies.com/begperl/
http://agora.leeds.ac.uk/Perl/Cgi/start.html
http://www.xnet.com/~efflandt/pub/
http://cgi.resourceindex.com/rate/rated.html
http://www.speakeasy.org/~cgires/
http://www.eprotect.com/stas/TULARC/webmaster/cgi-scripts1.html

Bu son yazdığım adres tek kelimeyle harika bir yer. Tam 3 sayfa dolusu link var çünkü!
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 




 

 

 

 

 

 

 

 

 

 

 

Hiç yorum yok:

Yorum Gönder