Neden TCP Düşüncelerini UDP Üzerine Uygulamamalısınız?
Categories:
- Neden TCP Düşüncelerini UDP Üzerine Uygulamamalısınız?
Neden TCP Düşüncelerini UDP Üzerine Uygulamamalısınız?
Yapısal Farklılıklar


TCP’de birçok kavram bulunur: yol kurma, kaynak kullanımı, veri iletimi, güvenilir iletim, tekrarlı kümülatif onay temelli yeniden gönderim, zaman aşımı yeniden gönderimi, doğrulama toplamı, akış kontrolü, tıkanıklık kontrolü, maksimum segment boyutu, seçmeli onay, TCP pencere ölçeklendirme seçeneği, TCP zaman damgası, zorunlu veri teslimi, yol sonlandırma.
Bu yeteneklerin tamamına yakını UDP’de yoktur; sadece veri linki katmanından biraz daha fazla uygulama katmanı hedef ayrımı sağlar. UDP yeterince basittir ve bu da ona yeterince esneklik kazandırır.
Eğer Olasıysa, Kesinlikle Gerçekleşir
Murphy Yasası:
Bir şeyi yapmanın birden fazla yolu varsa ve bu yolların biri felakete yol açacaksa, birisi bunu kesinlikle yapacaktır.
Genellikle UDP’nin oyun/ses/video vb. senaryolarda kullanılması gerektiği söylenir ve az miktarda hatalı paket iş akışını etkilemez. Neden UDP bu senaryolar için uygundur? Bu senaryolarda kullanılabilir olması, en iyi çözüm olduğu anlamına gelmez; TCP’nin çözemediği sorunların olması, bu hizmetlerin basit UDP protokolünü seçmesine neden olur. Hatalı paketlerin iş akışını etkilememesi, TCP’nin hatalı paketleri önemsemediği ve UDP’nin hatalı paketleri önemsememesi, bunun yerine gerçek zamanlılık/süreklilik üzerinde durması anlamına gelir. UDP’nin özelliği, TCP’nin önemsemeyeceği faktörler üzerinde durmamasıdır ve bu faktörler gerçek zamanlılığı etkiler.
Kod implementasyonunda, UDP sadece bir soket oluşturmayı ve bir porta bağlanmayı gerektirir; ardından iletişim kurmaya başlayabilir. Genellikle soket kullanıldıktan sonra, port da bitmiştir.
Bu yüzden UDP’yi şu şekilde kullanabilirim:
- Rastgele bir IP’nin rastgele bir portuna rastgele paketler gönderip hangi portun yanıt verdiğini görmek
- A portundan B portuna istek paketini gönderen A; C portundan D portuna yanıt paketini gönderen B
- A portundan B portuna istek paketini gönderen A; C portundan D portuna yanıt paketini gönderen B’nin vekili C
- A portundan B portuna istek paketini gönderen A; ancak paketin kaynağını C’nin IP’si olarak değiştiren A, B yanıt paketini C’ye gönderecektir.
- Taraflar, her biri 10 UDP portu kullanarak aynı anda alma ve gönderme yapmayı görüşür
Bu yöntemler TCP’de doğal olarak işe yaramaz, ancak UDP protokolünde bunu yapabiliyorsanız, bunu yapacak biri mutlaka olacaktır. Bu yüzden TCP’nin bazı düşüncelerini UDP’ye uygulamak idealizmdir; gerçek durumlar genellikle tam olarak listeyebileceğimiz kadar basit değildir.
UDP paketleri çok basittir ve kullanımı da çok esnektir; aslen bağlantı kavramı yoktur ve UDP bağlantısını kendiniz tanımlamanız gerekir. Bağlantı yönü tanımlama niyetini tam olarak karşılayamayan çeşitli tanımlama yöntemlerini denedim; bu durumda bir miktar hata toleransı kabul etmek gerekir, zira aslen UDP bağlantısı tanımı yoktur ve taraflar UDP bağlantısı tanımında aynı fikirde olmadığında, davranışların beklentinin aksine olması kaçınılmazdır.
UDP’ye İstemci Açısından Bakış
Ses/video vb. işlerde sık sık paket kaybı olur, ancak paket kaybı farklı şekillerde gerçekleştiğinde işe farklı etkileri olur. Örneğin %30’luk bir paket kaybı, eşit bir şekilde mi yoksa belirli bir zaman diliminde mi gerçekleşir, deneyim üzerinde belirgin bir fark yaratır. Açıkçası, daha eşit bir paket kaybı bekleriz. Ancak UDP’de akış kontrolü önlemi yoktur, bu yüzden paket kaybı bazı yöntemlerle ele alınabilir. UDP iletişimini genellikle “mümkün olduğunca” olarak tanımlarız, ancak farklı “mümkün olduğunca” yaklaşımları farklı etkiler elde eder.
UDP’ye Hizmet Sağlayıcı Açısından Bakış
TCP saldırısı durumunda, istemcinin bir miktar maliyeti olur; bağlantı oluşturmak, bağlantıları korumak, yani saldırganın belli bir bedel ödemek zorunda kalması gerekir. Ancak UDP saldırısında, saldırganın ödediği bedel çok daha azdır; eğer saldırgan sadece hizmet sağlayıcının bant genişliğini tüketmek istiyorsa, UDP çok iyi bir yoldur. Örneğin, hizmet 100GB sınırsız bant genişliği satın alır, ancak işleyebilme kapasitesi sadece 10MB/s, ancak alma hızı 1GB/s ise, bu durumda istek trafiğinin %90’ı etkisiz olur, ancak bu trafikler ücretsiz değildir. Hizmet sağlayıcı bu durumun oluşmasını önlemelidir.
UDP’ye Operatör Açısından Bakış
Bir iletişim tamamlamak birden fazla terminal ve iletişim kanalı gerektirir; genellikle hizmet sağlayıcı ve istemciye odaklanılır, ancak operatörün bakış açısı da aynı derecede önemlidir. DDoS saldırılarında genellikle hizmet sağlayıcının kaynak tüketimine odaklanırız; ancak operatörün de sınırlı kaynakları vardır. Hizmet sağlayıcı basitçe isteği yanıtsız bırakabilir, ancak trafiği almak zaten bant genişliğini tüketmiştir; sadece bu kaynak genellikle operatöre aittir. Biz basın testinde genellikle “paket kayıp oranı” endeksi kullanırız; bu endeks tam iletişim zincirindeki paket kaybını ifade eder, sadece hizmet sağlayıcının paket kaybı değildir. Operatörler de paket kaybı yaşar. Operatör açısından bakıldığında, hizmet sağlayıcı sadece 1MB/s bant genişliği satın almıştır, ancak istemci 1GB/s hızla gönderim yapar; her iki taraf da harcanan trafik için ücret ödemek zorunda değildir; bu bant genişliği maliyeti operatör tarafından karşılanır. Bu yüzden operatörler bu tür trafiği engellemek için mutlaka bir yol bulur, yani UDP’nin QoS’u. TCP’de tıkanıklık kontrolü vardır, ancak UDP’de operatörler paket kaybıyla trafiği kontrol edebilir. Gerçek durumlarda operatörler daha basit ve kaba bir yöntem izler; uzun süre kullanılan portların trafiğini doğrudan engeller, yani UDP portu engelleme. WeChat arama testlerinde, her aramada istemcinin birden fazla port kullandığı, bunlardan birinin aynı sunucunun 6 UDP portuyla iletişim kurduğu görülmüştür; bunun operatörün port engelleme uygulamasına应对 (karşı koymak) amacıyla yapıldığı tahmin ediliyor.
Özet
UDP’nin esnekliği, bir hedefe ulaşmak için birden fazla yolu olduğu ve bunların hepsinin yasal olduğu anlamına gelir; sonunda istikrarlı bir iletişim sağlayabildiği sürece, TCP’den ne kadar farklı olursa olsun “var olan her şey mantıklıdır”. Bu yüzden TCP kavramlarını UDP üzerine tamamen uygulayamayız; ürün tasarımına yardımcı olmak için yeni bir UDP bağlantı tanımı yaratmış olsak bile, hataların oluşabileceğini öngörmeli ve kabul etmeliyiz; zira “hatalara izin vermek” UDP’nin temel işlevlerinden biridir, bu bir eksikliği değil, bir avantajıdır; hizmetin aktif olarak seçtiği protokol temel yeteneğidir ve zorunlu olarak kabul edilen bir eksiklik değildir.
Daha Fazla Okuma
- 20.000 kelime ile QoS prensiplerini öğrenin
- İletim Kontrol Protokolü
- Kullanıcı Veri Dökümü Protokolü