Bilgisayar mühendisi udp ile tcp farkını bilmek zorunda değil.
Neden bilmek zorunda oldugunu abstraction leak üzerinden anlatayim.
Evet, cogu zaman bilmek zorunda degil. Ama bilmesi gerektigi an geldiginde ve bu farki bilmediginde, gerekeni yapamaz ya da cözüm üretemez ya da sorunu cözemez.
OSI (Open Systems Interconnection) modeli ag iletisimi 7 katmana ayirir. En tepede uygulamanin kendisi vardir, asagiya indikce yapi somutlasir. Üst katmanlara ciktica soyutlama neticesinde alt katmanda ne oldugunu bilmeden kullanim kolaylasir.
Joel Spolsky söyle diyor abstraction leak konusunda:
> All non-trivial abstractions, to some degree, are leaky.
Bunun en güzel örnegi bir sistemin baska bir sisteme erismek icin alabilecegi Timeout hatasidir.
Programci altta ne olup bittigini bilmeden:
> socket.send(data);
islemi gerceklestirir. Bu OSI’nin en tepesindeki soyutlamadir ve ag icinde su islemler gerceklesiyor olabilir:
– Paketler kaybolabilir
– Retransmission gerekebilir
– ACKlar gecikmeli gelebilir
Yani kisaca send() metodu karsi tarafindan gönderilen verileri aldigini garantisi degildir.
Ama aniden timeout gelmeyen basladiginda programcinin muhattap olacagi konular söyledir:
– Tcp mi udp mi
– RTT (Round Trip Time)
– Retransmission timeout
– Sliding Window
– Congestion Window
Ne oldu? Artik soyutlama seviyesini terk edip, alt katmanin somut detaylari ile ugrasmak zorunda kaldik. Yani asagidan yukariya dogru soyutlik sizintisi oldu.
Soru su: hangi mühendis burada daha etkin olacaktir?
a.) Tcp ile udp arasindaki farki bilen
b.) Tcp ile udp arasindaki farki bilmeyen
Burada tcp ve udp aslinda bir metafor. Bu konulari incelemis bir yazilimci aslinda OSI’nin ne oldugunu, aglarin nasil isledigini ve karsilastigi sorunlari nasil cözebilecegini bilen birisidir.