Diskuze: prenos paketov
Člen
Zobrazeno 22 zpráv z 22.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
Říká se tomu NAT - network address translation - vyřešil se tím problém docházejících IP adres. Router odděluje tvoji LAN od Internetu, a ten server skutečně nemůže přímo na tvou IP (lokální) poslat pakety. Ale jakmile tvůj PC pošle request na webovou stránku, tak PC zjistí, že adresa nepatří do lokální síťě (pomocí subnet mask) => musí to poslat na Router. Router paket(y) přijme, vytvoří si v NAT tabulce (ve své paměti) záznam: Tvoje lokálí IP:port - očekává reply ze serveru: IP serveru. Poté vezme obsah paketu, jako cílovou IP dá ten server, jako zdrojovou svou IP (veřejnou) a odešle. Server pošle request na tvůj router - ten si v NAT tabulce najde tebe jako čekajícího na tyto data, a začne ti je přeposílat.
Jak se mi bude chtít, tak do sekce "Síťe" přidám články aj o tomhle Ale můžeš se něco dozvědět předem. Konkrétně IP adresy 192.168.xxx.xxx byly vyhrazeny na tohle "NAT" použití - takže žádná veřejná IP na světě nesmí (nebo by neměla mít) tuhle hodnotu. Zato takhle začíná věšina IP adres LAN (ještě jsou vyhrazené další 2 intervaly, ale já se s tím nesetkal), ať už doma, na školní síti, všude. A jak jsem říkal, NAT vyřešil (nebo nevyřešil, IPv4 stejně už téměř došly) nedostatel IP adres - na světě by mohlo být takových 100 miliard zařízení, a IPv4 adres je jen 232 tedy nějaké 4 miliardy. Takhle se za jednu veřejnou IP může schovat celá škola (900 potenciálních IP) nebo třeba firma (X tisíc lidí).
dik za zhrnutie to čo si tu napisal je pre mňa veľmi zaujimave a oboznamujuce z problematikou aj ked niečo na štýl prepisovania lokalnej ip na verejnu ip v rutry som tušil.
ale mňa skuor zaujima prečo keď som si urobil jednoduche posielanie paketou z textovim obsahom ( v jave) tak musim nastaviť na rutri (ruter tp-link) presmerovanie portu a ked načitam vebove stranky tak to nieje potreba
sory ja som sa preklikol moc ma to mrzi
ten dislike skusim tam potom dat 2x like snať to pomože
a fakt sory to som nechcel
V klidu Ztráta trošičky zkušeností mě nezabije.
Pochopil jsem tu cestu jako: Tvůj PC ---> tvůj router ---> Internet ---> Jeho router ---> jeho PC. Pak samozřejmě minimálně on musí mít přesměrování (v tomto směru). Jakmile posílá on tobě, pak musíš mít přesměrování zase ty. Ty můžeš poslat data bez problému na jeho router (který má veřejnou IP), ale jeho router to zahodí, protože to nemá ve forwardovací NAT tabulce - pokud si nenastaví přesměrování. Stejně tak to platí i naopak.
Tímto jsem si jistý ve chvíli, kdy ty zadáš příkaz ve svém Java programu (cokoliv to je) k odeslání paketu - ručně. V tu chvíli musí mít PF (port forwarding) ten kolega. A potom kolega udělá to samé - pošle ručně paket tobě - pak musíš mít PF ty. Ale pokud jeden z vašich programů je jako server a druhý jako klient, tak pak by měl stačit PF u routeru za kterým je server - pač server je něco, co neposílá samo od sebe, jen na request od klienta. A v tuto chvíli ti to nedokážu vysvětlit, proč by to němělo fungovat. V tomto mě to zaskočilo, tak teď se hrabu na netu a hledám si více info o NAT
Inu, možná to mám. Trochu upřesním NAT, ale předpokládám že víš co je port v protokolu TCP (nebo UDP): Když tvůj PC odešle paket (dejme web page request), tak cílový port je 80 (HTTP default), ale zdrojový port je vybrán náhodně (z neobsazených jinou aplikací na PC). Takže na router jde paket: Cílová IP: router, Zdrojová IP: tvůj PC, zdrojový port: náhodně vybrán, cílový port: 80. Router to přijme, a pozmění nejenom zdrojovou IP na svou vlastní - veřejnou, ale změní i zdrojový port! Router tedy odesílá paket se svou IP adresou a taky s novým, také náhodně vybraným zdrojovým portem! - Tady je důležité, že server musí odeslat paket, který má zdrojový port 80, a cílový port musí být ten samý náhodný port, který zvolil tvůj router (pochopitelně, tyto data jsou v NAT tabulce, a pouze takový paket ti router přepošle zpět na LAn na tvůj PC). Což by nemusel být případ, kdy komunikujete každý nezávisle. Pokuste se to poslat na správný port, mohlo by to jít.
Můžeš specifikovat, jak máte to přesměrování nakonfigurované? Na jaké porty posíláte? Nejlépe se jako amatér-síťař samouk naučím na reálných situacíhc
Ano, ale důležité je, že to musí žačít klient - odešle požadavek, a tím se na Routeru vytvoří záznam (který klient kterým portem = tvůj zdrojový port:tvoje IP adresa + na který server kterým portem = zdrojový port zvolený routerem:IP serveru). Pokud server nyní pošle data se zdrojou IP svojí vlastní (to je automatické) a cílovým portem, který je stejný jako zdrojový port náhodně zvolený routerem, Router by to měl přijmout a tobě jako klientovi přeposlat.
pohode tak snať to pochopš :
začina to programom (serverom) ktori počuva na predom zvolenom porte(napr.
port 12345);
potom spustim klienta ktory zisti či na danom porte(12345) a ip (napr.
123.123.123.123 ip je takisto predom dana alebo este je možne namiesto ip
použit aj dns meno servera) niekto počuva ak nie klient vipise "Error 3007:
Server is not available." a ukonči sa , ale ak nie tak mu pošle request o
zaradenie do listu online uživatelou a ked nan pride rad alebo cas na odpoved
tak na ip z ktorej obdržal request
Ještě dám příklad, ať je jasno: (zkrátím IP adresy i porty):
IP tvého PC = 20. IP routeru (privátní) = 10. IP routeru (veřejná) = 80. IP
serveru = 100. Komunikace bude takto:
Tvůj PC --> [IPzdroj=20;IPcíl=100;PORTzdroj=8645;PORTcíl=80] - zdroj.
port je náhodně zvolený ---> tvůj router.
Tvůj router vytváří v NAT: klient 20 očekává paket s cílovým portem
8645 od serveru 100 se zdojovým portem 80. Router posílá paket s requestem na
server ---> [IPzdroj=80;IPcíl=100;PORTzdroj=2453;PORTcíl=80] --->
Server. Server odpovídá --->
[IPzdroj=100;IPcíl=80;PORTzdroj=80;PORTcíl=2453] - cílový port je
takový, jaký zvolil router ---> Router. Router úspěšně nalezne záznam
v NAT, a posílá klientovi --->
[IPzdroj=10;IPcíl=20;PORTzdroj=80;PORTcíl=8645] ---> Klient (tvůj PC).
V posledním paketu vidíš, že zdrojový port je ten tebou náhodně zvolený
na začátku spojení, a router simuluje server - zdrojový port 80. Klient PC
neví o žádné NAT, je to "transparentní" proces.
ten "transparentní" prenos chapem ničo na štyl forward proxy
client -> proxy -> server a naopak. pričom sa proxy tvari ako client pri
komunikacii zo serverom a ako server pri komunikacii z klientom
ale ja to ešte stale nechapem . zkade tam maš dve cieľove porty : 2453, 8645 ?
Zkus si přečíst něco o detailním fungování TCP / IP. Já jsem informace hledal z tak 20 zdrojů asi 14 dní, tak nevím jestli se ti chce. No každopádně, cokoliv pošleš je "zabaleno" prvně do Ethernetováho rámce - viz moje články v sekci Sítě, potom do IP paketu (další článek) a potom (nemusí, ale je nejčastější) do TCP paketu - tzn. těm datům se přidají nějaké data velikosti max několika desítek bajtů - to je hlavička paketu. Je Ethernetová hlavička, IP hlavička a i TCP hlavička. V TCP hlavičce je hromada informací pro stabilní přenos, ale teď to, na co jsi se ptal: Jsou tam i 2 16-bitová čísla - cílový a zdrojový port. Cílový port v případě HTTP - dotaz na webové stránky - je 80 (je to stanoveno standartem jako defaultní port HTTP), ale zdrojový port nemá žádný standart. Tvůj PC ho ale musí do toho odesílaného paketu dát - port vybere náhodně. Kdybychom neuvažovali NAT, tak server pošle odpověď se zdrojovým portem 80 a cílovým portem takovým, jakým vygeneroval tvůj PC.
Zobrazeno 22 zpráv z 22.