Akış Denetimi ("Flow Control")
Yazılımsal veya donanımsal akış kontrolünün her ikiside, karşılıklı el sıkışma işleminin gerçekleşmesi için yazılıma ihtiyaç duyar. Bu durum yazılımsal akış kontrolünün bazı durumlarda yanlış anlaşılmasına neden olabilir.
Akış Denetimi, Giriş
Bir ağaçtan elma toplamaya çalıştığınızı düşünün ve size bu iş için yardım edecek bir de yardımcınız var. Yardımcınız ağaca tırmanıyor ve elmaları ağaçtan kopararak size toplamanız için tek tek veriyor. Sizde yardımcınızın verdiği elmaları sepetinize dolduruyorsunuz. Normal bir durumda, yardımcınızın size verdiği elmaları tek tek boş sepetinize dolduruyorsunuz. Ancak sepetiniz tamamen elmalar ile dolduğunda sizin dolu olan sepeti boşaltmanız yada boş bir sepet ile değiştirmeniz gerekiyor. Bu durumdayken yardımcınız size elma göndermeye devam ederse ne olur?
Bu durumda iki farklı sonuç oluşabilir. Yardımcınız siz sepeti boşaltana kadar veya yeni sepeti getirene kadar bekler, sonra göndermeye devam eder veya sizi beklemeden göndermeye devam eder ve yeni elmalar düşer.
Elbette siz yukarıda oluşacak olan sonuçlardan ilkini tercih edeceksiniz. Yardımcınız bir süre bekleyecek ve siz tekrar hazır olduğunuzda devam edecek. Bunu başarmak için yardımcınız ile iletişim halinde olmak zorundasınız. Yardımcınızla sesle ve göz temasıyla haberleşerek sizin uygun durumda olup olmadığınıza karar verebilecek. Bu senaryonun birbirleri ile seri haberleşen iki bilgisayar arasında olması durumunda, haberleşen iki bilgisayar arasında hiçbir bilgi kaybı yaşanmayacaktır.
Alıcının kendi bufferına bilgileri yazıp yukarıdaki şekilde kontrollü olarak gönderebilmesi için bazı olaylara ihtiyacı vardır. Bazı haberleşme metodlarında alıcı kişi gönderene, bufferının dolduğu durumlarda dur komutu göndererek yeni bilgi alımını durdurabilir. Bu akış denetimi sayesinde haberleşme kayıpsız ve kontrollü olarak gerçekleştirilebilir. Bunun sağlanması amacıyla, haberleşmede çeşitli donanım veya yazılım protokolleri tanımlanmıştır.
Yazılımsal akış kontrolü
Yazılımsal veya donanımsal akış kontrolünün her ikiside, karşılıklı el sıkışma işleminin gerçekleşmesi için yazılıma ihtiyaç duyar. Bu durum yazılımsal akış kontrolünün bazı durumlarda yanlış anlaşılmasına neden olabilir.
Donanımsal akış kontrolünde, haberleşmeyi sağlayan kablolara, el sıkışma prosedürlerinin gerçekleştirildiği yeni kablolar eklenir. El sıkışma prosedürü, yazılımsal olarak, bu yeni eklenen kablolar üzerinden gerçekleştirilir.
Yazılımsal akış kontrolünde ise, buna XON-XOFF akış kontrolüde denilir, akış kontrolü, mevcut haberleşme hattından gönderilen ve alınan bilgiler sayesinde gerçekleştirilir.
Donanımsal akış kontrolü, mevcut hatta eklenecek kablolar üzerinden gerçekleştirileceği için, hatta eklenecek olan kablolar bir ek maliyete neden olacak ve diğerine göre daha pahalı bir kablo seçimine sebep olacaktır. Yazılımsal akış kontrolünde bu ek kablo maliyeti yoktur ancak akış kontrolünün gerçekleştirilmesinde mevcut hat kullanıldığı için haberleşme hızı azalacak ve donanımsal akış kontrolüne göre daha küçük bir band genişliğine sahip olacaktır.
ASCII karakter setinde, yazılımsal akış kontrolünde kullanılması için 2 byte tanımlanmıştır. Bunların isimleri XON ve XOFF'dur. Bu karakterler, haberleşmeyi durdurmayı ve tekrar başlatmayı sağlarlar. XOFF karakterine karşılık gelen ondalık değer 19'dur, ayrıca CTRL + S tuş kombinasyonu ile bu karakter yaratılabilir. XON karakterine karşılık gelen ondalık değer ise 17'dir. CTRL+Q tuş kombinasyonu ile bu karakter yaratılabilir.
XON/XOFF protokolü alıcı tarafından haberleşmenin kontrol edildiği akış kontrolü metodudur. Tipik olarak alıcı eğer daha fazla bilgi alamayacak durumda ise karşıya XOFF karakteri göndererek iletişimi durdurur. Veri alımı için tekrar hazır olduğunda karşıya XON sinyali göndererek haberleşmeyi tekrar başlatır.
Bu metodun çeşitli dez avantajları bulunmaktadır. Birinci dezavantajından yukarıda bahsetmiştim. Birinci dezavantajı, mevcut bandgenişliğinin akış denetimi karakterleri nedeniyle azalmasıdır. Diğer dezavantajı ise daha acımasızdır. El sıkışma prosedürü genellikle alıcının bufferında üzerine yazma işlemini engellemek amacıyla kullanılmaktadır. Bufferın hafızası ise alınan bilgileri saklamak için kullanılmaktadır. Eğer üzerine yazma işlemi gerçekleşir ise yeni gelecek olan bilgiler, önceden alınmış bilgileri etkileyeceklerdir. Eğer XON/XOFF karakterleri alıcı tarafından göndericiye ulaştırılamazsa veya bu karakterler kaybolursa iletişim tamamen imkansız hale gelecektir. XOFF karakteri kaybolursa, gönderici hala bilgileri göndermeye devam edecek ve yeni gelen bilgiler kaybolacak veya eski bilgiler yok olacaktır. Eğer XON karakteri kaybolursa, gönderici henüz bilgiyi almadığı için hatta herhangi bir bilgi göndermeyecektir. Bu nedenlerle gönderici ve alıcılar sürekli birbirlerini denetlemek zorundadırlar. Ayrıca XON/XOFF protokolü, sadece full duplex iletişim hatlarında kullanılabilmektedir.
Bu durum özellikle gürültülü olan iletişim hatlarında meydana gelmektedir. Eğer XON veya XOFF karakterlerinden herhangi biri hattaki gürültü yüzünden ulaşması gereken yere ulaşmaz ise ne olur? Bu durumun engellenmesi için özel önlemlerin alınması gerekir. Çünkü bu komutların ulaşıp ulaşmadıkları protokol üzerinde denetlenmemektedir. XON ve XOFF karakterleri, aktarılması istenilen asıl bilgiden ayrılarak, bilgilendirme byte'ları olarak gönderimelidirer.
Sonuç olarak, yazılımsal akış kontrolü sadece haberleşme hızının yüksek olmadığı ve buffer üzerine yazma veya bilgilerin fiziksel olarak kaybolma risklerinin az olduğu yerlerde kullanılabilir bir akış denetimi metodudur.
Donanımsal akış kontrolü
Donanımsal akış kontrolü, yazılımsal akış kontrolüne göre çok daha üstündür. Ancak en büyük sorun, mevcut hattın yanına, el sıkışma prosedürlerini gerçekleştirmek ve akış denetimini sağlamak amacıyla yeni kabloların eklenmesidir.
Donanımsal akış kontrolüne RTS / CTS akış kontrolü'de denilir. Bu terimler, seri cihaz üzerinde el sıkışma prosedürünü gerçekleştiren giriş çıkış pinlerinin isimleridir. Bu protokolün gerçek çıkış amacı, PC ile PC'ye bağlanacak seri cihaz arasındaki el sıkışma prosedürlerinin gerçekleştirilmesinde kullanılmasıdır.
Haberleşmenin başlangıcında, bilgisayar RTS hattını aktif hale getirerek bilgi göndermek istediğini iletir ve CTS pinini kontrol ederek alıcının cevabını bekler. Eğer alıcı bilgi alımı için uygunsa CTS hattını aktif hale getirerek vericinin isteğini kabul eder ve haberleşmeyi başlatır. Eğer NULL modem bağlantısı kullanılacak ise durum biraz daha farklıdır.
Her iki uçda da RTS'ler diğer ucun CTS'sine bağlanır. Bu durumda, haberleşme protokolü orjinal haberleşme protokolünden biraz daha farklıdır. RTS çıkışı olan bir A bilgisayarı ve B bilgisayarı düşünelim. A, RTS protokolü olmadan bilgi alabilme kabiliyetine sahip olmalıdır. Bu tip haberleştirmeyi gerçekleştirebilmek için NULL modem kablosu kullanılır. Bu kablo kullanıldığında elbette orjinal protokolün sağladığı el sıkışma protokolü kullanılmamış olacaktır. Bu tip bir bağlantıda, haberleşme hızı oldukça hızlı olacaktır.
N
ULL modem ile donanımsal akış denetimi ile birlikte haberleşebilmek için bir diğer çözüm ise RTS ve CTS uçlarının direk bağlantısıdır. Bunun anlamı istek ve cevap aynı cihaz tarafından alınır ve verilir. RTS çıkışı set edildiği anda CTS girişi RTS'yi tespit eder ve veri alımına izin verir. Burada, bilgi denetlenmeden anında gönderilmiş olur. Bunu engellemek için DRS ve DTR pinleride kullanılmalıdır. Bu iki pin cihazın doğru bağlandığını ve alınacak bilgiler için doğru bir durumda olduğunu denetler. Bu iki hat çapraz bağlandığında, akış kontrolü bu iki pin üzerinden gerçekleştirilir. Alıcı bilgisayar gelen karakterleri kabul ettiğinde DTR çıkışı set edilir.
Orjinal RS232 Kullanımı
Bilgisayar üzerindeki RS232 portu incelendiğinde, akış denetimi için 2 adet pinin ayrıldığı görülmektedir. Bunlar RTS (Request to send) ve CTS (clear to send) pinlerindir. DTE/DCE (DTE-Data terminal equipment, Bilgisayar… , DCE-Data communication equipment, Modem…) haberleşmesinde (örneğin bilgisayar ile modem haberleşmesi) RTS DTE üzerinde çıkış, DCE üzerinde ise giriş olarak görev sürdürmektedir. CTS ise DCE'den gelen sinyalin cevaplandığı pindir.
Hat üzerinden bilgi göndermeden önce bilgisayar RTS çıkışını set ederek izin ister. Modem CTS üzerinden cevap verinceye kadar, bilgisayar herhangi bir bilgi aktarımı gerçekleştirmez. Eğer modem yeni gelen isteğe onay vermez ise CTS sinyali düşük seviyeye çekilir. Oldukça basit ama tek yönlü kullanışlı bir akış denetimi metodudur. Burada varsayılan, bilgisayar, her zaman DCE'nin gönderme süresinden daha kısa bir sürede cevap alabilmektedir. Geçmişte bu durum doğrudur çünkü modemin hızı 300 baud ve hızlı bağlantı için 1200 baud kullanılmaktadır.
Daha ileri seviyede bir akış denetimi için, her iki cihazda karşı tarafdaki sinyallerinin durumlarından da haberdar olmaktadırlar. Bu amaçlar DTR (Data terminal ready) ve DSR (Data set ready) pinleri yerleştirilmiştir. Bilgisayar DTR sinyalini kullanarak bilginin alım için hazır olduğunu, modem ise DSR sinyalini aynı amaç için kullanmaktadır. Bu sinyallerin kullanımı RTS/CTS el sıkışmasında olduğu gibi istek ve cevaplama için küçük bir protokol değildir. Bu sinyaller sadece tek yönlü gerçekleştirilmektedir.
Akış denetiminde kullanılan son sinyal ise CD (Carrier detect)'dir. Bu direk olarak akış denetmi amacıyla kullanılmamaktadır. Bu modemin sayıcı bölümü ile modemin haberleşmesini sağlayan sinyaldir. Bu iki modem arasında haberleşme linkinin olduğunu anlamalarını sağlayan haberleşme pinidir.
Anlaşmasız Null Modem
Null modem konfigürasyonu ile haberleşme oldukça basittir. Seri haberleşme protokolü üzerinden el sıkışma prosedürleri olmadan haberleşmek için sadece bligisayar ve modemin RX ve TX uçlarının birbirleri ile çapraz bağlanması yeterlidir. El sıkışma prosedürleri olmadan gerçekleştirilmesi gereken kablo bağlantı şekli aşağıda verilmiştir.
El sıkışma prosedürü olmayan Null Modem Bağlantısı
Konnektör 1 | Konnektör 2 | Fonksiyon | ||
2 | 3 | Rx | ← | Tx |
3 | 2 | Tx | → | Rx |
5 | 5 | Signal ground |
Uyumluluk Sorunları
Oldukça basit görünen bu bağlantıda, taraflardan herhangi biri DSR veya CD pinlerini kullanıyorlarsa, haberleşme gerçekleşemez. Bu sinyaller normalde karşı taraftaki cihaz ile haberleşmek için kullanılmaktadırlar. Bunlar bağlı olmasıklarından, bu pinler üzerindeki sinyal seviyeleri hiçbir zaman yukarıya çekilmeyeceklerdir. Bu da probleme neden olacaktır.
Benzer durum RTS/CTS el sıkışma prosedürü için de geçerlidir. Taraflardan herhangi birinde bu el sıkışma prosedürü kullanılıyor ise taraflar haberleşemeyecekledir. RTS çıkışı yukarı çekildiğinde, CTS hattından karşı tarafın hazır olduğuna dair cevap bekleyecektir. Aralarında fiziksel bir bağlantı olmadığı için aslında haberleşme hattı (RX TX) bağlantısı gerçekleştirilmiş olmasına rağmen taraflar haberleşmeyeceklerdir.
Yukarıda bahsettiklerim, yukarıdaki şekilde gerçekleştirilecek olan Null modem bağlantısının kullanışsız olduğu anlamına gelmemektedir. Örneğin Norton commander programında haberleşme için kullanılan Null modem kablosu bağlantısı bu şekilde gerçekleştirilmektedir. Örneğin, seri haberleşme protokolü kullanarak haberleşen, modem kontrol sinyallerini kullanmayan bir çok cihaz bu bağlantı şeklini kullanmaktadır.
Donanımsal akış denetimini kullanmayan cihazlar bu bağlantı şeklinde çalışabilirler. Yazılımsal XON/XOFF akış denetimi metodunu kullanarak haberleşen cihazlar bu bağlantı şeklinde akış denetimini gerçekleştirerek haberleşebilirler.
Loop Back Anlaşmalı Null modem
Loop back handshaking kablosu, donanımsal olarak akış denetiminin gerçekleştirildiği yazılımları kandırma amacıyla kullanılmaktadır. Bu kablo ile aslında hiçbir el sıkışma protokolü kullanılmamasına rağmen, donanımlar el sıkışma prosedürlerini gerçekleştirdiklerini düşünürler.
İyi yazılmış bir yazılım ile bu bağlantı şekli kullanılarak problemsiz haberleşme gerçekleştirilebilir. Kablo bağlantı şekli aşağıda verilmiştir.
Loop back anlaşmalı Null modem bağlantısı
Konnektör 1 | Konnektör 2 | Fonksiyon | ||
2 | 3 | Rx | ← | Tx |
3 | 2 | Tx | → | Rx |
5 | 5 | Signal ground | ||
1 + 4 + 6 | – < /td> | DTR | → | CD + DSR |
– | 1 + 4 + 6 | DTR | → | CD + DSR |
7 + 8 | – | RTS | → | CTS |
– | 7 + 8 | RTS | → | CTS |
Bu kablonun asıl amacı, yazılımın donanımsal akış denetimini gerçekleştirdiğini düşünerek haberleşmenin akış kontrolü olmadan gerçekleştirilmesini sağlamaktır.
Uyumluluk Sorunları
Birinci DSR pinine bakalım (pin 6). Bu giriş diğer tarafın haberleşmeye başlamak için hazır olduğunu gösteren sinyal hattıdır. Çizim incelendiğinde, DSR girişinin DTR (pin4) çıkışına bağlantığı görülmektedir. Bunun anlamı, haberleşmeyi kullanan yazılım karşıdaki cihazın hazır olup olmadığını göremez, hazır cevabını kendisi üretir. Aynı bağlantı CD (pin1) için de gerçekleştirilmiştir.
Benzer aldatma CTS girişi için de gerçekleştirilmektedir. Orjinal kullanımda RTS ayarlanır ve CTS kontrol edilerek haberleşmenin başlatılması denetlenir. RTS'nin çıkış olduğu (pin 7) ve CTS'nin (pin 8) giriş olduğu konnektörde denetleme anında gerçekleştirilir. Yazılımın denetlemenin herhangi bir noktasında takılıp kalma ihtimali yoktur.
Dikkat Edilecek Diğer Hususlar
Yukarıda anlatıldığı şekilde kullanılan kablo ile gerçekleştirilecek bağlantı kullanışlı ancak amacına yönelik değildir. Kandırdığınız yazılım donanımsal akış denetimi gerçekleştirmesine rağmen aslında taraflar arasında hiçbir kontrol gerçekleştirilmemiştir. Haberleşme hızının sınır değerlerine ulaştığı noktalarda, alıcı olan bölüm haberleşmeyi denetlemek ve durdurmak istediğinde bu işlemi gerçekleştiremeyecek ancak gerçekleştirdiğini zannedecektir. Bu nedenle veri kayıpları oluşacaktır.
Bu uyarı ve yukarıda bahsedilen dezavantajlarına rağmen, bu tip kablo Windows 95/98/ME işletim sistemi yüklü olan bilgisayarlarda direk kablo bağlantısı biçimindeki haberleşmede başarılı olarak kullanılmaktadır.
Kısmi Anlaşmalı Null modem
Donanımsal akış denetimi yapan cihazlar arasında kullanılacak olan en basit null modem kablosunun Loop back kablosu olduğu doğrudur, ancak hiçbir akış denetimi gerçekleştirilmemektedir. Eğer haberleşme esnasında akış denetimi gerçekleştirilmesi istenirse Kısmi anlaşma kablosu, tam anlaşma kablosuna alternatif olarak kullanılabilir.
Kısmi anlaşmalı Null modem bağlantısı
Konnektör 1 | Konnektör 2 | Fonksiyon | ||
1 | 7 + 8 | RTS2 | → | CTS2 + CD1 |
2 | 3 | Rx | ← | Tx |
3 | 2 | Tx | → | Rx |
4 | 6 | DTR | → | DSR |
5 | 5 | Signal ground | ||
6 | 4 | DSR | ← | DTR |
7 + 8 | 1 | RTS1 | → | CTS1 + CD2 |
Uyumluluk Sorunları
Bu kablo iki dünyanın en iyisidir. DTE/DCE arasında kullanılan akış denetiminin uygunsuz olarak gerçekleştirilmeden sağlandığı bağlantı şeklidir. 7 ve 8 numaralı RTS/CTS akış denetimi pinlerine dikkat edelim. Loop back bağlantısında bu pinler karşıdaki cihaza bağlanmamışlardır. Bunun anlamı, RTS/CTS kontrolü sadece yazılım içerisinde gerçekleştirilmektedir, fiziksel olarak hiçbir kontrol gerçekleştirilmemiştir. Sadece, karşı tarafdaki yazılım CD (pin 1) pinindeki sinyali kontrol etmek istediğinde, RTS mesajı karşı tarafa iletilmiş olacaktır. Bu, CD girişini, bu amaç için kullanarak geliştirilen yazılımlar tarafından kullanışlıdır.
En önemli nokta ise DSR (pin 6) ve DTR(pin 4) pinlerinin çapraz olarak bağlanmış olmasıdır. Çapraz bağlanmış bu hatlar, orjinal kullanımlarını bire bir simüle etmektedirler. DTR çıkışı, diğer cihaz ile haberleşmenin mümkün olup olmadığı amacıyla kullanılmaktadır. Bu bilgi DSR girişinde okunmaktadır ve bu giriş aynı zamanda modem ile haberleşme amacıyla da kullanılmaktadır. Bu bağlantı şeklinin kullanım amacı, DTR çıkışı hattı basit bir akış denetimi amacıyla kullanılmaktadır. Bilgi alımı için, eğer çıkış set edilmişse izin verilir, eğer edilmemiş ise bloke edilir.
Kısmi anlaşmalı bağlantı RTS/CTS protokolünü akış denetimi için kullanan yazılımlar için avantajlı bir bağlantı tipi değildir. Çünkü bu protokolü kullanan yazılımların büyük çoğunluğu, DSR hattınıda kullanarak akış denetimi gerçekleştirmektedirler. Bu nedenle, donanımsal akış denetimi gerçekleştiren modemlerde kısmi değil, tam bağlı bağlantı şekli tercih edilmektedir.
Tam anlaşmalı Null modem
En pahalı bağlantı şekli, tam anlaşmalı kablo bağlantı şeklidir. Bu bağlantıda toplam 7 adet kablo kullanılmaktadır. Sadece RI (ring indicator) ve CD (Carrier detect) pinleri kullanılmamaktadır. Bağlantı şekli aşağıda verilmiştir.
Tam anlaşmalı null modem bağlantısı
Konnektör 1 | Konnektör 2 | Fonksiyon | ||
2 | 3 | Rx | ← | Tx |
3 | 2 | Tx | → | Rx |
4 | 6 | DTR | → | DSR |
5 | 5 | Signal ground | ||
6 | 4 | DSR | ← | DTR |
7 | 8 | RTS | → | CTS |
8 | 7 | CTS | ← | RTS |
Uyumluluk sorunları
Bu bağlantı şekli eski akış denetimini metoduna uyumlu değildir. Ana uyumsuzluk RTS ve CTS pinlerinin çapraz bağlantısından kaynaklanmaktadır.
Orjinalinde bu pinler soru/cavp mekanizması için kullanılmaktadır. Tam anlaşmalı null modem kablosu kullanıldığında, herhangi bir ek isteğe gerek kalmamaktadır. Bu hatlar tamamiyle karşı tarafa haberleşmenin mümkün olup olmadığını sorgulamak amacıyla kullanılmaktadır.
Bu bağlantı şeklinin ana avantajı, her yönde iki sinyal hattının olmasıdır. RTS ve DTR çıkışlarının her ikiside diğer cihaza akış denetimi bilgilerinin gönderilmesi için kullanılmaktadır. Bu bağlantı şekli, çok yüksek hızda kusursuz veri alışverişine olanak sağlamaktadır. Yüksek bağlantı hızı sayesinde MS-Dos işletim sistemi olan iki bilgisayar bu bağlantı şekli ile kolaylıkla haberleşebilirler.
Null modem Bağlantı Seçim Tablosu
Null modem kablosu seçimi bir çok yan kritere bağlıdır. Genel olarak sizlere yardımcı olabilmesi için aşağıdaki tablo hazırlanmıştır.
Null Modem Kablonuzu Seçin | ||||
| Anlaşmasız Kablo | Loop back | Kısmi Anlaşmalı Kablo | Tam Anlaşmalı Kablo |
Sadece yazılımsal akış denetimi | +++ | ++ | + | + |
Düşük hızlarda DTE/DCE uyumlu donanımsal akış denetimi | – | +++ | ++ | – |
Yüksek hızlarda DTE/DCE uyumlu donanımsal akış denetimi | – | + | +++ | – |
Özel yazılımlar kullanarak yüksek hızlı veri iletimi | – | – | ++ | +++ |
+++ | Tavsiye edilen |
Kısmi anlaşmalı kablo bir çok uygulamada kullanılabilmektedir. Eğer yazılım geliştiriyorsanız, geliştirmekte olduğunuz yazılım tüm kablolar ile çalışabilmelidir. Bu sepeble akış denetimini kullanmak istiyorsanız, yazılımsal akış denetimi kullanarak, hiçbir modem kontrol sinyaline ihtiyaç duymadan, çalışabilirsiniz.
Referanslar
Derleyen ve Hazırlayan
Tolga TAŞTAN
tolga@aadf.net