WebSockets ve saf TCP arasındaki temel fark nedir?


167

WebSockets hakkında okudum ve tarayıcının neden önemsiz TCP bağlantısını açamadığını ve diğer masaüstü uygulamaları gibi sunucuyla iletişim kuramadığını merak ediyorum. Ve bu iletişim neden websockets üzerinden mümkün?


8
Ama sorun ne? TCP kullanmalarına izin verin.
xap4o


2
"WebSocket, tek bir TCP bağlantısı üzerinden tam çift yönlü iletişim kanalları sağlayan bir protokoldür". Tam çift yönlü olan TCP bağlantıları da oluşturabilirsiniz? WebSockets hakkında bu özel olan nedir?
Abhishek Jain

12
Sorun genellikle web sunucularının güvenlik nedeniyle açık olan yalnızca bir bağlantı noktası, yani bağlantı noktası olmasıdır 80. Tanım gereği, bir bağlantı noktası YALNIZCA bir uygulamaya eklenebilir . Peki, bir istemci web (HTTP) dışında bir hizmet kullanmak istiyor ancak kullanılabilir tek bir bağlantı noktası varsa ne olur? İşte bu kadar! Websockets!
Pithikos

3
@Pithikos, web tarayıcılarının bu karmaşıklığına neden ihtiyacımız olduğu ve sadece tarayıcı-sunucu iletişimi için düz TCP soketleriyle değil, boğanın gözüne çarptı.
Güneşli

Yanıtlar:


260

Bir intranet sınırı içinde çalışırken TCP soketleri aracılığıyla iletişim kurmak daha kolaydır, çünkü o ağdaki makineler üzerinde kontrolünüz olabilir ve TCP bağlantılarını yapmak için uygun portları açabilirsiniz.

İnternet üzerinden, diğer ucunda bir başkasının sunucusuyla iletişim kuruyorsunuz. Bunlar son derece bağlantıları için herhangi bir eski soket açlmasn muhtemel. Genellikle HTTP için port 80 veya HTTPS için 443 gibi sadece birkaç standart olanları olacaktır. Bu nedenle, sunucu ile iletişim kurmak için bu bağlantı noktalarından birini kullanarak bağlanmak zorundasınız.

Bunların genellikle HTTP konuşan web sunucuları için standart bağlantı noktaları olduğu göz önüne alındığında, HTTP protokolüne uymak zorundasınız, aksi takdirde sunucu sizinle konuşmaz. Web soketlerinin amacı, HTTP aracılığıyla bir bağlantı başlatmanıza izin vermek, ancak daha sonra "TCP soketi" benzeri bir iletişim akışına izin vermek için web soketleri protokolünü (sunucunun bunu yapabildiğini varsayarak) kullanmayı müzakere etmektir.


2
Kolay açıklama için teşekkürler Ash.
xap4o

Temel olarak WebSocket, UDP'nin IP için bir sarıcı olduğu anlamında TCP için bir sargı mıdır?
Pacerier

3
@Pacerier: Bir WebSocket'in çalışması için bir tür aktarım protokolü gerekir, ancak bu aktarım katmanının TCP olması gerekmez (neredeyse pratikte her zaman TCP olacaktır). WebSockets'i TCP çevresinde bir tür sarıcı olarak düşünebilirsiniz, ancak ikisi arasında herhangi bir kuralcı bağlantı olduğuna inanmıyorum.
Ash

4
"İnternet üzerinden diğer ucun sunucusuyla iletişim kuruyorsunuz." "Bunların genellikle HTTP konuşan web sunucuları için standart portlar (80 ve 443) olduğu düşünüldüğünde, HTTP protokolüne uymak zorundasınız. , aksi takdirde sunucu sizinle konuşmaz. " Genellikle, eriştiğimiz websocket sunucusu kendimiz olur. Bu nedenle, bir bağlantı noktasını dinlemeyi tanımladığımız protokollü bir uygulamamız olabilir. O zaman neden HTTP el sıkışmasına ve protokol değiştirmeye ihtiyacımız var? Bunun yerine neden doğrudan protokol benzeri bir web soketini takip edemiyoruz?
ratul

2
RFC6455'e göre, WebSocket önce HTTP'de bir el sıkışma gerektirir ve ardından protokol WebSocket'e yükseltir. Tarayıcının çoğu bunu takip eder. Sunucuda herhangi bir protokol kullanıyorsanız, istemci tarafınızın (tarayıcınızın) nasıl destekleyeceğini bilmiyorum. Sanki fransızca iletişim kurabiliyoruz, sadece ikimiz de fransızca biliyoruz. Ve el sıkışma, size 'Fransızca olarak iletişim kurabilir miyiz?' Burada tarayıcılar (krom gibi) fransızca biliyor ama sunucu fransızca öğretmek zorundayız. Benim sorum RFC6455 (WebSocketProtocol) neden HTTP'de el sıkışma yapmak ve işleri karmaşıklaştırmak istiyordu, neden bu şekilde yapamıyorlar?
ratul

31

Web tarayıcıları Uygulama katmanında, TCP ise Taşıma Katmanı'nda çalışır. Bir web uygulaması geliştiricisi olarak, Aktarım Katmanı'ndaki ham baytlar yerine Uygulama Katmanı yoluyla tel üzerinden mesaj göndermek daha kolaydır.

Temel WebSockets TCP'dir , basitlik için soyutlanmıştır.


2

Websocket bir uygulama katmanı protokolü iken TCP aktarım katmanı protokolüdür. Aktarım katmanında genellikle TCP ve UDP protokolümüz vardır. Uygulama katmanından gelen herhangi bir mesajın başka bir makineye aktarılması için taşıma katmanından geçmesi gerekir. Bu nedenle, websocket ve tcp'nin birbiriyle ilişkisi vardır ve karşılaştırılamaz.


2

Bunu kolaylaştırmak için, websocket iletişimleri, bir güvenlik duvarı kullanarak web dışı Internet bağlantılarını engelleyen ortamlar için yararlı olan 80 numaralı TCP bağlantı noktası (veya TLS şifreli bağlantılar durumunda 443) üzerinden yapılır .

Var olan TCP bağlantı noktasını kullanmak veya güvenlik duvarı tarafından engellenebilecek yeni bir TCP bağlantı noktası açmak ister misiniz?

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.