Das Port Control Protocol ( PCP ) ist ein Netzwerkprotokoll , das es Hosts in IPv4- oder IPv6 -Netzwerken ermöglicht , die Übersetzung und Weiterleitung eingehender IPv4- oder IPv6 -Pakete durch einen vorgelagerten Router zu steuern, der Netzwerkadressübersetzung (NAT) oder Paketfilterung durchführt . Durch die Möglichkeit für Hosts, explizite Portweiterleitungsregeln zu erstellen , lässt sich die Verarbeitung des Netzwerkverkehrs einfach konfigurieren, sodass Hosts hinter NATs oder Firewalls vom restlichen Internet aus erreichbar sind (und somit auch als Netzwerkserver fungieren können ). Dies ist eine Voraussetzung für viele Anwendungen. [ 1 ] [ 2 ]

Darüber hinaus ermöglichen explizite Portweiterleitungsregeln über PCP Hosts, den generierten Datenverkehr zu reduzieren, indem sie Workarounds in Form ausgehender NAT- Keepalive- Nachrichten eliminieren. Diese sind erforderlich, um Verbindungen zu Servern aufrechtzuerhalten und verschiedene NAT-Traversal- Techniken wie TCP-Hole-Punching durchzuführen . Gleichzeitig reduziert der geringere Datenverkehr den Stromverbrauch und verbessert somit die Akkulaufzeit mobiler Geräte . [ 1 ]

PCP wurde 2013 als Nachfolger des NAT Port Mapping Protocol (NAT-PMP) standardisiert und teilt mit diesem ähnliche Protokollkonzepte und Paketformate. [ 3 ] PCP bietet Unterstützung für IPv6 und zusätzliche NAT-Szenarien.

In Umgebungen, in denen ein UPnP IGD im lokalen Netzwerk verwendet wird, muss eine Interworking-Funktion zwischen dem UPnP IGD und PCP im IGD integriert sein. Die UPnP IGD-PCP Interworking-Funktion ist in RFC 6970 spezifiziert. [ 4 ]

Die DHCP-Optionen (IPv4 und IPv6) zur Konfiguration von Hosts mit Port Control Protocol (PCP)-Server-IP-Adressen sind in RFC 7291 spezifiziert. [ 5 ] Das Vorgehen zur Auswahl eines Servers aus einer Liste von PCP-Servern wird in RFC 7488 beschrieben. [ 6 ]

In Umgebungen, in denen NAT64 eingesetzt wird, ermöglicht PCP einem Host, die von einem PCP-gesteuerten NAT64-Gerät verwendeten IPv6-Präfixe zu ermitteln, um IPv4-konvertierte IPv6-Adressen durch das NAT64 zu erstellen (RFC7225). [ 7 ]

Überblick

Viele Anwendungen und Netzwerkgeräte benötigen die Erreichbarkeit ihrer Netzwerkstandorte von außerhalb ihres lokalen Netzwerks , um dem ursprünglich geplanten Modell der durchgängigen IP -Konnektivität über das Internet zu entsprechen und als Netzwerkserver fungieren sowie Verbindungen von entfernten Clients annehmen zu können . Ein Beispiel hierfür ist eine IP-Kamera , die einen Netzwerkserver zur Fernüberwachung über IP-Netzwerke enthält.

Üblicherweise werden Netzwerkgeräte hinter Routern oder Firewalls platziert, die NAT (um beispielsweise die gemeinsame Nutzung einer IPv4-Adresse zu ermöglichen) oder Paketfilterung (zur Verbesserung der Netzwerksicherheit und des Schutzes) durchführen. Dies führt letztendlich zum Verlust der End-to-End-Konnektivität und macht die Geräte und Anwendungen vom restlichen Internet aus unzugänglich. [ 1 ] [ 3 ]

Das Problem

Um die bereitgestellten Geräte über das lokale Netzwerk hinaus zugänglich zu machen und ihre Serverfunktion zu erweitern, ist entweder eine manuelle Konfiguration der Portweiterleitung am Netzwerk-Gateway (in der Regel ein CPE ) oder ein Workaround auf Anwendungsebene erforderlich. Dieser initiiert Verbindungen von den bereitgestellten Geräten zu zusätzlichen Zwischenservern, die zum Zusammenführen der Verbindungen, die die Firewall umgehen, und der Verbindungen der Clients dienen. Beide Ansätze haben Nachteile: Die manuelle CPE-Konfiguration ist meist umständlich oder nicht möglich, während die Verwendung zusätzlicher Zwischenserver die Komplexität und die Kosten erhöht. [ 2 ] [ 3 ]

Beispielsweise benötigt ein Online-Computerspiel (das als Client fungiert) die Kommunikation mit einem Spielserver zum Austausch von Spieldaten . Damit ein Spielserver Daten an seine Clients bereitstellen kann, müssen diese für den Server erreichbar sein. Normalerweise initiieren Clients Verbindungen zum Spielserver, um Kommunikationskanäle zu öffnen. Solche offenen Verbindungen können jedoch inaktiv werden und anschließend von Netzwerk-Gateways geschlossen werden, was die Aufrechterhaltung der Verbindung durch Keepalive-Nachrichten erforderlich macht. [ 3 ] Keepalive-Nachrichten sind kleine Nachrichten, die zwischen Client und Server ausgetauscht werden, um Datenverkehr über einen Kommunikationskanal zu erzeugen und so zu verhindern, dass Gateway-Server diesen schließen. Die Aufrechterhaltung einer Verbindung erfordert daher einen ständigen Austausch leerer Nachrichten zwischen Client und Server. Dies erhöht die Netzwerklast, verbraucht Netzwerkbandbreite und CPU-Leistung und verringert die Akkulaufzeit batteriebetriebener Geräte.

Darüber hinaus benötigen einige Netzwerkanwendungen (z. B. FTP ) das dynamische Öffnen mehrerer Verbindungen, was Application-Level Gateways (ALGs) erfordert und die Komplexität zusätzlich erhöht. [ 2 ] [ 3 ]

PCP als Lösung

PCP ermöglicht es Geräten und Anwendungen, explizite Zuordnungen zwischen einer externen IP-Adresse , einem Protokoll und einem Port sowie einer internen IP-Adresse, einem Protokoll und einem Port zu erstellen. Dank dieser expliziten Zuordnungen kann die eingehende Kommunikation Hosts hinter einem NAT oder einer Firewall erreichen. Dies erweitert entweder deren Serverfunktionen über die Grenzen lokaler Netzwerke hinaus oder vereinfacht die Nutzung verschiedener Dienste und reduziert den Ressourcenverbrauch. Die erstellten Zuordnungen sind permanent und haben eine bekannte, verlängerbare Lebensdauer. Dies ähnelt der Funktionsweise der DHCP- Leases . Gleichzeitig ermöglicht PCP Anwendungen, bei Bedarf dynamisch zusätzliche Zuordnungen zu erstellen. Dadurch wird der Bedarf an ALG -fähigen NAT-Geräten und Firewalls reduziert oder sogar ganz vermieden. [ 1 ] [ 3 ]

Erstellte explizite Zuordnungen haben eine bekannte Lebensdauer von üblicherweise mehreren Stunden. Dadurch entfällt der Austausch von Keepalive-Nachrichten zwischen Hosts und Servern auf Anwendungsebene, um die Zuordnung aufrechtzuerhalten. Dies reduziert Netzwerknutzung und Stromverbrauch, und die Keepalive-Logik auf Anwendungsebene muss weder client- noch serverseitig implementiert werden. Die PCP-Zuordnungsantwort liefert der Anwendung zugehörige, extern sichtbare Parameter (IP-Adresse, Protokoll und Port), die dann anwendungsspezifisch an andere Clients weitergegeben werden können, um eingehende Verbindungen herzustellen. Darüber hinaus kann PCP Anwendungen informieren, wenn sich die externe IP-Adresse ändert, während eine Zuordnung bereits besteht. [ 1 ] [ 3 ]

PCP unterstützt verschiedene NAT-Typen, darunter NAT64 , NAT66 und NAT44 . Die Integration von PCP in IPv4- und IPv6-Firewalls wird ebenfalls unterstützt. PCP ist sowohl für den Einsatz in großen Aggregationszentren (z. B. im Rahmen von Carrier-Grade-NATs ) als auch in kostengünstigeren Endgeräten konzipiert . Sowohl langfristige (z. B. für eine IP-Kamera oder einen Temperatursensor als Server) als auch kurzfristige Zuordnungen (z. B. beim Spielen eines Online-Computerspiels) werden unterstützt. [ 1 ] [ 2 ] [ 3 ]

PCP unterstützt Transportprotokolle , die 16-Bit-Portnummern verwenden (z. B. TCP , UDP , SCTP oder DCCP). Protokolle , die keine Portnummern verwenden (z. B. RSVP, ESP, ICMP oder ICMPv6 ), werden für IPv4- Firewall- , IPv6-Firewall- und NPTv6- Funktionen ( IPv6-Präfixübersetzung) unterstützt, jedoch nicht von mehr als einem Client pro externer IP-Adresse im Falle von NAT. [ 3 ]

Die PCP-Spezifikation definiert keinen Mechanismus für den Umgang mit Multi-Homed -Netzwerken (mit mehreren Netzwerk-Gateways oder Standardrouten ). Dennoch ist es möglich, PCP in solchen Netzwerken mithilfe eines Koordinierungsmechanismus wie conntrackd zu implementieren . Besitzen die verschiedenen Netzwerke jedoch jeweils eigene externe IP-Adressen, kann eine PCP-Zuordnung nur eine der beiden verwenden, da das Protokoll die Bereitstellung einer bestimmten externen IP-Adresse für den Client erfordert. Sollte dieses Netzwerk dann nicht mehr verfügbar sein, muss die PCP-Zuordnung aktualisiert werden, um eine externe IP-Adresse des anderen Netzwerks zu verwenden. [ 3 ]

Die PCP-Spezifikation definiert keinen Mechanismus, um entfernte Computer über IP-Adresse, Protokoll und Port der eingehenden Verbindung zu informieren. RFC 6887 besagt, dass PCP keine Rendezvous-Funktion bereitstellt und dies anwendungsspezifisch, beispielsweise mithilfe externer Nameservice-Server, erfolgen muss.

Geschichte

PCP wurde 2013 als Nachfolger von Apples NAT Port Mapping Protocol ( NAT-PMP ) standardisiert und verwendet ähnliche Protokollkonzepte und Paketformate. Ein wesentlicher Unterschied besteht darin, dass NAT-PMP hauptsächlich auf Endgeräte für Endverbraucher eingesetzt wird, während PCP auch für den Einsatz in Telekommunikationsnetzen konzipiert ist . [ 3 ] : 50, 87 Seit 2005 ist NAT-PMP in verschiedenen Apple- Produkten implementiert . [ 8 ] : 1

PCP steht in Verbindung mit dem Internet Gateway Device Protocol (UPnP IGD), das 2001 im Rahmen der UPnP- Spezifikation standardisiert wurde. Während UPnP IGD komplex ist und auf manuelle Konfiguration ausgelegt ist, ist PCP auf Einfachheit und automatisierte Nutzung in Softwareanwendungen ausgelegt. Die NAT-PMP-Spezifikation enthält eine Liste der Probleme mit UPnP IGD, die zur Entwicklung von NAT-PMP und später dessen Nachfolger PCP führten. [ 8 ] : 26–32

Anwendungsszenarien

Implementierungen

Kunden

  • macOS und iOS , als Teil der DNS-Dienstermittlungsimplementierung (nur IPv4) [ 10 ]
  • C-Bibliothek und Kommandozeilenprogramm "libpcpnatpmp" (implementiert auch NAT-PMP) [ 11 ]
  • C-Bibliothek "libplum" (implementiert auch NAT-PMP und UPnP IGD nur für IPv4) [ 12 ]
  • Rust-Kiste "pcp" [ 13 ]
  • Ein MeeGo- Client und eine grafische Benutzeroberfläche, die auf der IETF 82-Konferenz im Jahr 2011 für die Internet-Draft-Revision 13 vorgestellt wurden [ 14 ].

NAT-Router

Anbieter, die PCP-fähige NAT-Verbindungen anbieten

Sicherheit

Abgesehen von Angreifern , die Netzwerkpakete manipulieren können, die während der Erstellung einer expliziten PCP-Zuordnung ausgetauscht werden (Pakete, die die für die Einrichtung einer expliziten Zuordnung erforderlichen Aushandlungsinformationen enthalten und zwischen Hosts und PCP-fähigen NAT-Geräten oder Firewalls ausgetauscht werden), gilt PCP als sicher, solange die erstellten expliziten Zuordnungen den Bereich der impliziten Zuordnungen nicht überschreiten. Anders ausgedrückt: Implizite Zuordnungen entstehen durch die Art und Weise, wie NAT-Geräte und Firewalls reguläre ausgehende Client-Verbindungen verarbeiten. PCP ist daher sicher, solange durch den Mechanismus der expliziten Zuordnung keine neuen Zuordnungsmöglichkeiten eingeführt werden. [ 3 ]

Aus Sicherheitssicht ist die Option „THIRD_PARTY“ für die Zuordnungsanforderung ein wichtiges PCP-Feature . Wird diese Option verwendet, bedeutet dies, dass die zusätzlich in der Zuordnungsanforderung angegebene IP-Adresse als interne Adresse für die erstellte explizite Zuordnung verwendet werden soll, anstatt wie standardmäßig die Quell-IP-Adresse des eigentlichen Zuordnungsanforderungspakets zu verwenden. Solche Zuordnungsanforderungen können dazu führen, dass ein PCP-fähiges NAT-Gerät oder eine Firewall aufgrund unbekannter, anderweitig für die angegebene IP-Adresse geltender Regeln höhere explizite Zuordnungsberechtigungen gewährt, als durch implizite Zuordnungen zulässig sind. Dadurch kann ein Angreifer Datenverkehr abfangen oder einen Denial-of-Service- Angriff (DoS) durchführen. [ 3 ]

Zusätzlich stehen explizite PCP-Sicherheitsmechanismen als Erweiterungen des PCP-Protokolls zur Verfügung. Diese bieten Authentifizierungs- und Zugriffskontrollmechanismen über einen authentifizierten und integritätsgeschützten In-Band-Signalisierungskanal , der auf dem Extensible Authentication Protocol (EAP) basiert und die Authentifizierung zwischen den an einer PCP-Aushandlungssitzung beteiligten Geräten durchführt. Solche PCP-fähigen NAT-Geräte oder Firewalls können weiterhin nicht authentifizierte Mapping-Anfragen akzeptieren; gleichzeitig gelten weiterhin alle zuvor beschriebenen expliziten Mapping-Beschränkungen. [ 1 ] [ 3 ] [ 19 ]

Innenteile

Intern funktioniert PCP durch den Austausch von Steuerungsnachrichten zwischen Hosts und PCP-fähigen NAT-Geräten oder Firewalls (im Folgenden Server genannt) mithilfe des User Datagram Protocol (UDP). Diese Kommunikation besteht aus Port-Mapping-Anfragen der Hosts, die nach der Übermittlung und Verarbeitung durch die Server zu Antworten führen . Aufgrund der Unzuverlässigkeit von UDP – UDP- Datagramme können verloren gehen, dupliziert oder in falscher Reihenfolge vorliegen – gibt es nach dem Absenden einer Anfrage keine Garantie für eine Antwort. Daher werden Host-Anfragen auch als „Hinweise“ bezeichnet. Zusätzlich zu direkten Antworten generieren Server auch Gratuitous Notifications (GNs) – beispielsweise Unicast -Benachrichtigungen, um Hosts über Änderungen der externen IP-Adresse zu informieren. [ 1 ] [ 3 ]

Port Control Protocol Opcodes [ 3 ]
OpcodeBeschreibung
KARTEErstellt oder erneuert eine Zuordnung für die eingehende Weiterleitung, wodurch ein Host als Server fungieren und eingehende Kommunikation empfangen kann.
PEERErstellt oder erneuert eine ausgehende Zuordnung, die es einem Host ermöglicht, seine Kommunikation mit einem einzelnen Peer aufrechtzuerhalten.
ANMELDENKündigt verschiedene Änderungen an den Hosts an, darunter Serverneustarts und Änderungen der externen IP-Adresse.

Die ausgetauschten Nachrichten enthalten keine Möglichkeit, die zugehörige Transaktion oder die jeweilige Phase einer Sitzung zu bestimmen. Dieses vereinfachte Design basiert darauf, dass alle Nachrichten selbsterklärend und vollständig sind und kein zusätzlicher Kontext für ihre erfolgreiche Verarbeitung erforderlich ist. Server können Anfragen von Hosts stillschweigend ignorieren, falls sie diese momentan nicht verarbeiten können; in diesem Fall müssen die Hosts die Anfrage erneut senden . Hosts können außerdem unerwünschte Mapping-Antworten stillschweigend ignorieren. [ 3 ]

Für die Erstellung von PCP-Anfragen wird die IP-Adresse des Servers entweder manuell auf dem Host konfiguriert, im Rahmen der DHCP-Lease des Hosts ermittelt oder auf das konfigurierte Standardgateway des Hosts gesetzt . Host-Anfragenachrichten werden von einem beliebigen Quell-UDP-Port eines Clients an den UDP-Port 5351 des Servers gesendet, auf dem dieser lauscht. Unaufgeforderte Multicast- Serverbenachrichtigungen (z. B. Ankündigungen zum Serverneustart) werden vom UDP-Port 5351 des Servers an den UDP-Port 5350 der Hosts gesendet, auf denen dieser lauscht. [ 3 ]

Die maximale Nutzdatenlänge für alle PCP-Nachrichten beträgt 1100 Oktette . Jede PCP-Nachricht besteht aus einem Anfrage- oder Antwortheader mit einem Opcode , der die zugehörige Operation bestimmt, allen relevanten opcode-spezifischen Informationen (z. B. welche Ports zugeordnet werden sollen) und null oder mehr Optionen (z. B. der oben beschriebenen Option THIRD_PARTY ). Ergebniscodes werden als Teil der Serverantworten zurückgegeben; jedem Ergebniscode ist eine Gültigkeitsdauer zugeordnet, die den Hosts mitteilt, wann bestimmte Operationen wiederholt werden können oder sollten. Beispielsweise kann die Gültigkeitsdauer von Ergebnissen festlegen, wie lange ein Fehlerzustand voraussichtlich bestehen bleibt oder wie lange die erstellte Zuordnung gültig ist. [ 3 ]

Siehe auch

Referenzen

  1. ^ a b c d e f g h Dan Wing (Dezember 2011). „Port Control Protocol“ . The Internet Protocol Journal . Cisco Systems . Abgerufen am 31. Januar 2014 .
  2. ^ a b c d „Port Control Protocol Overview (Junos OS 13.3)“ . Juniper Networks . 14. August 2013. Abgerufen am 31. Januar 2014 .
  3. ^ a b c d e f g h i j k l m n o p q r s D. Wing; S. Cheshire; M. Boucadair; R. Penno; P. Selkirk (April 2013). Wing, D. (Hrsg.). „RFC 6887: Port Control Protocol (PCP)“ . Internet Engineering Task Force (IETF). doi : 10.17487/RFC6887 . Abgerufen am 5. Juni 2023 .{{cite journal}}: Zeitschrift zitieren erfordert |journal=( Hilfe )
  4. ^ Boucadair, M.; Penno, R.; Wing, D. (Juli 2013). „Universal Plug and Play (UPnP) Internet Gateway Device - Port Control Protocol Interworking Function (IGD-PCP IWF)“ . RFC Editor . doi : 10.17487/rfc6970 .
  5. ^ Boucadair, M.; Penno, R.; Wing, D. (Juli 2014). „DHCP-Optionen für das Port Control Protocol (PCP)“ . RFC Editor . doi : 10.17487/rfc7291 .
  6. ^ Boucadair, M.; Penno, R.; Wing, D.; Patil, P.; Reddy, T. (März 2015). „Port Control Protocol (PCP) Server Selection“ . RFC Editor . doi : 10.17487/rfc7488 .
  7. ^ Boucadair, M. (Mai 2014). „Erkennung von NAT64 IPv6-Präfixen mithilfe des Port Control Protocol (PCP)“ . RFC Editor . doi : 10.17487/rfc7225 .
  8. ^ a b S. Cheshire; M. Krochmal (April 2013). „RFC 6886: NAT Port Mapping Protocol (NAT-PMP)“ . Internet Engineering Task Force (IETF). doi : 10.17487/RFC6886 . Abgerufen am 8. August 2014 .{{cite journal}}: Zeitschrift zitieren erfordert |journal=( Hilfe )
  9. ^ Dupont, Francis; Tsou, Tina; Qin, Jacni; Cullen, Margaret; Zhang, Dacheng (13. Juni 2013). „Das Port Control Protocol in Dual-Stack Lite-Umgebungen“ .
  10. ^ "DNSServiceNATPortMappingCreate" . Apple Developer .
  11. ^ "libpcpnatpmp/libpcpnatpmp" . GitHub . 29. Dezember 2024.
  12. ^ Agenau, Paul-Louis (28. Februar 2025). „paullouisageneau/libplum“ . GitHub .
  13. ^ Ripanti, Riccardo (9. April 2024). "Rimpampa/pcp" . GitHub .
  14. ^ Faria, B; Costa, FM; Montenergo, F (November 2011). PCP Client: Implementation Experiences . IETF 82.
  15. ^ „Port Control Protocol (PCP) NAT“ . Fortinet Carrier Grade NAT Field Reference Architecture Guide .
  16. ^ "Port Control Protocol | Junos OS | Juniper Networks" . Benutzerhandbuch für adaptive Service-Schnittstellen für Routing-Geräte .
  17. ^ „PCP verstehen“ . ME60 V800R022C00SPC600 Funktionsbeschreibung .
  18. ^ „MyF5 Home / Knowledge Centers / BIG-IP LTM / BIG-IP CGNAT: Implementations / Allowing Clients to Create their Own Translations with PCP“ . techdocs.f5.com . Abgerufen am 9. März 2025 .
  19. ^ M. Cullen; S. Hartman; D. Zhang; T. Reddy (September 2015). „RFC 7652: Port Control Protocol (PCP) Authentication Mechanism“ . Internet Engineering Task Force (IETF). doi : 10.17487/RFC7652 . Abgerufen am 29. April 2016 .{{cite journal}}: Zeitschrift zitieren erfordert |journal=( Hilfe )