Děrování TCP - TCP hole punching
Tento článek má několik problémů. Prosím pomozte vylepši to nebo diskutovat o těchto problémech na internetu diskusní stránka. (Zjistěte, jak a kdy tyto zprávy ze šablony odebrat) (Zjistěte, jak a kdy odstranit tuto zprávu šablony)
|
Traversal TCP NAT a Děrování TCP (někdy NAT průraz) nastane, když dva hostitelé za a překlad síťových adres (NAT) se pokoušejí navzájem propojit pomocí odchozích připojení TCP. Takový scénář je zvláště důležitý v případě peer-to-peer komunikace, jako např Voice-over-IP (VoIP), sdílení souborů, telekonference, chatovací systémy a podobné aplikace.
TCP děrování je experimentálně používáno NAT traversal technika pro navázání TCP spojení mezi dvěma vrstevníky za zařízením NAT v Internet počítačová síť. NAT traversal je obecný termín pro techniky, které vytvářejí a udržují TCP / IP síť a / nebo TCP připojení procházející branami NAT.
Terminologie
V následujícím textu jsou pojmy host, klient a peer používány téměř zaměnitelně.
- místní koncový bod, interní koncový bod
- místní IP: port z místního pohledu hostitele a vnitřní části NAT.
- veřejný koncový bod, externí koncový bod
- externí IP: port mapovaný NAT, jak je vidět ze sítě a vnější části NAT.
- vzdálený koncový bod
- IP: port druhého peer z pohledu sítě nebo vnějších částí obou NAT.
Popis
NAT traversal, přes děrování děr TCP, navazuje obousměrné TCP spojení mezi Internet hostitelé v soukromých sítích pomocí NAT. Nepracuje se všemi typy NAT, protože jejich chování není standardizované. Když se dva hostitelé připojují k sobě navzájem v TCP, oba prostřednictvím odchozích připojení, jsou v případě „simultánního otevřeného TCP“ diagramu stavového stroje TCP.[1]
Síťové kreslení
Peer A ← → Brána A (NAT-a) ← .. Síť .. → Brána B (NAT-b) ← → Peer B
Druhy NAT
Dostupnost děrování TCP závisí na typu počítače přidělení portu používá NAT. Pro dva vrstevníky za NAT se k sobě navzájem připojují pomocí TCP současně otevřené[vyjasnit ], potřebují o sobě trochu vědět. Jedna věc, kterou bezpodmínečně potřebují vědět, je „umístění“ druhého partnera nebo vzdálený koncový bod. Vzdálený koncový bod jsou data IP adresy a portu, ke kterému se peer připojí. Takže když dva partneři, A a B, inicializují připojení TCP vazbou na místní porty Pa a Pb, potřebují znát port vzdáleného koncového bodu, jak je namapován NAT, aby vytvořili připojení. objevit veřejný vzdálený koncový bod druhého partnera je problém zvaný Predikce portu NAT. Všechny techniky procházení TCP NAT a děrování děr musí vyřešit problém predikce portu.
Přidělení portu NAT může být jedno ze dvou:
- předvídatelný
- brána používá jednoduchý algoritmus k namapování místního portu na port NAT. Většinu času bude NAT používat zachování přístavu, což znamená, že místní port je namapován na stejný port na NAT.
- nepředvídatelné
- brány používají algoritmus, který je buď náhodný, nebo příliš nepraktický na předvídání.
V závislosti na tom, zda NAT vykazují předvídatelné nebo nepředvídatelné chování, bude možné nebo neprovede připojení TCP prostřednictvím současného otevření TCP, jak je znázorněno níže maticí připojení představující různé případy a jejich dopad na end-to- ukončení komunikace:
Předvídatelné Nepředvídatelný B předvídatelné ANO ANO B nepředvídatelné ANO NE
- ANO: připojení bude fungovat po celou dobu
- NE: připojení téměř nikdy nebude fungovat
Techniky
Metody predikce portů (s předvídatelnými NAT)
Zde jsou některé z metod používaných NAT k tomu, aby kolegové mohli provádět predikci portů:
- NAT přiřadí sekvenčním interním portům sekvenční externí porty.
Pokud má vzdálený partner informace o jednom mapování, může odhadnout hodnotu následných mapování. Připojení TCP proběhne ve dvou krocích, nejprve se peer připojí k třetí straně a naučí se jejich mapování. Ve druhém kroku mohou oba partneři odhadnout, jaké bude mapování portů NAT pro všechna následující připojení, což řeší predikci portů. Tato metoda vyžaduje vytvoření alespoň dvou po sobě jdoucích připojení pro každého partnera a vyžaduje použití třetí strany. Tato metoda nefunguje správně v případě Nosná kvalita NAT se spoustou předplatitelů za každou adresou IP, protože je k dispozici pouze omezené množství portů a přidělení po sobě jdoucích portů stejnému internímu hostiteli může být nepraktické nebo nemožné.
- NAT používá schéma přidělení zachování portů: NAT mapuje zdrojový port interního partnera na stejný veřejný port.
V tomto případě je predikce portů triviální a partneři si jednoduše musí vyměnit port, ke kterému jsou vázáni, prostřednictvím jiného komunikačního kanálu (například UDP nebo DHT), než provedou odchozí připojení TCP současně. Tato metoda vyžaduje pouze jedno připojení na partnera a nevyžaduje předpovědi portu třetí stranou.
- NAT používá „mapování nezávislé na koncových bodech“: dvě po sobě jdoucí připojení TCP pocházející ze stejného interního koncového bodu jsou mapována na stejný veřejný koncový bod.
S tímto řešením se partneři nejprve připojí k serveru třetí strany, který uloží jejich hodnotu mapování portů a dá oběma partnerům hodnotu mapování portů druhého partnera. Ve druhém kroku oba partneři znovu použijí stejný místní koncový bod k provedení současného otevření TCP navzájem. To bohužel vyžaduje použití SO_REUSEADDR na soketech TCP a takové použití porušuje standard TCP a může vést k poškození dat. Mělo by se používat pouze v případě, že se aplikace může sama chránit před takovým poškozením dat.
Podrobnosti o typické instanci připojení TCP s děrováním TCP
Předpokládáme zde, že predikce portů již proběhla prostřednictvím jedné z výše uvedených metod a že každý rovnocenný partner zná koncový bod vzdáleného partnera. Oba vrstevníci vytvářejí POSIX připojit volání do druhého koncového bodu peer. Současné otevření TCP proběhne následovně:
- Peer A pošle SYN peer B.
- Peer B pošle SYN peerovi A
- Když NAT-a obdrží odchozí SYN od Peer A, vytvoří ve svém stavovém automatu mapování.
- Když NAT-b obdrží odchozí SYN od Peer B, vytvoří ve svém stavovém automatu mapování.
- Oba SYN se kříží někde podél síťové cesty, pak:
- SYN z Peer A dosáhne NAT-b, SYN z Peer B dosáhne NAT-a
- V závislosti na načasování těchto událostí (kde se v síti kříží SYN),
- alespoň jeden z NAT propustí příchozí SYN a namapuje jej na interní cílový peer
- Po přijetí SYN peer pošle SYN + ACK zpět a spojení je navázáno.
Požadavky na interoperabilitu NAT pro děrování děr TCP
Další požadavky na NAT, aby vyhovovaly současnému otevření TCP
Aby mohl TCP současně fungovat, měl by NAT:
- neodeslat RST jako odpověď na příchozí paket SYN, který není součástí žádného mapování
- přijmout příchozí SYN pro veřejný koncový bod, když NAT již dříve viděl odchozí SYN pro stejný koncový bod
To stačí k zajištění toho, aby se NAT chovaly slušně vzhledem k současnému otevření TCP.
Děrování pomocí protokolu TCP a NAT (CGN)
Technika popsaná výše funguje dobře v rámci CGN. CGN může také využívat a přetížení portu behavior, which means that distinct internal endpoints with the same port value can be mapped to the same public endpoint. To neporušuje jedinečnost {protokol, veřejná adresa, veřejný port, vzdálená adresa, vzdálený port} pětinásobek a jako výsledek je přijatelný. TCP zachování přístavu může také vést k případům, kdy jsou porty CGN přetíženy a není problémem pro spolehlivost protokolu.Přetížení portu pro TCP umožňuje CGN interně přizpůsobit více hostitelů při zachování záruk komunikace TCP-to-end.
Viz také
Reference
- ^ Ústav informačních věd (září 1981). „Transmission control protocol: DARPA internet programme program Specification“. IETF. Agentura pro obranné výzkumné projekty.