Dahili uygulamalar için en iyi TCP bağlantı noktası numarası aralığı [kapalı]


99

Dahili uygulamalarımızın her birinin ayrı bir Tomcat örneğinde çalıştığı ve belirli bir TCP bağlantı noktasını kullandığı bir yerde çalışıyorum. Sunucudaki diğer herhangi bir işlemle bağlantı noktası numarası çakışmalarını önlemek için bu uygulamalar için kullanılacak en iyi IANA bağlantı noktası aralığı hangisidir?

Http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xml'ye dayalı olarak , şu anda gördüğüm seçenekler şunlardır:

  1. Sistem Bağlantı Noktaları (0-1023): Bu bağlantı noktalarından hiçbirini kullanmak istemiyorum çünkü sunucu bu aralıktaki standart bağlantı noktalarında hizmetler çalıştırıyor olabilir
  2. Kullanıcı Bağlantı Noktaları (1024-49151): Uygulamaların dahili olduğu göz önüne alındığında, IANA'dan uygulamalarımızdan herhangi biri için bir numara ayırmasını talep etmek niyetinde değilim. Bununla birlikte, aynı bağlantı noktasının başka bir işlem tarafından (örneğin, 1521'de Oracle Net Listener) kullanılması olasılığını azaltmak istiyorum.
  3. Dinamik ve / veya Özel Bağlantı Noktaları (49152-65535): Bu aralık, özel bağlantı noktası numaraları için idealdir. Tek endişem bunun gerçekleşip gerçekleşmeyeceği:

    a. Uygulamalarımdan birini bağlantı noktası X
    b'yi kullanacak şekilde yapılandırıyorum . Uygulama birkaç dakika veya saat (uygulamanın yapısına bağlı olarak) kapalı kaldığında, bağlantı noktasını bir süre kullanılmadan bıraktı,
    c. İşletim sistemi, örneğin, bu işlem başka bir sunucuya TCP bağlantısı gerektiren bir istemci gibi davrandığında, X bağlantı noktasını başka bir işleme tahsis eder. Bu, dinamik aralığa düştüğü ve işletim sistemi söz konusu olduğunda X'in şu anda kullanılmadığı ve
    d. X bağlantı noktası zaten kullanımda olduğu için uygulama başlatılamıyor


2
Yardımcı bulabileceğiniz benzer bir soruyu burada stackoverflow.com/a/38141340/3333759 yanıtladım .
adrianwadey

Yanıtlar:


37

Neden umursadığını anlamıyorum. "1024'ün altındaki bağlantı noktalarını kullanma" ayrıcalık kuralı dışında, herhangi bir bağlantı noktasını kullanabilmelisiniz çünkü istemcileriniz herhangi bir IP adresi ve bağlantı noktasıyla konuşacak şekilde yapılandırılabilir olmalıdır!

Değilse, o zaman çok iyi yapılmamışlardır. Geri dönün ve doğru şekilde yapın :-)

Başka bir deyişle, sunucuyu IP adresinde çalıştırın Xve Yardından istemcileri bu bilgilerle yapılandırın. Ardından, kendinizle çakışan farklı bir sunucu çalıştırmanız gerektiğini fark Xederseniz Y, sunucunuzu ve istemcilerinizi yeni bir bağlantı noktası kullanacak şekilde yeniden yapılandırmanız yeterlidir. Bu, ister müşterilerinizin kod olması, ister bir tarayıcıya URL'leri yazan kişiler olsun geçerlidir.

Ben de sizin gibi, IANA tarafından atanan numaraları almaya çalışmam çünkü bu, birçok ortamın onları kullanacağı kadar yaygın hizmetler için olması gerekiyordu (SSH veya FTP veya TELNET'i düşünün).

Ağınız sizin ağınızdır ve sunucularınızın 1234 numaralı bağlantı noktasında (veya hatta bu konuda TELNET veya FTP bağlantı noktalarında) olmasını istiyorsanız, bu sizin işinizdir. Örnek olarak, ana bilgisayar geliştirme alanımızda, telnet'ten çok farklı bir canavar olan 3270 terminal sunucusu için 23 numaralı bağlantı noktası kullanılır. Ana bilgisayarın UNIX tarafına telnet yapmak istiyorsanız, 1023 numaralı bağlantı noktasını kullanırsınız. 1023 numaralı bağlantı noktasını belirtmeden telnet istemcilerini kullanırsanız bu bazen can sıkıcıdır çünkü sizi telnet protokolü hakkında hiçbir şey bilmeyen bir sunucuya bağlar - kırmamız gerekir. telnet istemcisinden çıkın ve doğru şekilde yapın:

telnet big_honking_mainframe_box.com 1023

Eğer gerçekten varsa edemez istemci taraflı ayarlanabilir yapmak, (gelecekte eklenen tüm dahil) bu kutularda başka herhangi bir yazılımın sizin yolumdan tutmak zorunda olduğunu ilan 48042 gibi ikinci aralıkta bir seçim ve sadece kullanmak .


Teşekkürler. Cevabınızı okuduktan ve biraz daha düşündükten sonra, ikinci aralıkta bir port kullanma seçeneği ile gitmeye karar verdim. IANA anda bu alt-aralık atanan çok az bağlantı noktası vardır Biz 46xxx aldı linke . Üçüncü aralığı, anlattığım teorik olarak mümkün (pek olası olmasa da) senaryo nedeniyle seçmedik.
Juanal

123

Atanan bağlantı noktası numaralarını IANA'dan indirmeye, kullanılan bağlantı noktalarını filtrelemeye ve her "Atanmamış" aralığı mevcut bağlantı noktalarının çoğuna göre azalan sıralamaya karar verdim. Bu işe yaramadı çünkü csv dosyası, diğer bağlantı noktası numarası rezervasyonlarıyla çakışan "Atanmamış" olarak işaretlenen aralıklara sahip. Atanan bağlantı noktası numaralarının aralıklarını manuel olarak genişlettim ve bana atanan tüm bağlantı noktası numaralarının bir listesini bıraktım . Daha sonra bu listeyi sıraladım ve kendi atanmamış aralıklar listemi oluşturdum.

Bu stackoverflow.com sayfası, konuyla ilgili aramamda çok üst sıralarda yer aldığından, ilgilenen herkes için en geniş aralıkları buraya göndereceğimi düşündüm. Bunlar, aralıktaki bağlantı noktası sayısının en az 500 olduğu hem TCP hem de UDP içindir.

Total   Start   End
829     29170   29998
815     38866   39680
710     41798   42507
681     43442   44122
661     46337   46997
643     35358   36000
609     36866   37474
596     38204   38799
592     33657   34248
571     30261   30831
563     41231   41793
542     21011   21552
528     28590   29117
521     14415   14935
510     26490   26999

Kaynak (CSV indirme düğmesi aracılığıyla):

http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml


"Hem tcp hem de udp" olduğu gibi - Tüm bu bağlantı noktalarını açabilirim diyelim ki 44100-44199hatırlanması kolay görünüyor çünkü hem udp hem de tcp'de ses 44100 güvenli bir şekilde örnekleniyor mu? Hem udp 44100-44199 hem de tcp 44100-44199 ücretsiz mi?
Lapsio

1
Ne yazık ki hayır. Yayınladığımdan beri ek çekinceler var. Şimdi menzilinizde bir bağlantı noktası var. "z-dalgası tüneli 44123 tcp Z-Dalgası Güvenli Tüneli"
David Vereb

Neyse ki Z-Wave akıllı ev güvenlik sistemlerini geliştirme sunucusu lol üzerine kuracağımı sanmıyorum. Daha önce kullanılan bağlantı noktası aralıkları, bazı VMWare araçları dahil olmak üzere birçok önemli şeyi kapsıyordu, bu yüzden çok daha kötüydü. Şimdilik tek çarpışma buysa, o zaman bununla iyiyim teşekkürler :)
Lapsio

3
Bu yüzden, daha yeni verilere dayalı yeni bir aralıklar dizisi bulmak için listeyi tekrar çalıştırmaya karar verdim. "Atanmamış" aralıkların doğru numaralandırılmadığı ortaya çıktı. Örneğin, 43124-44320 atanmamış olarak işaretlenir, ancak bu aralıktaki 44123, atanmış olarak hemen üzerinde listelenir. Yanlış hesaplanmış gibi göründükleri için, atanmamış aralıkları manuel olarak bulmam gerekecek gibi görünüyor.
David Vereb

7

Kısa cevap: Atanmamış bir kullanıcı bağlantı noktası kullanın

Başarının cevabı üzerinde - Bir kaynak bulma çözümü seçin ve dağıtın. Sunucunun dinamik olarak özel bir bağlantı noktası seçmesini sağlayın. İstemcilerin kaynak keşfini kullanmasını sağlayın.

Bir sunucunun dinlemek istediği bağlantı noktasının mevcut olmaması nedeniyle başarısız olma riski gerçektir; en azından benim başıma geldi. Önce başka bir hizmet veya müşteri oraya ulaşabilir.

Müşterilere dinamik olarak dağıtılan özel bağlantı noktalarından kaçınarak bir istemcinin riskini neredeyse tamamen azaltabilirsiniz.

Bir kullanıcı bağlantı noktası kullanıyorsanız başka bir hizmetten alınma riski minimumdur. Atanmamış bir bağlantı noktasının riski, yalnızca başka bir hizmetin yapılandırılması (veya ikili olarak) bu bağlantı noktasını kullanmasıdır. Ama en azından bu muhtemelen senin kontrolün altında.

Kullanıcı Bağlantı Noktaları dahil olmak üzere tüm bağlantı noktası atamalarını içeren büyük belge burada: http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.txt Atanmamış belirteci arayın .


4
Ağınızda asla kullanılmayacak bir protokol için atanmış bir bağlantı noktası kullanmak daha iyi değil mi? Atanmamış bir bağlantı noktası herhangi bir zamanda atanabilir ve size sorun yaratabilir.
adrianwadey
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.