SCTP neden çok kullanılmıyor / bilinmiyor


190

Kısa bir süre önce Richards Stevens'ın "UNIX Network Programming, Cilt 1" kitabına baktım ve TCP ve UDP: SCTP'nin yanında üçüncü bir taşıma katmanı standardı olduğunu gördüm .

Özet: SCTP, UDP gibi mesaj güdümlü ancak TCP gibi güvenilir bir aktarım düzeyi protokoldür. İşte olan IBM developerWorks'deki kısa tanıtım .

Dürüst olmak gerekirse, daha önce hiç SCTP duymadım. Herhangi bir ağ kitabında okuduğumu veya aldığım derslerde duyduğumu hatırlayamıyorum. SCTP'den bahseden diğer yığın akışı sorularını okumak , bu bilgi eksikliğinden yalnız olmadığımı gösteriyor.

SCTP neden bu kadar bilinmiyor? Neden fazla kullanılmıyor?


4
+1 hiç duymadı - teşekkürler.
Robert Venables

1
Herkes SCTP'yi ZeroMQ ile karşılaştırmaya önem verir (birinin protokol olduğu, diğeri kütüphane olduğu - problemleri çözmek için onlara bir araç olarak bakın).
Emil Ivanov

Sadece merak ediyorum: 3/1/2013 tarihinde yanlış / farklı olan nedir? Neden bir günde bu kadar çok oy?
Mart'ta dmeister

8
@dmeister: Çünkü seni Reddit'e koydum . Darmstadt'tan selamlar.
Janus Troelsen

32
Lütfen 3/1/2013 yazmayın. "1 Mart 2013", "1-Mart-2013", "1 Mart '13" ..'ten herhangi biri tercih edilir. Sadece ay ve ay gününü yanlış yorumlanabilecek şekilde yazmayın.
Zecc

Yanıtlar:


94

Aslında, SCTP çoğunlukla telekom alanında kullanılmaktadır. Geleneksel olarak, telekom anahtarları telekom ağındaki farklı varlıkları birbirine bağlamak için SS7 ( Sinyal Sistemi No. 7 ) kullanır. Örneğin - telekom sağlayıcısının abone veri tabanı (HLR), bir anahtar (MSC) ile abone de bağlanır (MSC).

Telekom alanı daha yüksek hızlara ve daha ulaşılabilir bir ortama ilerliyor. Bu değişikliklerden biri, SS7 protokolünü daha zarif, hızlı ve esnek IP tabanlı bir protokolle değiştirmektir.

Telekom alanı çok muhafazakar. SS7 ağı onlarca yıldır burada kullanılıyor. Çok güvenilir ve kapalı bir ağdır. Bu, normal bir kullanıcının ona erişimi olmadığı anlamına gelir.

Buna karşılık IP ağı açıktır ve güvenilir değildir ve en azından SS7'nin taşıdığı yükü işlemezse telekomlar ona dönüşmez. Bu yüzden SCTP geliştirildi. Deniyor:

  • on yıllardır biriken SS7 ağının tüm avantajlarını taklit etmek.
  • , güvenlik ve yedeklilik bakımından TCP'den daha iyi bir bağlantı odaklı protokol oluşturmak

Linux'un son sürümlerinde zaten SCTP desteği var.


özellikle IETF'in SS7 ve SCTP arasındaki eşlemeyi yazan "SIGTRAN" çalışma grubunun çıktısına bakmalısınız.
Alnitak

22
Muhtemelen SCTP'nin halka açık internette çok kullanılmamasının ana nedeni, konut IPv4 / NAT ağ geçitlerinin, birden fazla eşzamanlı özel uç nokta ile dış ana bilgisayarlar arasındaki çoğullama ilişkilerini desteklemek için SCTP farkında olması gerektiğidir. IPv6 geçişi daha fazla buhar almaya başladığında SCTP'nin daha kullanışlı olmasını sağlayın.
james woodyatt

@jameswoodyatt SCDP'nin UDP üzerinden kütüphane uygulamaları vardır. Tüketici sınıfı yönlendiricilerle ilgili bazı sorunları çözer.
user7610

1
Bu soruya hiç cevap vermiyor. James'in yanıtı, cevabın gerçekte verdiğinden daha fazla bilgi içeriyor.
Ken Sharp

@jameswoodyatt Her şeyle uğraştığım tüketici sınıfı yönlendiriciler, bazı oldukça eski olanları bile destekliyor. Sorun şu ki, düzenli kullanıcı arayüzü ile karşılaşılmıyor, bu yüzden onu yapılandırabileceğiniz yere ulaşmak için sisteme korkunç şeyler yapmanız gerekiyor. Bence bir gözetim.
Perkins

70

SCTP'yi şu anda çeşitli uygulamalarda kullanıyoruz ve çeşitli ev yönlendiricilerindeki SCTP desteği ile ilgili önemli bir sorunla karşılaştık. SCTP'yi doğru şekilde işlemezler. Bunun öncelikle bir performans sorunu olduğuna inanıyorum (SCTP protokol belirtimi, yalnızca üstbilgiler için değil, tüm paketlerin yeniden hesaplanması için sağlama toplamı gerektirir).

Diğer pek çok umut verici protokol gibi, D-link ve Netgear kırık NAT kutularını düzeltene kadar SCTP suda ne yazık ki ölüyor.


7
Vay canına, bu giriş engelinin farkında değildim. Tamamen haklısınız - bunun için önerilen bir yol için tools.ietf.org/html/draft-ietf-behave-sctpnat-05 adresine bakın . Bu aynı konuyla ilgili 3. İnternet Taslakları
setidir

En azından ev yönlendiricileri için oldukça karamsar geliyorsun. Profesyonel üretim ortamlarında kullanılan yönlendiricilerin bunu desteklediği varsayılarak, SCTP hala çok yararlı görünüyor. Ağ topolojilerinin veri merkezinin tesislerini terk etmediği birçok kullanım durumu vardır, bu durumda SCTP mükemmel olmalıdır.
Eugene Beresovsky

4
@EugeneBeresovksy: Bu cevabı gönderdiğimden birkaç yıl sonra. Benim izlenimim, o zamandan beri SCTP'nin önemli ilerleme kaydetmediği. Hala kontrollü ortamlarda birkaç özel uygulamada kullanılmaktadır, ancak nadiren vahşi doğada görülür. Windows ve Mac OS X hala kutunun dışında SCTP desteğinden yoksundur. Çoğu güvenlik duvarı ve NAT kutusu tarafından kırılan bir protokolün aşinalık eksikliği ve kırılganlığı insanları kullanmakta isteksiz hale getirir.
pehrs

@pehrs Bir veri merkezi içinde kullanmak istiyorum, bu yüzden herhangi bir NAT dahil değil ve OS yerleşik olanlar dışında güvenlik duvarı yok. Bir Linux sunucu ortamında, umarım sadece çalışır. Ama Windows'u kullanırken bile, SCTP kütüphaneleri var - ve işletim sistemi ile uğraşmak zorunda kalmadan inanıyorum.
Eugene Beresovsky

SCTP, evlat edinme eksikliği nedeniyle genellikle Linux'ta etkinleştirilmez, ancak Ubuntu Precise (eski) sistemimde bile yüklenebilir bir modül olarak kullanılabilir. SCTP kullanmak isteyen ancak TCP'ye geri dönen bir uygulama (örneğin) çift yığınlamaya benzer, ancak daha acı verici bir sorundur.
Ken Sharp

55

SCTP, uygulama içinde en iyi şekilde yararlanmak için daha fazla tasarım gerektirir. TCP'den daha fazla seçenek var, Sockets benzeri API daha sonra geldi ve genç. Bununla birlikte, bunu anlamak için zaman ayıran (ve TCP'nin eksikliklerini bilen) çoğu insanın bunu takdir ettiğini düşünüyorum - 30 yıllık TCP ve UDP bilgimizi temel alan iyi tasarlanmış bir protokoldür.

Biraz düşünmeyi gerektiren yönlerden biri de akarsulardır. Akışlar (genellikle, bunu kapatabileceğinizi düşünüyorum) içlerinde bir sipariş garantisi sağlar (TCP bağlantısı gibi), ancak SCTP bağlantısı başına birden fazla akış olabilir. Uygulamanızın verileri birden fazla akış üzerinden gönderilebiliyorsa, alıcının tek bir hatalı paket nedeniyle aç kaldığı satır başı engellemesini önlersiniz. Birbirini etkilemeden aynı bağlantı üzerinden etkili bir şekilde farklı konuşmalar yapılabilir.

Bir başka faydalı ek, çoklu hedefleme desteğidir - bir bağlantı her iki uçta birden fazla arayüz arasında olabilir ve arızalarla başa çıkabilir. Bunu TCP'de, ancak uygulama katmanında taklit edebilirsiniz.

Geçici olmayan bağlantılar için TCP kullanan herhangi bir uygulamanın uyguladığı ilk şey olan uygun bağlantı kalp atışı ücretsizdir.

Kişisel SCTP özetim, önemli uygulama desteği ile başka bir şekilde (TCP veya UDP'de) yapamayacağınız hiçbir şey yapmamasıdır. Sağladığı şey, bu kodu kendiniz uygulamak zorunda kalmamanızdır.

FYI, SCTP, Çap için desteklendiği şekilde zorunlu kılınmıştır (cf RADIUS yeni nesil). bkz. RFC 3588

   Çap istemcileri TCP veya SCTP'yi desteklemelidir ZORUNLU, aracılar ve
   sunucuların her ikisini de desteklemesi ZORUNLUDUR. Bu belirtimin gelecekteki sürümleri MAYIS
   istemcilerin SCTP'yi desteklemesini zorunlu kılar.

43

SCTP çok bilinmemektedir ve çok fazla kullanılmamaktadır / dağıtılmamaktadır, çünkü:

  • Yaygın: TCP / IP yığınlarına geniş ölçüde entegre edilmemiştir (2013'te: en son Mac OSX ve Windows'ta yerel olarak hala eksik)
  • Kütüphaneler: Kullanımı kolay dillerde birkaç üst düzey ciltleme (Feragatname: pysctp'in koruyucusuyum , Python için SCTP kolay yığın desteği)
  • NAT: NAT'ı çok iyi / hiç geçmez (% 1'den az internet ev ve kurumsal yönlendiricileri SCTP'de NAT yapar).
  • Popülerlik: Genel herkese açık uygulama kullanmıyor
  • Programlama paradigması: biraz değişti: hala bir soket, ancak birçok ana bilgisayara (çoklu ev sahipliği) birçok ana bilgisayarı bağlayabilirsiniz, datagram düzenli ve güvenilir, erc ...
  • Karmaşıklık: SCTP yığınının uygulanması karmaşıktır (yukarıdakiler nedeniyle)
  • Rekabet: Çok yollu TCP geliyor ve çoklu ev sahipliği ihtiyaçlarını / yeteneklerini ele almalı, böylece insanlar mümkünse SCTP uygulamaktan kaçınmalı ve MTCP'yi beklemelidir
  • Niş: SCTP dolgularının ihtiyaçları çok özeldir (sipariş edilen güvenilir datagramlar, çok akışlı) ve pek çok uygulama için gerekli değildir
  • Güvenlik: SCTP güvenlik kontrollerinden kaçar (bazı güvenlik duvarları, çoğu IDS, tüm DLP'ler CentOS / Redhat / Fedora hariç netstat'ta görünmez ...)
  • Denetim yeteneği: Dünyada 3 şirket gibi bir şey rutin olarak SCTP güvenliği denetimleri yapar (Feragatname: Bunlardan birinde çalışıyorum)
  • Öğrenme eğrisi: SCTP ile oynamak için fazla araç zinciri yok ( netcat ile güzelce birleşen veya socat kullanan mükemmel withsctp'yi kontrol edin )
  • Kaputun altında: Çoğunlukla telekomünikasyonda kullanılır ve her SMS gönderdiğinizde, cep telefonunuzda internette gezinmeye veya telefon görüşmeleri yapmaya başlayın, genellikle SCTP (GSM / UMTS ile SIGTRAN / SS7, LTE / IMS ile çap) / RCS, S1AP / LTE ile X2AP), bu yüzden aslında çok kullanıyorsunuz ama asla bilmiyorsunuz ;-)

14
Re: "Niş / birçok uygulama tarafından gerekli değildir". Web tarayıcıları bundan yararlanır, bkz. HTTP2 ve TCP'nin üstünde , SCTP'nin ücretsiz olarak sağladığı şeylerden bazılarını uygulama girişimleri. Çoğu HTTP optimizasyon tekniği (spriting, sharding, inlining, concatenation) SCTP tarafından gereksiz hale getirilir (neredeyse tamamen - HTTP1'in savurgan başlıkları çözülmez). Aynı durum, bir DB'ye veya başka bir hizmete eşzamanlı erişimi sağlamak için bağlantı havuzu olan uygulamalar için de geçerlidir. Başka bir deyişle: Bazı SCTP özellikleri için birçok uygulamaya büyük ihtiyaç vardır.
Eugene Beresovsky

4
"Genel bir genel uygulama kullanmaz": SCTP WebRTC tarafından kullanıldığı için artık doğru değil. "Güvenlik: SCTP güvenlik denetimlerinden kaçar" - bu daha çok 'güvenlik' denetimlerinin sorunudur. Bu kontrollerden kaçınırsa, kötü amaçlı yazılımların radarın altında kalması harika bir protokol olacaktır.
Maciej Piechotka

14

p1. Doğrudan IPv4 üzerinden eşlenen SCTP, hiçbir zaman hiçbir yerde yaygın olarak konuşlandırılmayan NAT ağ geçitlerinde destek gerektirir ve bu olmadan, tipik NAT ağ geçidi, genel adres başına yalnızca bir özel ana bilgisayarın SCTP'yi aynı anda kullanmasına izin verir.

p2. UDP / IPv4 üzerinden eşlenen SCTP, genel adres başına daha fazla özel ana bilgisayara izin verir, ancak IPv4 / NAT ağ geçitlerindeki UDP eşlemelerinin oluşturulması ve sürdürülmesi, UDP'nin bir NAT'ın izlemesi için açık bir durumu olmayan bağlantısız bir aktarım olması nedeniyle kötü şöhretlidir. .

p3. Doğrudan IPv6 üzerinden eşlenen SCTP için ... iyi ... IPv6 gerekir. IPv6'yı dağıtmaya çalıştınız mı? Öyleyse, bir IPv6 güvenlik duvarı satın almaya çalıştınız mı? SCTP'yi destekliyor mu? Bir yük dengeleyicisine ne dersiniz? SSL hızlandırıcı mı?

p4. Son olarak, İnternetin çoğu, TCP bağlantı noktası 80 ve bağlantı noktası 443 ile neyin sığabileceğiyle neredeyse sınırlıdır, bu nedenle herhangi bir lezzet SCTP orada kaybetme eğilimindedir. Dolayısıyla, IETF'de MPTCP çalışma grubu gibi çabalar görüyorsunuz .


"? bunu SCTP destekliyor mu duvarı bir IPv6 satın almaya çalıştık" - olağan serbestçe dağıtılan iptables destekleri onlara gayet güzel . Ben bir ağ adamı değilim, bu yüzden geri kalanı için söyleyemem.
Hi-Angel

12

Birçoğumuz SCTP kullanacağız, çünkü WebRTC veri kanalları tarafından UDP'nin üstünde TCP benzeri güvenilir bir katman oluşturmak için kullanıldı - UDP üzerinden DTLS üzerinden SCTP: https://tools.ietf.org/html/draft-ietf -rtcweb veri kanallı 13 # bölüm-6


WebRTC birincil odağının birleşik video ve ses akışı olduğunu belirtmeyi unutmayın. Mesaj rölesi olarak kullanılması amaçlanmamıştır. dönüş / buz / sersemletme hizmetleri, WebRTC'nin üzerinde çalıştığı teknolojinin başka bir parçasıdır. Ancak bunlar WebRTC'nin kullandığı teknolojilerdir. Bu teknolojiler WebRTC değildir.
TamusJRoyce

6

SCTP Wikipedia sayfasını okurken, bunun ana nedeninin SCTP'nin şu anda ana işletim sistemleri ( Windows , OS X , Linux ) tarafından desteklenmeyen çok genç bir protokol (2000 yılında önerilen) olması olduğunu söyleyebilirim .

"Çok genç" sizin için uygun görünmüyorsa, IPV6'yı düşünün : "Aralık 2008'de, 10. yıldönümünü Standartlar Track protokolü olarak işaretlemesine rağmen, IPv6 yalnızca dünya genelindeki dağıtım açısından emekleme dönemindeydi."


3
Bağlantı verdiğiniz Wikipedia makalesine göre, SCTP Linux, Solaris, FreeBSD, HP-UX ve diğerlerinde uygulanmaktadır.
drrlvn

Bağlantılı makale artık OS X ve Windows üzerinde çalıştığını söylüyor.
dmeister

3

SCTP, Çapın AAA için kullanıldığı 4G LTE ağında yaygın olarak kullanılmaktadır.


2

İyi bilinmeyebilir, ancak kullanılmaz. Oldukça kısa bir süre önce yoktu taslak yayınlanan IETF hakkında HTTP için Aktarım Katmanı Protokolü gibi SCTP kullanılması .


2
“Kullanılmayan” dediğinde protokolün gerçek kullanımını düşündüm. Ancak daha sonra , potansiyel olarak gelecekte gerçek kullanıma yol açabilecek bir taslak belge örneği verdiniz .
Kissaki


-1

Sctp çok geç doğar ve birçok durum için TCP yeterlidir.

Ayrıca bildiğim gibi kullanımının çoğu telekomünikasyon alanında.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.