MQTT Temelleri

MQTT Portları Açıklamalı: 1883, 8883, 8083 ve 8084

MQTT portlarına pratik bir rehber: düz TCP 1883, TLS 8883, WebSocket 8083 ve güvenli WebSocket 8084; güvenlik duvarı önerileri ve broker.connectmq.com'a karşı kopyala-yapıştır testlerle.

Bir bulut broker üzerinde etiketli dört kapı olarak 1883, 8883, 8083 ve 8084 MQTT portlarını ve bağlanan cihazlarla tarayıcıları gösteren çizim
Bunu kendi MQTT broker’ınızda çalıştırınFree planla özel, yönetilen bir MQTT broker alın ve hazır kod örnekleriyle başlayın.
Ücretsiz deneyin Kod örnekleri Kart gerekmez

MQTT portları, cihazlarınızın bir broker'a nasıl ulaştığını, trafiğin şifrelenip şifrelenmediğini ve bir kurumsal güvenlik duvarının trafiğe izin verip vermediğini belirler. Bu rehber pratikte karşılaşacağınız dört portu (1883, 8883, 8083 ve 8084), her birinin ne zaman kullanılacağını ve hepsinin canlı bir broker'a karşı birkaç dakika içinde nasıl test edileceğini açıklıyor.

Kısa Cevap: Dört Yaygın MQTT Portu

MQTT'nin kendisi güvenilir bir bayt akışı üzerinde çalışan bir uygulama protokolüdür. Bu akışın nasıl taşındığı portu belirler (neden her zaman TCP olduğundan emin değilseniz MQTT TCP mi UDP mi yazısını okuyun). IANA, MQTT için 1883'ü ve TLS üzerinden MQTT için 8883'ü kaydetmiştir. WebSocket portları bir kayıttan çok bir gelenektir ve broker'a göre değişir; ConnectMQ 8083 ve 8084'ü kullanır.

Port Taşıma Şifreli Tipik client'lar Üretimde kullanılır mı?
1883 TCP üzerinden MQTT Hayır CLI araçları, laboratuvar cihazları, yerel ağlar Yalnızca güvenilir, izole ağlarda
8883 TCP üzerinde TLS üzerinden MQTT Evet Cihazlar, gateway'ler, arka uç servisleri Evet, varsayılan seçim
8083 WebSocket üzerinden MQTT (ws://) Hayır Tarayıcı demoları, yerel testler Nadiren
8084 Güvenli WebSocket üzerinden MQTT (wss://) Evet Tarayıcılar, mobil web uygulamaları, kısıtlayıcı ağlar Evet, web client'ları için

ConnectMQ'da her iki WebSocket uç noktası da /mqtt yolunu kullanır; bu yüzden tam tarayıcı URL'si wss://broker.connectmq.com:8084/mqtt olur. TLS portları, neredeyse tüm işletim sistemleri ve tarayıcılarda varsayılan olarak güvenilen bir Let's Encrypt sertifikası sunar.

Port 1883: TCP Üzerinden Düz MQTT

Port 1883 ham MQTT paketlerini şifrelemeden taşır. Kullanıcı adları, parolalar ve payload'lar ağı açık metin olarak geçer ve yol boyunca trafiği yakalayabilen herkes tarafından okunabilir. Bu da 1883'ü şunlar için uygun kılar:

  • Bir genel MQTT test broker'ı üzerinde öğrenme ve hızlı deneyler.
  • İzole bir laboratuvar ağı içindeki yerel bir broker.
  • Kontrolünüzdeki bir segmentte yakındaki bir gateway ile konuşan çok kısıtlı cihazlar.

İnternet üzerinden giden kimlik bilgileri için uygun değildir. 1883 üzerinde çalışan bir üretim filosu görürseniz bunu düzeltilmesi gereken bir bulgu olarak değerlendirin.

Port 8883: TLS Üzerinden MQTT

Port 8883 aynı MQTT paketlerini bir TLS oturumuna sarar. Client broker'ın sertifikasını güvenilir bir sertifika otoritesine karşı doğrular, anahtarları müzakere eder ve ancak bundan sonra kimlik bilgileriyle birlikte CONNECT paketini gönderir. Bu, cihazlar, gateway'ler ve arka uç servisleri için standart seçimdir.

8883'ün client'tan istedikleri:

  1. Bir TLS kütüphanesi (ESP32'de mbedTLS, çoğu Linux aracında OpenSSL, .NET ve Java'da platform yığını).
  2. Broker sertifikasının doğrulanabilmesi için güvenilir bir CA paketi. Üretimde doğrulamayı asla devre dışı bırakmayın.
  3. Makul derecede doğru bir saat, çünkü sertifika geçerliliği zamana bağlıdır. Gerçek zamanlı saati olmayan cihazlar bağlanmadan önce NTP ile senkronize olmalıdır.
  4. Broker ana bilgisayar adına ayarlanmış Server Name Indication (SNI). Çoğu kütüphane ana bilgisayar adıyla bağlandığınızda bunu otomatik yapar.

Ek maliyet, bağlanırken bir el sıkışma ve biraz daha büyük paketlerdir. MQTT uzun ömürlü tek bir bağlantı tuttuğu için bu el sıkışma nadiren gerçekleşir; dolayısıyla kararlı durumdaki ek yük küçüktür. MQTT güvenliği en iyi uygulamaları rehberimiz sıkılaştırma listesinin geri kalanını ele alır.

Port 8083 ve 8084: WebSocket Üzerinden MQTT

Tarayıcılar ham TCP soketleri açamaz; bu yüzden web uygulamaları MQTT'yi WebSocket çerçeveleri içinde tüneller. Client önce bir yola (burada /mqtt) HTTP upgrade isteği gönderir ve ardından yükseltilmiş bağlantı üzerinden ikili MQTT paketleri alışverişi yapar.

  • 8083 (ws://) şifresizdir. Modern tarayıcılar HTTPS üzerinden sunulan sayfalarda bunu engeller (karışık içerik); bu yüzden çoğunlukla yerel testler için kullanışlıdır.
  • 8084 (wss://) TLS üzerinden WebSocket'tir ve üretimdeki bir web dashboard'u için tek gerçekçi seçenektir.

WebSocket'in ikinci bir faydası daha vardır: Birçok proxy ve güvenlik duvarına sıradan HTTPS trafiği gibi görünür. Bir fabrika veya otel ağı 8883'ü engellediğinde, 8084 üzerindeki wss:// bazen ham TLS'in geçemediği yerden geçebilir. Tarayıcı kodu ve proxy uyarıları için WebSocket üzerinden MQTT yazısına bakın.

Güvenlik Duvarı Açısından Etkileri

MQTT client'ları bağlantıyı her zaman broker'a doğru dışarıya doğru başlatır ve broker veriyi aynı bağlantı üzerinden geri iter. Bu, güvenlik duvarı kurallarını oldukça basitleştirir:

  1. Cihaz ağlarından broker ana bilgisayar adına 8883 (ve web client'larınız varsa 8084) üzerinden giden TCP'ye izin verin.
  2. Cihaz tarafında gelen kurala gerek yoktur. Cihazlar hiçbir MQTT portunu dinlemez.
  3. Uzun ömürlü bağlantılara izin verin. Bazı güvenlik duvarları ve NAT gateway'leri boşta kalan TCP oturumlarını birkaç dakika sonra sessizce düşürür. MQTT keep-alive aralığını bu zaman aşımından kısa tutun (60 saniye yaygın bir seçimdir); böylece PINGREQ paketleri eşlemeyi canlı tutar.
  4. MQTT için TLS denetiminden (interception) kaçının. Sertifikaları yeniden imzalayan ara cihazlar, cihazlardaki sertifika doğrulamasını bozar. Broker ana bilgisayar adını denetimden muaf tutun.
  5. Güvenlik duvarınız destekliyorsa IP izin listeleri yerine ana bilgisayar adlarını tercih edin, çünkü bulut uç noktalarının adresleri değişebilir.

Yalnızca bir port açtırabiliyorsanız 8883'ü isteyin. O bile mümkün değilse 8084'ü isteyin ve client'larınızı güvenli WebSocket üzerinden çalıştırın.

Her MQTT Portunu Beş Dakikada Test Edin

Aşağıdaki komutlar broker.connectmq.com adresindeki anonim genel uç noktayı kullanır. Benzersiz bir client ID ve topic öneki kullanın ve genel topic'lerin herkese görünür olduğunu unutmayın.

TCP erişilebilirliğini kontrol edin

# Linux / macOS
nc -vz broker.connectmq.com 1883
nc -vz broker.connectmq.com 8883
nc -vz broker.connectmq.com 8084

Windows PowerShell'de Test-NetConnection broker.connectmq.com -Port 8883 kullanın ve TcpTestSucceeded : True satırını arayın.

8883'teki TLS sertifikasını inceleyin

openssl s_client -connect broker.connectmq.com:8883 \
  -servername broker.connectmq.com </dev/null 2>/dev/null \
  | openssl x509 -noout -subject -issuer -dates

Let's Encrypt yayıncısını ve geçerli tarihleri görmelisiniz. Yayıncı bunun yerine şirketinizin proxy'si ise yolda TLS denetimi var demektir.

1883 ve 8883 üzerinde yayınlayın ve abone olun

# Terminal A: TLS üzerinden abone olun (bir CA yolu verildiğinde mosquitto TLS'i etkinleştirir)
mosquitto_sub -h broker.connectmq.com -p 8883 --capath /etc/ssl/certs \
  -i ports-sub-91c2 -t "connectmq/demo/91c2/#" -v

# Terminal B: düz TCP üzerinden yayınlayın
mosquitto_pub -h broker.connectmq.com -p 1883 -i ports-pub-91c2 \
  -t "connectmq/demo/91c2/hello" -m "sent on 1883, received on 8883"

Mesaj bir porttan diğerine geçer; bu da portların aynı broker'a açılan giriş noktalarından ibaret olduğunu gösterir.

Node.js ile 8084 üzerinde güvenli WebSocket'i test edin

// npm install mqtt
const mqtt = require("mqtt");

const client = mqtt.connect("wss://broker.connectmq.com:8084/mqtt", {
  clientId: "ports-wss-91c2",
  protocolVersion: 5,
});

client.on("connect", () => {
  console.log("Connected over wss on 8084");
  client.subscribe("connectmq/demo/91c2/#", () => {
    client.publish("connectmq/demo/91c2/wss", "hello from WebSocket");
  });
});

client.on("message", (topic, payload) => {
  console.log(topic, payload.toString());
  client.end();
});

client.on("error", (err) => console.error("Error:", err.message));

Node'dan ham TLS için URL'yi mqtts://broker.connectmq.com:8883 ile değiştirin.

Port Sorunlarını Giderme

Belirti Olası neden Çözüm
8883'te bağlantı zaman aşımı, 1883 çalışıyor Güvenlik duvarı yalnızca yaygın portlara izin veriyor Giden 8883 isteyin veya 8084 kullanın
TLS el sıkışması başarısız, sertifika bilinmiyor Eksik CA paketi veya TLS denetimi CA sertifikalarını kurun, broker ana bilgisayarını denetimden muaf tutun
Sertifika henüz geçerli değil Cihaz saati yanlış Bağlanmadan önce NTP ile senkronize edin
WebSocket 404 döndürüyor Yanlış yol /mqtt kullanın
Tarayıcı ws:// bağlantısını reddediyor HTTPS sayfasında karışık içerik 8084 üzerinde wss:// kullanın
Birkaç dakikada bir bağlantı kopuyor NAT boşta kalma zaman aşımı Keep-alive'ı zaman aşımının altına indirin

Test Portlarından Üretime Geçiş

Genel broker'da anonim bağlanırsınız; özel bir broker'da kimlik bilgileri eklersiniz. ConnectMQ portalında bir broker oluşturduğunuzda bir kullanıcı adı, parola ve bu kimlik bilgilerine bağlı bir client ID alırsınız; aynı dört port geçerlidir. Tipik bir üretim kurulumunda cihazlar ve gateway'ler için 8883, web dashboard'u için 8084 kullanılır; 1883 ve 8083 yerel hata ayıklamaya bırakılır. ConnectMQ bir barındırılan MQTT broker olduğundan sertifikalar sizin için yenilenir ve bakımını yapmanız gereken bir listener yapılandırması yoktur. Bulut MQTT broker rehberi barındırma seçeneklerini daha ayrıntılı karşılaştırır, yeni başlayanlar için MQTT eğitimi ise ilk bağlantınızı uçtan uca anlatır.

ConnectMQ ile Başlayın

app.connectmq.com adresinde kredi kartı gerektirmeden ücretsiz bir Serverless broker oluşturun ve portalın oluşturduğu kimlik bilgileriyle 8883 veya 8084 üzerinden bağlanın. ConnectMQ'nun tarayıcı içi client'ı, herhangi bir firmware'e dokunmadan önce bağlantıyı doğrulamanızı sağlar.

Sık Sorulan Sorular

Varsayılan MQTT portu nedir?

Varsayılan MQTT portu şifresiz TCP için 1883, TLS üzerinden MQTT için 8883'tür. Her ikisi de IANA'ya kayıtlıdır.

Üretimde hangi MQTT portunu kullanmalıyım?

Cihazlar ve servisler için 8883'ü, tarayıcılar için 8084'ü (güvenli WebSocket) kullanın. Kimlik bilgileri açık metin olarak taşındığı için internet üzerinden 1883'ten kaçının.

MQTT'yi 443 portunda çalıştırabilir miyim?

Bazı broker'lar katı güvenlik duvarlarını aşmak için 443 üzerinde WebSocket veya TLS üzerinden MQTT sunar. broker.connectmq.com 8883 ve 8084'ü kullanır; bu yüzden ağ ekibinizden bu portlara giden trafiğe izin vermesini isteyin.

TCP çalışırken WebSocket bağlantım neden başarısız oluyor?

En yaygın nedenler eksik /mqtt yolu, bir HTTPS sayfasından ws:// kullanmak ya da WebSocket upgrade'lerini desteklemeyen bir proxy'dir.

İlgili yazılar

MQTT'yi Kim İcat Etti? Petrol Boru Hatlarından IoT'ye Uzanan Tarih

MQTT, 1999'da IBM'den Andy Stanford-Clark ve Arcom'dan Arlen Nipper tarafından petrol boru hatlarını uydu üzerinden izlemek için icat edildi. Açık kaynağa, OASIS'e, ISO'ya ve bugünün yönetilen bulut broker'larına uzanan yolculuğunu izleyin.

7 dk okuma

MQTT Maksimum Mesaj Boyutu: Sınırlar ve Büyük Payload Stratejileri

MQTT teknik olarak 256 MB'lık bir paket taşıyabilir, ancak broker'lar, istemci kütüphaneleri ve cihazlar çok daha düşük sınırlar uygular. Gerçek sınırların nerede olduğunu, aşıldıklarında ne olduğunu ve büyük payload'ların nasıl gönderileceğini öğrenin.

6 dk okuma

Tüm yazılar →

Özel MQTT broker’ınız birkaç tık uzağınızda

Hesabınızı oluşturun, broker kimlik bilgilerinizi alın ve ilk cihazınızı bağlayın — kurulacak, yamalanacak ya da ölçeklendirilecek sunucu yok.