2008-10-20 3 views
23

Ich habe einen WCF-Dienst geschrieben, der von einem Windows-Dienst gehostet wird und an einem bekannten TCP/IP-Port abhört. Aus welchem ​​Bereich kann ich sicher einen Port für die Verwendung in meiner Organisation zuweisen? Dieser Port wird in die Konfigurationsdateien für den Dienst und die Clients eingebettet, die den Dienst verwenden.Zuweisen von TCP/IP-Ports für die interne Anwendung

+0

Duplikat von http://stackoverflow.com/questions/10476987/best-tcp-port-number-range-for-in-ternal-pplications – matt2000

+0

Dies ist eine nützliche Frage, und andere Beantworter machen einen guten Fall, dass die "akzeptiert "Antwort (von Jorge Ferreira) ist falsch oder zumindest unvollständig, ebenso wie die Antworten auf die Frage, ob es sich um ein Duplikat handelt. Ist es möglich, diese Antwort "nicht zu akzeptieren"? –

Antwort

26

eine Portnummer Auswahl von 49152 bis 65535

IANA der aktuell zugewiesenen Ports eine Liste veröffentlicht.

http://www.iana.org/assignments/port-numbers

Die dynamischen und/oder privaten Ports sind die von 49152 bis 65535. Dies ist der Bereich, von wo aus Sie einen Port für Ihren Inhouse-Anwendungen wählen sollten. Natürlich kann jeder Port verwendet werden, der zu einem der nicht zugewiesenen Bereiche in der veröffentlichten Liste gehört. Beachten Sie jedoch, dass bei der Auswahl einer Portnummer aus diesen nicht zugewiesenen Bereichen keine Garantie dafür übernommen werden kann, dass der ausgewählte Port in Zukunft kein reservierter Port ist.

UNASSIGNIERTE PORTNUMMERN SOLLTEN NICHT VERWENDET WERDEN. DIE IANA WIRD DIE NUMMER ZUORDNEN FÜR DEN PORT NACH IHREM ANTRAG HAT GENEHMIGT.

Und stellen Sie sicher, dass die Portnummer, die Sie wählen konfigurierbar ist, wie Sie gesagt:

Dieser Port wird in den Konfigurationsdateien für den Service und die Kunden eingebettet werden, der die Service konsumieren .

Dies wird Kopfschmerzen vermeiden, falls eine andere Software von Drittanbietern, die Sie nicht berühren können, Ihre Portnummer verwendet. Wenn das passiert, gehen Sie einfach vor und ändern Sie es in der Konfigurationsdatei und es funktioniert einfach.

+5

_Andererseits darf die Anwendungssoftware NICHT davon ausgehen, dass eine bestimmte Portnummer im Bereich Dynamische Ports immer für die Kommunikation zur Verfügung steht, und eine Portnummer in diesem Bereich muss daher ** NICHT ** verwendet werden eine Service-ID._ [RFC 6335] (http://tools.ietf.org/html/rfc6335#page-20) – Bolu

+2

Bolu ist richtig. ** Verwenden Sie keine Port-Nummer innerhalb des dynamischen Bereichs **. Siehe meine Erklärung an anderer Stelle auf dieser Seite. – adrianwadey

+0

Nicht klug. Da das System möglicherweise den zu verwendenden Port zu einem bestimmten Zeitpunkt auswählt. Ihr Server könnte also so aussehen, als würde er nur beim späteren Laden fehlschlagen. – rxantos

0

Hier ist eine gute list of common application ports. Treffen Sie Ihre Wahl in einem leeren Slot. Vielleicht sollten Sie auch Ihr Netzwerk nach einer speziellen Anwendung durchsuchen.

Normalerweise sind Ports mit hoher Nummer verfügbar und ich würde sie vorschlagen, aber sie könnten durch Firewalls blockiert werden.

+0

der Link ist kaputt. Bitte beheben Sie – German

3

Zusätzlich zu den anderen Vorschlägen zur Auswahl eines gemeinsamen Anwendungsports, schlage ich vor, dass Sie den Port in Ihrer Anwendung konfigurierbar machen. Hartcodierte Portnummern sind eine schlechte Idee, besonders wenn Sie später einen Portkonflikt mit einer anderen Anwendung finden und Ihren Port ändern müssen.

4

Kurze Antwort: Vermeiden Sie bis einschließlich 1023 oder über 49152 und testen Sie den ausgewählten Port mit Diensten in Ihrem Netzwerk.

Wenn Sie die angemessenen Vorkehrungen getroffen haben, die Ihnen erscheinen (setzen Sie die Portnummer in eine Konfigurationsdatei), sollte das keine große Störung sein, wenn Sie später einen Konflikt entdecken.

Aber (damit ich etwas zu den anderen Vorschlägen hinzufügen kann, die aufgetaucht sind, während ich getippt habe), stellen Sie sicher, dass Sie es leicht machen, es zu ändern! Wenn es in Config-Dateien ist, machen Sie es offensichtlich. Dokumentieren Sie es und zeigen Sie es bei der Fehlersuche auf. Es ist die Art von Sache, die schief gehen könnte, also machen Sie es leicht zu debuggen, wenn es geändert werden muss.

+7

Warte, du sagst mir, dass ich * Ports über 49152 vermeiden soll, aber die oberste Antwort sagt, du solltest * nur * Ports 49152 und höher auswählen. Was? –

+1

@CamiloMartin Siehe auch adrianwadeys Antwort. Die beste Antwort ist eine fundierte Empfehlung für Peer-to-Peer-Anwendungen (z. B. BitTorrent), da sie ohnehin dazu neigen, dynamische Ports zu verwenden, oft mit einer Art von Discovery-Dienst; nicht so sehr für Client-Server-Anwendungen, die eine einigermaßen stabile Portnummer benötigen - selbst wenn die Portnummer in einer Konfigurationsdatei gespeichert ist, müssen Sie den Server und seine Clients bei jeder Änderung neu konfigurieren. – criptych

0

Als eine Anmerkung vergessen Sie nicht, diesen Port von netstat/a/n zu überprüfen, ob es von anderen Anwendungen verwendet wird oder nicht. Ich finde heraus, Vista verwendet die 49152 .... für einige Anwendungsebene Grund. Da der größte Teil des System-Level-Listeners keine Port-Sharing implementiert, ist es grundsätzlich sehr sicher, die Ports zu verwenden, die überhaupt nicht verwendet werden.

haben schöne Programmierung Tag AMIR

17

Ports 0-1023 sind die gut bekannten Ports und von der IANA zugewiesen sind. Diese sollten nur für die zugewiesenen Protokolle in öffentlichen Netzwerken verwendet werden.

Die Ports 1024-65535 wurden früher als registrierte Portnummern bezeichnet (siehe rfc1700), sind jetzt jedoch in zwei Bereiche unterteilt (siehe rfc6335).

Die Ports 1024-49151 sind die Benutzerports, die für Ihre eigenen Protokolle verwendet werden.

Die Ports 49152-65535 sind die dynamischen Ports und sollten nicht für ein Protokoll vorgeschrieben werden.

Die Benutzerports können für jedes Protokoll verwendet werden, aber es gibt eine endliche Anzahl, so dass Ihre Verwendung mit jemandem kollidiert, den sie in einem Netzwerk irgendwo verwenden. IANA speichert registrierte Portnummern (0-49151). Wenn Ihr Protokoll in öffentlichen Netzwerken verwendet wird, müssen Sie sich damit befassen, es bei IANA zu registrieren. Wenn Sie es nur in Ihrem eigenen Netzwerk verwenden, wählen Sie einen Port innerhalb dieses Bereichs (1024-49151) und überprüfen Sie diesen Port auf IANA register, um sicherzustellen, dass er nicht von einem Protokoll verwendet wird, das in Ihrem Netzwerk verwendet werden kann. Für den privaten Gebrauch ist es wahrscheinlich besser, eine Nummer zu wählen, die einem Protokoll zugewiesen ist, von dem Sie wissen, dass es nicht verwendet wird, als eines, das nicht zugewiesen ist und daher in Zukunft zugewiesen werden kann.

Verwenden Sie keine Portnummer innerhalb des Dynamikbereichs. Diese Ports werden vom Betriebssystem dynamisch und etwas zufällig zugewiesen. Wenn Sie eine Clientverbindung (mit bind() mit Port = 0) öffnen, wird Ihnen ein nicht verwendeter Port aus dem dynamischen Bereich zugewiesen. Es gibt keine Garantie dafür, dass ein Port in diesem Bereich für Ihr Protokoll immer frei ist.