Daugiau

Raskite artimiausius maršruto tinklo taškus, kad pasirinktumėte taškų rinkinį trumpiausiam maršrutui

Raskite artimiausius maršruto tinklo taškus, kad pasirinktumėte taškų rinkinį trumpiausiam maršrutui


Turiu šią su SQL užklausa, kuri pasirenka degalinių rinkinį 1000 m atstumu. SQL sakinyje aš paimu 1 tašką iš stoties ir ieškau artimiausio maršruto tinklo taško, bet noriu tai padaryti visoms stotims iš WITH Query

WITH stotys AS (SELECT id, geom FROM de_tt_stations AS s WHERE ST_DWithin (s.geom :: geography, (SELECT ST_LineMerge (ST_union (geom_way))) :: geography FROM route), 1000)) SELECT 1378549, tikslas FROM (SELECT id: : sveikasis skaičius AS paskirties vieta iš de_2po_vertex UŽSAKYTI pagal geom_vertex <-> (PASIRINKITE geom iš stočių LIMIT 1) LIMIT 1) AS foo

Iš gauto sąrašo noriu apskaičiuoti kiekvieno maršruto ilgį, kad galėčiau pasirinkti artimiausią degalinę. Optimali išvestis atrodytų taip

pradžia | paskirties vieta | station_id | ilgis ------------------------------------------------- -------- 1378549 | de_2po_vertex.id | stotys.id | pgr_dijkstra ()…

Galite parašyti funkciją pl/pgsql, kurioje sukuriate laikiną lentelę (kurią galite atsisakyti atlikdami). Tada peržiūrėkite (įvykdytos) SQL sakinio įrašus ir parašykite vieną rezultatą per kiekvieną šios lentelės ciklą. visos kilpos atliktos, vykdykite „pasirinkite * iš temptable“ ir nustatykite šios užklausos rezultatą kaip grąžinimo vertę.


Na, aš visai pamiršau šį klausimą. Apskritai aš padariau tai, ką jūs sakėte, bet be funkcijos. Taip pat šiek tiek pakeičiau požiūrį į problemą, kad pasiekčiau daug geresnių rezultatų.

Taigi, užuot ieškojęs degalinių kiekvieną kartą, kai reikia iš naujo užpildyti savo modeliavimą, pradžioje pateikiu užklausą visose turimose degalinėse, naudodamas žemiau pateiktą užklausą.

CREATE TEMP TABLE užpildymas (paskirties sveikasis skaičius, stoties_id simbolis kintantis (64)) ON COMMIT DROP; INSERT INTO fill (station_id) SELECT id FROM de_tt_stations AS s WHERE ST_DWithin (s.geom :: geography, ST_GEomFromEWKB ( %(route) s) :: geography, %(distance) s); ATNAUJINTI užpildymo NUSTATYTI paskirties vietą = (PASIRINKTI id :: sveikasis skaičius IŠ de_2po_vertex UŽSAKYTI pagal geom_vertex <-> (PASIRINKITE geom FROM de_tt_stations WHERE id = fill.station_id) LIMIT 1); SELECT * FROM užpildymas;

Dabar, kai simuliacijoje pasiekiu papildymo įvykį, šiuo metu naudoju pgr_kdijkstraCost su visomis anksčiau turimomis degalinėmis

SELECT seq, id1 kaip pradžia, id2 kaip paskirties vieta, kaina kaip atstumas FROM pgr_kdijkstraCost ('SELECT id, source, target, km as cost FROM de_2po_4pgr, (SELECT ST_Expand (ST_Extent (geom_vertex)), 0.1) kaip langelis FROM de_2po_vertex WHERE id = % (r_start) s ARBA id = %(r_dest) s) kaip langelis WHERE geom_way && box.box ', 1234, ARRAY [3651, 3655, 3694], klaidingas, klaidingas) Kaip rezultatas UŽSAKYTI KAINA

Tokiu būdu aš išsaugoju daug sudėtingų užklausų duomenų bazėje ir pagerina priemiestinio imitavimo laiką nuo 2,6 iki 1,8 sek.


Sukurkite nuoseklią topologiją naudodami pgrouting

Kuriu programą, kuriai reikia maršruto informacijos apie tam tikrus miestus. Pirmiausia atsisiunčiau „openstreetmap“ duomenų failą (*.osm), o tada importavau jį į „postgreSQL“ duomenų bazę, naudodamas „osm2pgrouting“ įrankį (http://workshop.pgrouting.org/chapters/installation.html). Po to turiu šias lenteles:

  • mazgai: kuriame yra paprastų vietų taškų
  • būdai: jame yra būdų, susijusių su kai kuriais mazgais
  • vertices_tmp: saugo mazgus, kurie gali būti naudojami pgrouting funkcijoms, tokioms kaip Djistra, A*. ir kt.

Ar norėčiau apskaičiuoti atstumus tarp mazgų naudodamas mazgus, kurių nėra lentelėje „vertices_tmp“? Arba tai daryčiau tik su mazgais, saugomais „vertices_tmp“?

Kelių lentelėje yra laukas „the_geom“, apimantis skirtingus vietos taškus (mazgus). Pavyzdžiui:

"MULTILINESTRING ((1.5897786 42.5600441,1.5898376 42.5601455,1.589992 42.5605438,1.590095 42.5606795,1.5901782 42.5608026,1.5902238 42.561018,1.5902912 42.5616808,1.5903685 42.561899,1.5904008 42.5620563,1.5903836 42.5624117,1.5904265 42.5627151,1.5904947 42.5628368,1.5905981 42.5629553,1.5906926 42.5631007,1.590802 42.5633238,1.5908604 42.5634883,1.5909501 42.5637139,1.5910869 42.5638755,1.5913053 42.5639639,1.5914994 42.5640237,1.591648 42.5640261,1.5919232 42.5640145,1.5921324 42.564026

Ar galiu nukreipti maršrutą su tarpiniais mazgais arba tik su šaltinio/tikslo mazgais?

Mano tikslas yra sugebėti nukreipti maršrutą tarp skirtingų mazgų ar LV, atsižvelgiant į patogumo žymes, ne tik važiavimo atstumą, bet ir pėsčiomis. Be to, turiu apskaičiuoti trumpiausią šaltinio/tikslo mazgų kelią.


7 atsakymai 7

Atsakant į atnaujintą įrašą, jūsų sprendimas patikrinti visas galimybes yra optimalus (bent jau niekas iki šiol neatrado geresnių algoritmų). Taip, tai keliaujantis pardavėjas, kurio esmė liečia ne kiekvieną miestą, o kiekvieną miestą kartą. Jei nenorite ieškoti geriausio įmanomo sprendimo, jums gali būti naudinga naudoti greičiau veikiančią euristiką, tačiau leidžiama tik šiek tiek skirtis nuo idealaus sprendimo.

Būsimiems atsakytojams: Floyd-Warshall algoritmas ir visi į Floydą panašūs variantai čia netaikomi.

Apskritai turėtumėte griežtai laikytis blogų variantų. Manau, kad turėtumėte naudoti kai kuriuos Branch_and_bound metodo variantus http://en.wikipedia.org/wiki/Branch_and_bound

Pirmoji paieška, kaip sakoma norheim.se, arba Dijkstros algoritmas taip pat būtų mano pasiūlymas.

Tai skamba kaip keliaujantis pardavėjas? Vienas iš sprendimų yra naudoti optimizavimo metodą, pvz., Evoliucinį algoritmą. Šiuo metu atliekate išsamią paiešką, kuri labai greitai sulėtės. Bet manau, kad tai yra beveik keliaujančio pardavėjo problema ir ji buvo sprendžiama kelis dešimtmečius, jei ne šimtmečius, ir yra keletas galimų atakos būdų. „Google“ yra tavo draugas.

Galbūt tai ir reiškia originalus plakatas, „kartodamas kiekvieną galimybę rankiniu būdu ir išsaugodamas trumpiausią kelią“, bet pagalvojau, kad norėčiau aiškiai pasakyti, kas atrodo kaip pagrindinis sprendimas.

Tarkime, kad jau turite dviejų taškų trumpiausio kelio algoritmą-tai klasikiniai įvairių tipų grafikų sprendimai. Tarkime, kad visi atstumai yra neigiami ir d (A-> B-> C) = d (A-> B) + d (B-> C).

Svarbiausia, kad kelias, prasidedantis nuo S, eina per vieną iš tarpinių miestų „abcd“ ir baigiasi E:

Turėdami tik 4 tarpinius miestus, išvardijate visas 24 permacijas. Kiekvienai permutacijai naudokite trumpiausią dviejų taškų algoritmą, kad apskaičiuotumėte kelią nuo galvos iki uodegos ir bendrą atstumą.

Tada, atsižvelgiant į pradžios ir pabaigos tašką, prie vieno iš abcd yra 12 galimybių ir kiekvienai dviem interjero galimybėms. Jūs jau apskaičiavote šiuos atstumus, todėl pridedate atstumą nuo S iki galvos ir uodegą iki E. Pasirinkite minimalų. Taigi, iš anksto apskaičiavę tarpinius atstumus fiksuotam vidinių miestų rinkiniui, turite atlikti 12 dviejų taškų trumpiausio kelio problemų bet kuriai pradžios ir pabaigos taškų porai.

Akivaizdu, kad tai prastai keičiasi didėjant tarpinių miestų skaičiui. Man neaišku, ar tai galėtų būti geriau, jei nenustatysite didesnių grafiko struktūros apribojimų (ar tai fizinėje Euklideno erdvėje? Trikampio nelygybė?).

Mano minties pavyzdys: tarkime, kad visi tarpiniai atstumai tarp miestų yra O (1). Jei grafike nėra jokių apribojimų, atstumas nuo S iki bet kurio tarpinio miesto gali būti 1000, išskyrus vieną. 1. Tas pats ir uodegos atveju. Taigi jūs galite priversti pirmąjį aplankytą miestą būti bet kuo. Dabar nusileiskite vienu sluoksniu žemyn, pirmąjį miestą laikykite „pradžios tašku“. Taikykite tą patį argumentą: galite padaryti geriausią kelią į bet kurį iš šių miestų, manipuliuodami grafiko atstumais.

Taigi atrodo, kad sudėtingumui negalima padėti be papildomų prielaidų.


Trikčių šalinimas

„Cisco CallManager“ ieško linijos egzemplioriaus ir įrenginio, su kuriuo linija susieta, skambučių paieškos erdvėje.

Jei įrenginys nėra skaidinio dalis, sakoma, kad jis yra nulinio arba numatytojo skaidinio dalis. Kiekvienas vartotojas turi turėti galimybę paskambinti tam įrenginiui. Nulinio skaidinio visada ieškoma paskutinė.

Jei surinksite išorinį numerį, atitinkantį a [email protected] ir skambutis užtrunka dešimt sekundžių, patikrinkite filtravimo parinktis. Pagal numatytuosius nustatymus su a [email protected] modelis, kai renkamas 7 skaitmenų numeris, jis laukia 10 sekundžių. Turite pritaikyti filtrą šablonui, kuriame sakoma VIETINĖS SRITYS KODAS NĖRA.

Atnaujinus „Cisco CallManager“, vartotojai gauna kitą antrinį rinkimo toną 9 paspaudžiamas išorinei linijai. Norėdami išspręsti šią problemą, naudokite „Cisco IP Telephony Locale Installer“ papildinį iš „Cisco CallManager“ administravimo puslapio. Arba tai galima atsisiųsti iš „Cisco Unified Communications Locale Installer“ (tik registruotiems klientams)

Jei skambinate 9 ir tada 0, kad pasiektumėte vietinį operatorių, jei skambutis baigiasi ir greitai užimtas, gali kilti problemų dėl sutampančių maršrutų. Jei turite [email protected] maršruto modelį, 9.0 sutampa su [email protected] Taigi, kai bandote surinkti 9, kad gautumėte išorinę liniją, tada operatoriui - 0, rinkimo tvarka tikisi, kad surinksite daugiau skaitmenų, pvz., Tarptautinio numerio (011). Kadangi daugiau neįvedate skaičių, skambutis baigiasi ir greitai užimtas. Norėdami išspręsti šią problemą, pridėkite naują maršruto modelį „Cisco CallManager“, kaip parodyta čia:

Kai jums reikia susisiekti su operatoriumi, surinkite 9, ir tada 0, ir tada svaro raktas (#) norėdami nedelsiant nukreipti skambutį ir nelaukti daugiau skaitmenų.

Daugiau informacijos apie maršruto modelių konfigūraciją rasite „Cisco CallManager“ rinkimo plano konfigūravime.

Naudojant MGCP šliuzus, prie skambinamojo partijos numerio negalima pridėti priesagos, nes pakviestųjų transformacija veikia naudojant XOR mechanizmą ir nėra specialaus būdo pridėti skaičių, nes kiekvieno skaitmens loginė reikšmė yra iš kairės į dešinę. Todėl galite rašyti tik priešdėlį. Vienintelis būdas tai pasiekti yra naudoti H323 šliuzą, nes jis turi intelektą sumaišyti skambučių/iškviestų šalių transformacijas ir prireikus atlikti vertimus.

Nėra labai lengva pamatyti aiškų skambučių srautą, kad būtų pašalintos SDI sekimo priemonės rinkimo plano problemos. Prieš naudodamiesi SDI sekimo priemone, pabandykite laikytis šių gairių:

Pirma, gaukite šią svarbią informaciją:

Koks yra skambučio pradinis katalogo numeris?

Kas yra šio katalogo numerio skambinimo paieškos erdvė? Šią informaciją galite rasti eilutės konfigūracijoje.

Kas yra įrenginio, kuriame sukonfigūruotas katalogo numeris, skambučių paieškos erdvė? Įsitikinkite, kad nustatėte tinkamą įrenginį. Kadangi „Cisco CallManager“ palaiko kelių eilučių pasirodymus, galite turėti katalogo numerį keliuose įrenginiuose.

Atkreipkite dėmesį į įrenginyje sukonfigūruotą skambučių paieškos erdvę. Jei skambina IP telefonas, atminkite, kad tam tikra linija ir įrenginys, su kuriuo linija susieta, turi skambučių paieškos erdves. Jie sujungiami skambinant. Tarkime, kad 1000 egzemplioriuje yra „AccessLevelX“ skambučių paieškos erdvė, o IP telefone, kuriame yra sukonfigūruotas 1000 plėtinys, „AccessLevelY“ yra skambučių paieškos erdvė. Kai skambinama iš tos linijos, „Cisco CallManager“ ieško skaidinių, esančių „Calling Search Space AccessLevelX“ ir „AccessLevelY“.

Kokios pertvaros yra susietos su skambinančia paieškos erdve (-ėmis)?

Kas yra įrenginio skaidinys, į kurį jie nori arba nenori skambinti?

Koks yra surinktas numeris?

Atkreipkite dėmesį, ar ir kada jie gauna antrinį rinkimo toną bet kuriame etape. Be to, ką jie girdi įvedus visus skaitmenis. Ar tai užsakymas iš naujo, ar greitai užimtas? Ar jie gauna pažangos tonus, kol nesitiki ką nors išgirsti? Įsitikinkite, kad paspaudę paskutinį skaitmenį jie palauks mažiausiai dešimt sekundžių, nes gali tekti palaukti, kol baigsis tarpženklio laikmačio galiojimo laikas.

Tada atlikite šiuos veiksmus:

Peržiūrėkite maršruto plano ataskaitą, kad išnagrinėtumėte visus skaidinių maršruto modelius, esančius skambučio paieškos erdvėje.

Jei reikia, pridėkite arba pakeiskite maršruto modelius arba maršruto filtrus.

Jei galite rasti maršruto modelį, į kurį siunčiamas skambutis, atkreipkite dėmesį į maršrutų sąrašą arba vartus, į kuriuos nukreiptas raštas.

Jei tai yra maršrutų sąrašas, patikrinkite, kurios maršrutų grupės yra sąrašo dalis ir kurios šliuzai yra maršruto grupių dalis.

Patikrinkite, ar atitinkami įrenginiai yra užregistruoti „Cisco CallManager“.

Saugokitės @ vietos žymeklis. Tai makrokomanda, kurią galima išplėsti ir apimti daugybę skirtingų dalykų. Jis dažnai naudojamas kartu su filtravimo galimybėmis.


    Norėdami rasti kelių transporto priemonių maršrutus, žr. Atributą „RouteName“, kuris aprašytas „Stop“ parametre. Norint rasti kelių transporto priemonių maršrutus, prieš sprendžiant sustojimų rinkinį reikia sugrupuoti į mažesnius pogrupius - po vieną kiekvienam maršrutui ar transporto priemonei. Maršrutas sudaromas kiekvienam sustojimo pogrupiui. (Jei norite, kad sustojimų grupavimas ir maršrutas tarp sustojimų būtų optimizuotas jums, naudokite transporto priemonės maršruto problemos įrankius.)
  • Išplėstinė analizė
  • Kliūtys
  • Individualizuotas kelionės režimas
  • Tinklo duomenų rinkinys
  • Tinklo vietos
  • Išvestis
  • Aptarnavimo galimybės

1 atsakymas 1

Pradėsiu nurodydamas klaidas dviejuose jūsų aprašytuose algoritmuose:

Abiejuose algoritminiuose eskizuose yra ta pati klaida darant prielaidą, kad didžiausias taškas 2D plokštumoje poromis būtų mažiausio gaubiančio apskritimo skersmuo. Žvelgiant tik į tris dalykus, turėtų būti aišku, kodėl tai neteisinga:

Vietoj to, apskritimo, apimančio visus taškus, skersmuo turi būti identiškas dviejų taškų atstumui, arba identiškas apskritimo skersmeniui trijų taškų pogrupyje, kur visi trys taškai yra ant išgaubto viso komplekto korpuso (2D). Tai suteikia jums paprastą (iš dalies) brutalios jėgos sprendimą mažiausiam uždarojo apskritimo uždaviniui (tiesiog kartokite maždaug per visas išgaubto korpuso taškų poras ir trigubas vietas). Norėdami rasti sudėtingesnių metodų, žr. „Mažiausio apskritimo problema“).

Pirmajame eskize daroma klaida manant, kad cilindro ilgis turi būti identiškas vienam iš porų taškų atstumų, o tai nėra būtina sąlyga. Du taškai su didžiausiu atstumu gali būti dedami įstrižai cilindro viršuje ir apačioje, todėl cilindro ilgis yra mažesnis už atstumą:

Todėl nemanau, kad pirmiausia reikėtų pradėti nuo bendro atvejo, esu įsitikinęs, kad tai sunkiau nei specializuotas atvejis.

IMHO gerai pradėjote nuo antrojo algoritminio eskizo: suradus visus trynukus, tinkamus pagrindinei pusei, problema sumažėja iki baigtinio cilindro ašies krypčių rinkinio, o problemos sprendimas, kai žinoma ašies kryptis, yra daug paprastesnis. Jūsų mintis tęsti projekciją į tą plokštumą yra gera, tačiau su pataisyta „uždarojo apskritimo“ algoritmo versija (žr. Aukščiau). Tai turėtų išspręsti jūsų antrąjį algoritmą.

Kaip optimizavimą galite pabandyti įdiegti trikampio formos 3D išgaubto korpuso algoritmą ir tada patikrinti tik tas plokštumas, kurias suteikia korpuso trikampiai. Tai turėtų gerokai sumažinti lėktuvų skaičių.

Saugokitės, įgyvendinant 3D išgaubtą korpuso algoritmą arba efektyvų 2D mažiausio apvaliojo apskritimo algoritmą vis tiek gali būti iššūkis. Čia aprašytas antrosios problemos O (N^4) sprendimas, čia yra sudėtingesnis.


2 atsakymai 2

Jūsų apibrėžtas atstumas tarp rinkinių $ A $ ir $ B $ netinka kai kurioms metrinėms erdvėms. Apsvarstykite du pavyzdžius.

Tegul $ S = mathbb$. Tegul $ A = [0, sqrt <2>) cap mathbb$ ir $ B = <2 > $. Rinkiniai $ A $ ir $ B $ yra uždari apriboti metrinės erdvės $ S $ pogrupiai. Tačiau $ min $ nėra apibrėžtas (bet $ inf = 2 - sqrt <2> $).

Dabar leiskite $ S = ell_1 $. Tegul $ e_i $ yra standartinis $ ell_1 $ pagrindas. Tegul $ A = > > $ ir $ B = <(1 - 1/i) e_i: i in < mathbb> > $. Rinkiniai $ A $ ir $ B $ yra apriboti ir uždaryti. Vėlgi, $ min $ nėra apibrėžtas (bet $ inf = 0$).

Kad išvengtume šios problemos, tarkime, kad $ A $ ir $ B $ yra kompaktiški komplektai (arba, alternatyviai, $ S $ yra a visa metrinė erdvė, ir yra $ A $ ir $ B $ visiškai apriboti rinkiniai).

Siekiant užtikrinti, kad $ d (A, B) = d ( dalinis A, dalinis B) $, pakanka manyti, kad $ S $ yra kelio metrinė erdvė (žinoma, tai pakankama, bet nebūtina sąlyga). Prisiminkite, kad $ S $ yra a kelio metrinė erdvė jei atstumas tarp kiekvienos taškų poros yra lygus kreivių ilgių, jungiančių taškus, infimumui (žr. [Gromovas „Rianno ir ne Rianno erdvių metrinės struktūros“]). Visų pirma, visos normuotos erdvės yra kelio metrinės erdvės. Taip pat uždaras Rimanno kolektorius, aprūpintas geodezine metrika, yra kelio metrinė erdvė.

Įrodymas. Tarkime, kad $ S $ yra kelio metrinė erdvė. Apsvarstykite kompaktiškus pogrupius $ A, B pogrupį S $. Norime įrodyti, kad $ d (A, B) = d ( dalinis A, dalinis B) $. Tarkime, priešingai, kad $ d (A, B) & lt d ( dalinis A, dalinis B) $. Tegul $ a A $ ir $ b B $ yra tokie, kad $ d (a, b) = d (A, B) $.

Pasirinkite $ varepsilon & gt 0 $ taip, kad $ (1 + varepsilon) d (A, B) & lt d ( dalinis A, dalinis B) $. Kadangi $ S $ yra kelio metrinė erdvė, yra $ gamma: [0,1] iki S $ kreivė, kurios $ gamma (0) = a $ ir $ gamma (1) = b $ ilgio dauguma $ (1 + varepsilon) d (A, B) $. Ši kreivė negali kirsti $ $ dalinio A $ ir $ dalinio B $, nes priešingu atveju atstumas tarp $ dalinio A $ ir $ dalinio B $ būtų ne didesnis kaip $ (1 + varepsilon) d (A, B) $. Kita vertus, $ gama (t_A) dalinėje A $ už $ t_A = sup $ ir $ gama (t_B) dalinėje B $ už $ t_B = inf $. Mes gauname prieštaravimą. QED

Štai pavyzdys, kai $ d (A, B) neq d ( dalinis A, dalinis B) $. Leiskite $ S = [-1,1] kartų <0,1 > $. Apibrėžti pradėti d ((x, 0), (y, 0)) & amp = d ((x, 1), (y, 1)) = | xy | d ((x, 0), (y, 1)) & amp = | x | + | y ​​| + 1. pabaiga Nesunku patikrinti, ar $ (S, d) $ yra visa metrinė erdvė. Leiskite $ A = [-1,1] times <0 > $ ir $ B = [-1,1] times <1 > $. Turime, $ dalinis A = <-1,1 > kartų <0 > $ ir $ dalinis B = <-1,1 > kartų <1 > $. Taigi $ d (A, B) = d ((0,0), (0,1)) = 1 $, bet $ d ( dalinis A, dalinis B) = d ((1,0), (1, 1)) = 3. $


32.2. Vartai ir maršrutai

Maršrutizavimas yra mechanizmas, leidžiantis sistemai rasti tinklo kelią į kitą sistemą. A maršrutą yra apibrėžta adresų pora, vaizduojanti „paskirties vietą“ ir „šliuzą“. Maršrutas rodo, kad bandydami patekti į nurodytą paskirties vietą, paketus siųskite per nurodytą šliuzą. Yra trys paskirties vietų tipai: atskiri kompiuteriai, potinkliai ir „numatytoji“. „Numatytasis maršrutas“ naudojamas, jei netaikomi kiti maršrutai. Taip pat yra trijų tipų šliuzai: atskiri kompiuteriai, sąsajos, dar vadinamos nuorodomis, ir eterneto aparatūros (MAC) adresai. Žinomi maršrutai saugomi maršruto lentelėje.

Šiame skyriuje pateikiama maršruto pagrindų apžvalga. Tada parodoma, kaip sukonfigūruoti „FreeBSD“ sistemą kaip maršrutizatorių, ir pateikiami kai kurie trikčių šalinimo patarimai.

32.2.1. Maršruto pagrindai

Norėdami peržiūrėti „FreeBSD“ sistemos maršruto lentelę, naudokite „netstat“ (1):

Šio pavyzdžio įrašai yra šie:

Pirmasis maršrutas šioje lentelėje nurodo numatytąjį maršrutą. Kai vietinei sistemai reikia užmegzti ryšį su nuotoliniu kompiuteriu, ji patikrina maršruto lentelę ir nustato, ar yra žinomas kelias. Jei nuotolinis kompiuteris atitinka įrašą lentelėje, sistema patikrina, ar gali prisijungti naudodami tame įraše nurodytą sąsają.

Jei paskirties vieta neatitinka įrašo arba jei visi žinomi keliai nepavyksta, sistema naudoja numatytojo maršruto įrašą. Vietinio tinklo priegloboms numatytojo maršruto laukas Vartai yra nustatytas į sistemą, kuri turi tiesioginį ryšį su internetu. Skaitydami šį įrašą įsitikinkite, kad stulpelis Vėliavos rodo, kad šliuzą galima naudoti (UG).

Numatytasis mašinos, veikiančios kaip vartai į išorinį pasaulį, maršrutas bus interneto paslaugų teikėjo (IPT) šliuzo mašina.

Antrasis maršrutas yra „localhost“ maršrutas. „Localif“ stulpelyje „Netif“ nurodyta sąsaja yra lo0, dar vadinama „loopback“ įrenginiu. Tai rodo, kad visas šios paskirties vietos srautas turėtų būti vidinis, o ne siunčiamas per tinklą.

Adresai, prasidedantys 0: e0: yra MAC adresai. „FreeBSD“ automatiškai atpažins visus pagrindiniame kompiuteryje esančius kompiuterius, pavyzdyje test0, ir pridės maršrutą prie pagrindinio kompiuterio per eterneto sąsają, re0. Šio tipo maršrutas turi skirtąjį laiką, matomą stulpelyje „Galiojimo laikas“, kuris naudojamas, jei priegloba per tam tikrą laiką neatsako. Kai tai atsitiks, maršrutas į šį kompiuterį bus automatiškai ištrintas. Šie kompiuteriai identifikuojami naudojant maršruto informacijos protokolą (RIP), kuris apskaičiuoja maršrutus į vietinius kompiuterius, remiantis trumpiausio kelio nustatymu.

„FreeBSD“ automatiškai pridės vietinio potinklio potinklio maršrutus. Šiame pavyzdyje 10.20.30.255 yra potinklio 10.20.30 transliacijos adresas, o example.com yra su tuo potinkliu susietas domeno vardas. Pavadinimo nuoroda Nr. 1 reiškia pirmąją įrenginio eterneto kortelę.

Vietinio tinklo prieglobos ir vietinių potinklių maršrutus automatiškai sukonfigūruoja demonas, vadinamas maršrutu (8). Jei jis neveikia, bus tik tie maršrutai, kuriuos statiškai nustato administratorius.

„Host1“ eilutė reiškia pagrindinį kompiuterį pagal jo eterneto adresą. Kadangi „FreeBSD“ yra siunčiančioji priegloba, ji žino, kad naudoja „loopback“ sąsają (lo0), o ne „Ethernet“ sąsają.

Dvi „host2“ eilutės yra slapyvardžiai, kurie buvo sukurti naudojant „ifconfig“ (8). Simbolis ⇒ po lo0 sąsajos sako, kad be kilpinio adreso buvo nustatytas slapyvardis. Tokie maršrutai rodomi tik priegloboje, kuri palaiko slapyvardį, o visi kiti vietinio tinklo prieglobos kompiuteriai turės nuorodų Nr. 1 eilutę tokiems maršrutams.

Paskutinė eilutė (paskirties potinklis 224) yra susijusi su daugialypiu perdavimu.

Įvairūs kiekvieno maršruto atributai matomi stulpelyje Vėliavos. Dažniausiai matomos maršruto lentelės vėliavos apibendrina kai kurias iš šių vėliavų ir jų reikšmes:

Maršruto paskirtis yra vienas šeimininkas.

Siųskite bet ką, kas skirta šiai paskirties vietai, į šiuos vartus, kurie išsiaiškins, kur jį nusiųsti.

Šis maršrutas buvo statiškai sukonfigūruotas.

Klonuoja naują maršrutą, pagrįstą šiuo maršrutu, prie kurio mašinos gali prisijungti. Šio tipo maršrutas paprastai naudojamas vietiniams tinklams.

Maršrutas buvo automatiškai sukonfigūruotas pagal vietinio tinklo (klono) maršrutą.

Maršrutas apima nuorodas į eterneto (nuorodos) aparatūrą.

„FreeBSD“ sistemoje numatytąjį maršrutą galima apibrėžti /etc/rc.conf, nurodant numatytojo šliuzo IP adresą:

Taip pat galima rankiniu būdu pridėti maršrutą naudojant maršrutą:

Atminkite, kad rankiniu būdu pridėti maršrutai neišgyvens iš naujo. Daugiau informacijos apie rankinį manipuliavimą tinklo maršruto lentelėmis rasite maršrute (8).

32.2.2. Maršrutizatoriaus konfigūravimas naudojant statinius maršrutus

„FreeBSD“ sistemą galima sukonfigūruoti kaip numatytąjį tinklo šliuzą arba maršrutizatorių, jei tai yra dviejų namų sistema. Dvigubos paskirties sistema yra pagrindinis kompiuteris, esantis mažiausiai dviejuose skirtinguose tinkluose. Paprastai kiekvienas tinklas yra prijungtas prie atskiros tinklo sąsajos, nors IP slapyvardis gali būti naudojamas norint susieti kelis adresus, skirtingu potinklyje, prie vienos fizinės sąsajos.

Kad sistema galėtų persiųsti paketus tarp sąsajų, FreeBSD turi būti sukonfigūruotas kaip maršrutizatorius. Interneto standartai ir gera inžinerinė praktika neleidžia „FreeBSD Project“ įjungti šios funkcijos pagal numatytuosius nustatymus, tačiau ją galima sukonfigūruoti taip, kad ji prasidėtų paleidžiant, pridėjus šią eilutę prie /etc/rc.conf:

Norėdami dabar įjungti maršrutą, nustatykite kintamąjį sysctl (8) net.inet.ip.forwarding į 1. Norėdami sustabdyti maršrutą, iš naujo nustatykite šį kintamąjį į 0.

Maršrutizatoriaus maršruto lentelėje reikia papildomų maršrutų, kad jis žinotų, kaip pasiekti kitus tinklus. Maršrutus galima pridėti rankiniu būdu, naudojant statinius maršrutus, arba maršrutus galima automatiškai išmokti naudojant maršrutizavimo protokolą. Statiniai maršrutai tinka mažiems tinklams ir šiame skyriuje aprašoma, kaip pridėti statinį maršruto įrašą mažam tinklui.

Dideliuose tinkluose statiniai maršrutai greitai tampa nepakeičiami. „FreeBSD“ yra su standartiniu BSD maršrutizavimo demonu, nukreiptu (8), kuriame pateikiami maršrutizavimo protokolai RIP, 1 ir 2 versijos bei IRDP. BGP ir OSPF maršruto protokolų palaikymas gali būti įdiegtas naudojant tinklo/zebros paketą arba prievadą.

Apsvarstykite šį tinklą:

Šiuo atveju „RouterA“ yra „FreeBSD“ mašina, kuri veikia kaip likusio interneto maršrutizatorius. Jo numatytasis maršrutas nustatytas į 10.0.0.1, kuris leidžia prisijungti prie išorinio pasaulio. „RouterB“ jau sukonfigūruotas naudoti 192.168.1.1 kaip numatytąjį šliuzą.

Prieš pridedant bet kokius statinius maršrutus, „RouterA“ maršruto lentelė atrodo taip:

Naudojant dabartinę maršruto lentelę, „RouterA“ neturi maršruto į 192.168.2.0/24 tinklą. Ši komanda prideda „Internal Net 2“ tinklą prie „RouterA“ maršruto lentelės, naudodama 192.168.1.2 kaip kitą šuolį:

Dabar „RouterA“ gali pasiekti bet kurį 192.168.2.0/24 tinklo pagrindinį kompiuterį. Tačiau maršruto informacija išliks, jei „FreeBSD“ sistema bus paleista iš naujo. Jei statinis maršrutas turi būti nuolatinis, pridėkite jį prie /etc/rc.conf:

Konfigūracijos kintamasis static_routes yra eilučių, atskirtų tarpais, sąrašas, kuriame kiekviena eilutė nurodo maršruto pavadinimą. Kintamajame route_internalnet2 yra to maršruto pavadinimo statinis maršrutas.

Naudojant daugiau nei vieną eilutę static_routes, sukuriami keli statiniai maršrutai. Toliau pateikiamas statinių maršrutų pridėjimo prie tinklų 192.168.0.0/24 ir 192.168.1.0/24 pavyzdys:

32.2.3. Problemų sprendimas

Kai tinklui priskiriama adreso erdvė, paslaugų teikėjas sukonfigūruoja savo maršruto lenteles taip, kad visas tinklo srautas būtų siunčiamas į svetainės nuorodą. Bet kaip išorinės svetainės žino, kad turi siųsti paketus į tinklo IPT?

Yra sistema, kuri stebi visas priskirtas adresų erdves ir apibrėžia jų prijungimo prie interneto pagrindo tašką arba pagrindines magistralines linijas, kurios perduoda interneto srautą visoje šalyje ir visame pasaulyje. Kiekviena magistralinė mašina turi pagrindinio lentelių rinkinio kopiją, nukreipiančią srautą tam tikram tinklui į konkretų magistralės nešėją ir iš ten žemyn paslaugų teikėjų grandinę, kol pasiekia tam tikrą tinklą.

Paslaugų teikėjo užduotis yra reklamuoti pagrindines svetaines, kad jos yra svetainės jungties taškas, taigi ir kelias į vidų. Tai žinoma kaip maršruto sklaida.

Kartais kyla maršruto sklaidos problema, o kai kurios svetainės negali prisijungti. Galbūt naudingiausia komanda bandant išsiaiškinti, kur maršrutas nutrūksta, yra traceroute. Tai naudinga, kai ping nepavyksta.

Kai naudojate „traceroute“, įtraukite nuotolinio kompiuterio, prie kurio norite prisijungti, adresą. Išvestyje bus rodomi šliuzo šeimininkai bandymo kelyje, galiausiai arba pasiekiant tikslinį pagrindinį kompiuterį, arba nutraukiami dėl ryšio trūkumo. Daugiau informacijos rasite traceroute (8).

32.2.4. Įvairių laidų svarstymai

„FreeBSD“ iš esmės palaiko ir daugialypės terpės programas, ir daugialypės terpės maršrutą. „Multicast“ programoms nereikia jokios specialios konfigūracijos, kad jos veiktų „FreeBSD“. Palaikant daugiaadresį maršrutizavimą, į pasirinktinį branduolį reikia surinkti šią parinktį:

Daugialaidžio maršruto nukreipimo demoną „mrouted“ galima įdiegti naudojant tinklo/mrouted paketą arba prievadą. Šis demonas įgyvendina DVMRP daugialypės terpės maršrutizavimo protokolą ir yra sukonfigūruotas redaguojant /usr/local/etc/mrouted.conf, kad būtų nustatyti tuneliai ir DVMRP. Įdiegus „mrouted“, taip pat įdiegiami „map-mbone“ ir „mrinfo“ bei su jais susiję man puslapiai. Konfigūracijos pavyzdžių ieškokite šiuose.

Daugelyje daugiaadresių įrenginių DVMRP iš esmės buvo pakeistas PIM protokolu. Daugiau informacijos rasite pim (4).


Išvada

Šiame straipsnyje mes pritaikėme „Networkx“ paketą pasauliniam oro linijų tinklui analizuoti, o matplotlib naudojome bazinio žemėlapio paketą rezultatams vizualizuoti. Kaip minėta, „Networkx“ yra galingas analitinis paketas sudėtingam tinklui ir suteikia naudingos informacijos sudėtingais atvejais. Naudodami įrankius, galime suplanuoti savo kelionę keliauti po pasaulį, o tai reiškia aplankyti visus 6 žemynus pagal tam tikrus individualius reikalavimus. Be to, mes galime vizualizuoti savo planą žemėlapyje, kaip parodyta.

Tačiau, nors dabar išmanome „Networkx“ ir bazinio žemėlapio paketą, mums vis dar trūksta svarbiausių išteklių, laiko ir pinigų, kad galėtume iš tikrųjų keliauti po pasaulį. Todėl tikėkimės, kad mums visiems rytoj bus graži darbo diena!

Sveiki atvykę diskutuoti apie „Python“, „R“, duomenų analizę ar AI per „LinkedIn“. Tik neparodykite savo kelionės nuotraukų su manimi!