Szkolenie Cisco 200-125 CCNA v3.0. Dzień 44: Wprowadzenie do OSPF

Dzisiaj zaczniemy uczyć się o routingu OSPF. Temat ten, podobnie jak protokół EIGRP, jest najważniejszym tematem całego kursu CCNA. Jak widać, sekcja 2.4 nosi tytuł „Konfigurowanie, testowanie i rozwiązywanie problemów z jednostrefowym i wielostrefowym protokołem OSPFv2 dla protokołu IPv4 (z wyłączeniem uwierzytelniania, filtrowania, ręcznego podsumowywania tras, redystrybucji, obszaru pośredniczącego, sieci wirtualnej i LSA).”

Szkolenie Cisco 200-125 CCNA v3.0. Dzień 44: Wprowadzenie do OSPF

Temat OSPF jest dość obszerny, więc zajmie 2, może 3 lekcje wideo. Dzisiejsza lekcja poświęcona będzie teoretycznej stronie zagadnienia, opowiem ogólnie czym jest ten protokół i jak działa. W następnym filmie przejdziemy do trybu konfiguracji OSPF przy użyciu narzędzia Packet Tracer.

Zatem w tej lekcji omówimy trzy rzeczy: czym jest OSPF, jak działa i jakie są strefy OSPF. W poprzedniej lekcji powiedzieliśmy, że OSPF to protokół routingu stanu łącza, który sprawdza łącza komunikacyjne między routerami i podejmuje decyzje na podstawie szybkości tych łączy. Długi kanał o większej prędkości, to znaczy o większej przepustowości, będzie miał pierwszeństwo przed krótkim kanałem o mniejszej przepustowości.

Protokół RIP, będący protokołem wektora odległości, wybierze ścieżkę z jednym przeskokiem, nawet jeśli łącze to ma małą prędkość, a protokół OSPF wybierze długą trasę z kilkoma przeskokami, jeśli całkowita prędkość na tej trasie jest większa niż prędkość prędkość ruchu na krótkiej trasie.

Szkolenie Cisco 200-125 CCNA v3.0. Dzień 44: Wprowadzenie do OSPF

Algorytmowi decyzyjnemu przyjrzymy się później, ale na razie powinieneś pamiętać, że OSPF jest protokołem stanu łącza. Ten otwarty standard powstał w 1988 roku, aby mógł z niego korzystać każdy producent sprzętu sieciowego i każdy dostawca sieci. Dlatego OSPF jest znacznie bardziej popularny niż EIGRP.

OSPF w wersji 2 obsługiwał tylko IPv4, a rok później, w 1989 roku, twórcy ogłosili wersję 3, która obsługiwała IPv6. Jednak w pełni funkcjonalna trzecia wersja OSPF dla IPv6 pojawiła się dopiero w 2008 roku. Dlaczego wybrałeś OSPF? Z ostatniej lekcji dowiedzieliśmy się, że ten protokół bramy wewnętrznej realizuje zbieżność tras znacznie szybciej niż protokół RIP. Jest to protokół bezklasowy.

Jeśli pamiętasz, RIP jest protokołem klasowym, co oznacza, że ​​nie wysyła informacji o masce podsieci, a jeśli napotka adres IP klasy A/24, nie zaakceptuje go. Na przykład, jeśli przedstawisz mu adres IP taki jak 10.1.1.0/24, będzie postrzegał ją jako sieć 10.0.0.0, ponieważ nie rozumie, kiedy sieć jest podzielona na podsieci przy użyciu więcej niż jednej maski podsieci.
OSPF jest bezpiecznym protokołem. Na przykład, jeśli dwa routery wymieniają informacje OSPF, możesz skonfigurować uwierzytelnianie w taki sposób, aby udostępniać informacje sąsiadującemu routerowi dopiero po wprowadzeniu hasła. Jak już powiedzieliśmy, jest to standard otwarty, dlatego wielu producentów sprzętu sieciowego korzysta z protokołu OSPF.

W sensie globalnym OSPF jest mechanizmem wymiany ogłoszeń stanu łącza, w skrócie LSA. Komunikaty LSA są generowane przez router i zawierają wiele informacji: unikalny identyfikator routera router-id, dane o sieciach znanych routerowi, dane o ich kosztach i tak dalej. Router potrzebuje wszystkich tych informacji do podjęcia decyzji o routingu.

Szkolenie Cisco 200-125 CCNA v3.0. Dzień 44: Wprowadzenie do OSPF

Router R3 wysyła swoje informacje LSA do routera R5, a router R5 udostępnia swoje informacje LSA routerowi R3. Te LSA reprezentują strukturę danych tworzącą bazę danych stanu łącza, w skrócie LSDB. Router zbiera wszystkie otrzymane pakiety LSA i umieszcza je w swojej bazie danych LSDB. Gdy oba routery utworzą swoje bazy danych, wymieniają między sobą wiadomości Hello, które służą do odnalezienia sąsiadów i rozpoczynają procedurę porównywania ich baz LSDB.

Router R3 wysyła do routera R5 komunikat DBD, czyli „opis bazy danych”, a router R5 wysyła swój DBD do routera R3. Wiadomości te zawierają indeksy LSA dostępne w bazach danych każdego routera. Po otrzymaniu DBD, R3 wysyła żądanie statusu sieci LSR do R5, mówiąc: „Mam już wiadomości 3,4 i 9, więc wyślij mi tylko 5 i 7”.

R5 robi to samo, mówiąc trzeciemu routerowi: „Mam informacje 3,4 i 9, więc wyślij mi 1 i 2”. Po otrzymaniu żądań LSR routery odsyłają pakiety aktualizacji stanu sieci LSU, co oznacza, że ​​w odpowiedzi na swój LSR trzeci router otrzymuje LSU od routera R5. Gdy routery zaktualizują swoje bazy danych, wszystkie, nawet jeśli masz 100 routerów, będą miały te same bazy danych LSDB. Gdy w routerach zostaną utworzone bazy danych LSDB, każdy z nich będzie wiedział o całej sieci jako całości. Protokół OSPF do tworzenia tablicy routingu wykorzystuje algorytm Shortest Path First, dlatego najważniejszym warunkiem jego prawidłowego działania jest synchronizacja baz LSDB wszystkich urządzeń w sieci.

Szkolenie Cisco 200-125 CCNA v3.0. Dzień 44: Wprowadzenie do OSPF

Na powyższym schemacie znajduje się 9 routerów, z których każdy wymienia komunikaty LSR, LSU itd. ze swoimi sąsiadami. Wszystkie są ze sobą połączone za pośrednictwem p2p, czyli interfejsów „punkt-punkt”, które obsługują działanie za pośrednictwem protokołu OSPF i współdziałają ze sobą, tworząc tę ​​samą bazę danych LSDB.

Szkolenie Cisco 200-125 CCNA v3.0. Dzień 44: Wprowadzenie do OSPF

Gdy tylko bazy zostaną zsynchronizowane, każdy router, korzystając z algorytmu najkrótszej ścieżki, tworzy własną tablicę routingu. Tabele te będą różne dla różnych routerów. Oznacza to, że wszystkie routery korzystają z tej samej bazy danych LSDB, ale tworzą tablice routingu w oparciu o własne przemyślenia na temat najkrótszych tras. Aby móc korzystać z tego algorytmu, OSPF musi regularnie aktualizować bazę danych LSDB.

Zatem, aby OSPF mógł sam działać, musi najpierw spełnić 3 warunki: znaleźć sąsiadów, utworzyć i zaktualizować bazę LSDB oraz utworzyć tablicę routingu. Aby spełnić pierwszy warunek, administrator sieci może potrzebować ręcznego skonfigurowania identyfikatora routera, taktowania lub maski wieloznacznej. W następnym filmie przyjrzymy się konfigurowaniu urządzenia do pracy z OSPF, na razie powinieneś wiedzieć, że ten protokół wykorzystuje odwrotną maskę i jeśli nie pasuje, jeśli twoje podsieci nie pasują lub uwierzytelnianie nie jest zgodne , sąsiedztwo routerów nie będzie mogło się utworzyć. Dlatego przy rozwiązywaniu problemów z OSPF należy dowiedzieć się, dlaczego to właśnie sąsiedztwo nie powstaje, czyli sprawdzić, czy powyższe parametry są zgodne.

Jako administrator sieci nie jesteś zaangażowany w proces tworzenia LSDB. Bazy danych są aktualizowane automatycznie po utworzeniu otoczenia routerów, podobnie jak konstrukcja tablic routingu. Wszystko to wykonuje samo urządzenie, skonfigurowane do pracy z protokołem OSPF.
Spójrzmy na przykład. Mamy 2 routery, którym dla uproszczenia przypisałem RID 1.1.1.1 i 2.2.2.2. Jak tylko je połączymy kanał łącza od razu przejdzie w stan up, bo najpierw skonfigurowałem te routery do pracy z OSPF. Gdy tylko kanał komunikacyjny zostanie utworzony, router A natychmiast wyśle ​​pakiet Hello do routera A. Pakiet ten będzie zawierał informację, że ten router jeszcze nikogo „nie widział” na tym kanale, ponieważ wysyła Hello po raz pierwszy, a także własny identyfikator, dane o podłączonej do niego sieci i inne informacje, które może podziel się z sąsiadem.

Szkolenie Cisco 200-125 CCNA v3.0. Dzień 44: Wprowadzenie do OSPF

Po odebraniu tego pakietu router B powie: „Widzę, że w tym kanale komunikacyjnym istnieje potencjalny kandydat na sąsiada OSPF” i przejdzie w stan Init. Pakiet Hello nie jest wiadomością emisji pojedynczej ani rozgłoszeniowej, jest to pakiet multiemisji wysyłany na adres IP protokołu multiemisji OSPF 224.0.0.5. Niektórzy pytają, jaka jest maska ​​podsieci dla multiemisji. Faktem jest, że multicast nie ma maski podsieci, rozchodzi się jako sygnał radiowy, który jest słyszalny przez wszystkie urządzenia dostrojone do jego częstotliwości. Na przykład, jeśli chcesz słuchać radia FM na częstotliwości 91,0, dostrój radio do tej częstotliwości.

W ten sam sposób router B jest skonfigurowany do odbierania komunikatów dla adresu multiemisji 224.0.0.5. Podczas nasłuchiwania tego kanału odbiera pakiet Hello wysłany przez router A i odpowiada własnym komunikatem.

Szkolenie Cisco 200-125 CCNA v3.0. Dzień 44: Wprowadzenie do OSPF

W tym przypadku sąsiedztwo można ustalić tylko wtedy, gdy odpowiedź B spełnia zestaw kryteriów. Pierwszym kryterium jest to, że częstotliwość wysyłania wiadomości Hello i czas oczekiwania na odpowiedź na tę wiadomość Dead Interval muszą być takie same dla obu routerów. Zazwyczaj martwy odstęp jest równy kilku wartościom licznika Hello. Tak więc, jeśli licznik Hello routera A wynosi 10 s, a router B wyśle ​​mu wiadomość po 30 s, podczas gdy Dead Interval wynosi 20 s, przyleganie nie nastąpi.

Drugim kryterium jest to, że oba routery muszą używać tego samego typu uwierzytelniania. W związku z tym hasła uwierzytelniające również muszą być zgodne.

Trzecim kryterium jest dopasowanie identyfikatorów stref Arial ID, czwartym dopasowanie długości prefiksu sieci. Jeśli router A zgłasza prefiks /24, router B również musi mieć prefiks sieci /24. W następnym filmie przyjrzymy się temu bardziej szczegółowo, na razie zaznaczę, że nie jest to maska ​​podsieci, tutaj routery używają odwróconej maski wieloznacznej. I oczywiście flagi obszaru Stub muszą być również zgodne, jeśli routery znajdują się w tej strefie.

Po sprawdzeniu tych kryteriów i jeśli są one zgodne, router B wysyła pakiet Hello do routera A. W przeciwieństwie do wiadomości A, router B zgłasza, że ​​widział router A i przedstawia się.

Szkolenie Cisco 200-125 CCNA v3.0. Dzień 44: Wprowadzenie do OSPF

W odpowiedzi na ten komunikat router A ponownie wysyła Hello do routera B, w którym potwierdza, że ​​widział także router B, kanał komunikacyjny pomiędzy nimi składa się z urządzeń 1.1.1.1 i 2.2.2.2, a sam jest urządzeniem 1.1.1.1 . To bardzo ważny etap kształtowania sąsiedztwa. W tym przypadku stosowane jest połączenie dwukierunkowe 2-WAY, ale co się stanie, jeśli mamy przełącznik z rozproszoną siecią złożoną z 4 routerów? W takim „współdzielonym” środowisku jeden z routerów powinien pełnić rolę wyznaczonego routera DR, a drugi powinien pełnić rolę wyznaczonego routera zapasowego, BDR

Szkolenie Cisco 200-125 CCNA v3.0. Dzień 44: Wprowadzenie do OSPF

Każde z tych urządzeń utworzy połączenie Full, czyli stan całkowitej przyległości, później sprawdzimy co to jest, jednak połączenie tego typu zostanie nawiązane tylko z DR i BDR; dwa dolne routery D i B będą nadal komunikują się ze sobą przy użyciu dwukierunkowego schematu połączeń „punkt-punkt”.

Oznacza to, że w przypadku DR i BDR wszystkie routery ustanawiają pełną relację sąsiedzką, a między sobą - połączenie punkt-punkt. Jest to bardzo ważne, ponieważ podczas dwukierunkowego połączenia pomiędzy sąsiednimi urządzeniami wszystkie parametry pakietu Hello muszą się zgadzać. W naszym przypadku wszystko do siebie pasuje, więc urządzenia bez problemu tworzą sąsiedztwo.

Gdy tylko zostanie nawiązana komunikacja dwukierunkowa, router A wysyła do routera B pakiet opisu bazy danych, czyli „opis bazy danych”, i przechodzi w stan ExStart – początek wymiany, czyli oczekiwanie na załadowanie. Deskryptor bazy danych to informacja podobna do spisu treści książki - jest to lista wszystkiego, co znajduje się w bazie danych routingu. W odpowiedzi router B wysyła opis swojej bazy danych do routera A i przechodzi w stan komunikacji z kanałem Exchange. Jeżeli w stanie Exchange router wykryje, że w swojej bazie danych brakuje jakichś informacji, przejdzie do stanu ładowania LOADING i rozpocznie wymianę komunikatów LSR, LSU i LSA ze swoim sąsiadem.

Szkolenie Cisco 200-125 CCNA v3.0. Dzień 44: Wprowadzenie do OSPF

Zatem router A wyśle ​​LSR do swojego sąsiada, który odpowie pakietem LSU, na który router A odpowie routerowi B komunikatem LSA. Ta wymiana będzie miała miejsce tyle razy, ile urządzenia będą chciały wymieniać komunikaty LSA. Stan LOADING oznacza, że ​​nie nastąpiła jeszcze pełna aktualizacja bazy LSA. Po pobraniu wszystkich danych oba urządzenia przejdą w stan PEŁNEGO przylegania.

Należy pamiętać, że przy połączeniu dwukierunkowym urządzenia znajdują się po prostu w stanie przylegania, a stan pełnego przylegania jest możliwy tylko pomiędzy routerami DR i BDR.Oznacza to, że każdy router informuje DR o zmianach w sieci, a wszystkie routery Dowiedz się o tych zmianach od DR

Wybór DR i BDR jest ważną kwestią. Przyjrzyjmy się, jak DR jest wybierany w ogólnym środowisku. Załóżmy, że nasz schemat ma trzy routery i przełącznik. Urządzenia OSPF najpierw porównują priorytet w wiadomościach Hello, a następnie porównują identyfikator routera.

Urządzenie o najwyższym priorytecie staje się DR. Jeśli priorytety dwóch urządzeń są zbieżne, wówczas spośród nich wybierane jest urządzenie o najwyższym ID routera i staje się ono DR.

Urządzenie z drugim najwyższym priorytetem lub drugim najwyższym identyfikatorem routera staje się zapasowym routerem dedykowanym BDR. W przypadku awarii DR zostanie natychmiast zastąpiony przez BDR. Zacznie pełnić rolę DR, a system wybierze inny BDR

Szkolenie Cisco 200-125 CCNA v3.0. Dzień 44: Wprowadzenie do OSPF

Mam nadzieję, że już dokonaliście wyboru DR i BDR, jeśli nie, to powrócę do tego zagadnienia w jednym z kolejnych filmów i wyjaśnię ten proces.

Do tej pory przyjrzeliśmy się, czym jest Hello, deskryptorem bazy danych oraz komunikatami LSR, LSU i LSA. Zanim przejdziemy do następnego tematu, porozmawiajmy trochę o kosztach protokołu OSPF.

Szkolenie Cisco 200-125 CCNA v3.0. Dzień 44: Wprowadzenie do OSPF

W Cisco koszt trasy obliczany jest ze wzoru na stosunek przepustowości referencyjnej, która domyślnie jest ustawiona na 100 Mbit/s, do kosztu kanału. Na przykład przy podłączaniu urządzeń przez port szeregowy prędkość wynosi 1.544 Mb/s, a koszt wyniesie 64. W przypadku korzystania z połączenia Ethernet o szybkości 10 Mb/s koszt wyniesie 10, a koszt połączenia FastEthernet z prędkość 100 Mb/s będzie wynosić 1.

Podczas korzystania z Gigabit Ethernet mamy prędkość 1000 Mb/s, ale w tym przypadku zawsze przyjmuje się, że prędkość wynosi 1. Jeśli więc masz w sieci Gigabit Ethernet, musisz zmienić domyślną wartość Ref. BW o 1000. W tym przypadku koszt wyniesie 1, a cała tabela zostanie przeliczona z wartościami kosztów rosnącymi 10-krotnie. Po utworzeniu sąsiedztwa i zbudowaniu bazy danych LSDB przechodzimy do tworzenia tablicy routingu.

Szkolenie Cisco 200-125 CCNA v3.0. Dzień 44: Wprowadzenie do OSPF

Po odebraniu bazy danych LSDB każdy router niezależnie rozpoczyna generowanie listy tras przy użyciu algorytmu SPF. W naszym schemacie router A utworzy dla siebie taką tabelę. Na przykład oblicza koszt trasy A-R1 i ustala, że ​​wynosi on 10. Aby ułatwić zrozumienie diagramu, załóżmy, że router A wyznacza optymalną trasę do routera B. Koszt łącza A-R1 wynosi 10 , łącze A-R2 wynosi 100, a koszt trasy A-R3 wynosi 11, czyli suma trasy A-R1(10) i R1-R3(1).

Jeśli router A chce dostać się do routera R4, może to zrobić albo trasą A-R1-R4, albo trasą A-R2-R4 i w obu przypadkach koszt tras będzie taki sam: 10+100 =100+10=110. Trasa A-R6 będzie kosztować 100+1= 101, czyli już lepiej. Następnie rozważamy ścieżkę do routera R5 wzdłuż trasy A-R1-R3-R5, której koszt wyniesie 10+1+100 = 111.

Ścieżkę do routera R7 można poprowadzić dwiema trasami: A-R1-R4-R7 lub A-R2-R6-R7. Koszt pierwszego wyniesie 210, drugiego 201, co oznacza, że ​​powinieneś wybrać 201. Zatem, aby dotrzeć do routera B, router A może skorzystać z 4 tras.

Szkolenie Cisco 200-125 CCNA v3.0. Dzień 44: Wprowadzenie do OSPF

Koszt trasy A-R1-R3-R5-B wyniesie 121. Trasa A-R1-R4-R7-B będzie kosztować 220. Trasa A-R2-R4-R7-B będzie kosztować 210, a A-R2- R6-R7-B ma koszt 211. Na tej podstawie router A wybierze trasę o najniższym koszcie równym 121 i umieści ją w tablicy routingu. To bardzo uproszczony schemat działania algorytmu SPF. Tak naprawdę tabela zawiera nie tylko oznaczenia routerów, przez które przebiega optymalna trasa, ale także oznaczenia łączących je portów i wszystkie inne niezbędne informacje.

Przyjrzyjmy się innemu tematowi, który dotyczy stref routingu. Zwykle podczas konfigurowania firmowych urządzeń OSPF wszystkie one znajdują się w jednej wspólnej strefie.

Szkolenie Cisco 200-125 CCNA v3.0. Dzień 44: Wprowadzenie do OSPF

Co się stanie, jeśli urządzenie podłączone do routera R3 nagle ulegnie awarii? Router R3 natychmiast rozpocznie wysyłanie komunikatu do routerów R5 i R1, że kanał z tym urządzeniem już nie działa, a wszystkie routery zaczną wymieniać aktualizacje dotyczące tego zdarzenia.

Szkolenie Cisco 200-125 CCNA v3.0. Dzień 44: Wprowadzenie do OSPF

Jeśli masz 100 routerów, wszystkie zaktualizują informacje o stanie łącza, ponieważ znajdują się w tej samej wspólnej strefie. To samo stanie się w przypadku awarii jednego z sąsiednich routerów – wszystkie urządzenia w strefie będą wymieniać aktualizacje LSA. Po wymianie takich komunikatów zmieni się sama topologia sieci. Gdy to nastąpi, SPF przeliczy tablice routingu zgodnie ze zmienionymi warunkami. Jest to bardzo duży proces i jeśli w jednej strefie masz tysiąc urządzeń, musisz kontrolować wielkość pamięci routerów, aby wystarczyła do przechowywania wszystkich LSA i ogromnej bazy danych stanu łączy LSDB. Gdy tylko w jakiejś części strefy zajdą zmiany, algorytm SPF natychmiast przelicza trasy. Domyślnie LSA jest aktualizowany co 30 minut. Proces ten nie zachodzi na wszystkich urządzeniach jednocześnie, ale w każdym przypadku aktualizacje są wykonywane przez każdy router co 30 minut. Im więcej urządzeń sieciowych. Im więcej pamięci i czasu potrzeba na aktualizację LSDB.

Problem ten można rozwiązać dzieląc jedną wspólną strefę na kilka oddzielnych stref, czyli stosując multistrefę. Aby to zrobić, musisz mieć plan lub schemat całej sieci, którą zarządzasz. OBSZAR 0 to Twój główny obszar. To miejsce, w którym realizowane jest połączenie z siecią zewnętrzną, np. dostęp do Internetu. Tworząc nowe strefy należy kierować się zasadą: w każdej strefie musi znajdować się jeden ABR, Area Border Router. Router brzegowy ma jeden interfejs w jednej strefie i drugi interfejs w innej strefie. Przykładowo router R5 posiada interfejsy w strefie 1 i strefie 0. Jak mówiłem każda ze stref musi być podłączona do strefy zero, czyli posiadać router brzegowy, którego jeden interfejs jest podłączony do AREA 0.

Szkolenie Cisco 200-125 CCNA v3.0. Dzień 44: Wprowadzenie do OSPF

Załóżmy, że połączenie R6-R7 nie powiodło się. W takim przypadku aktualizacja LSA będzie rozprzestrzeniać się tylko w OBSZAR 1 i będzie miała wpływ tylko na tę strefę. Urządzenia w strefie 2 i strefie 0 nawet nie będą o tym wiedzieć. Router brzegowy R5 podsumowuje informacje o tym, co dzieje się w jego strefie i wysyła podsumowanie informacji o stanie sieci do głównej strefy AREA 0. Urządzenia w jednej strefie nie muszą być świadome wszystkich zmian LSA w innych strefach, ponieważ router ABR będzie przesyłać podsumowanie informacji o trasie z jednej strefy do drugiej.

Jeśli nie masz całkowitej jasności co do koncepcji stref, możesz dowiedzieć się więcej w następnych lekcjach, kiedy zajmiemy się konfiguracją routingu OSPF i przyjrzymy się kilku przykładom.


Dziękujemy za pobyt z nami. Podobają Ci się nasze artykuły? Chcesz zobaczyć więcej ciekawych treści? Wesprzyj nas składając zamówienie lub polecając znajomym, 30% zniżki dla użytkowników Habr na unikalny odpowiednik serwerów klasy podstawowej, który został przez nas wymyślony dla Ciebie: Cała prawda o VPS (KVM) E5-2650 v4 (6 rdzeni) 10GB DDR4 240GB SSD 1Gbps od 20$ czyli jak udostępnić serwer? (dostępne z RAID1 i RAID10, do 24 rdzeni i do 40 GB DDR4).

Dell R730xd 2 razy tańszy? Tylko tutaj 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6 GHz 14C 64 GB DDR4 4x960 GB SSD 1 Gb/s 100 Telewizor od 199 USD w Holandii! Dell R420 — 2x E5-2430 2.2 GHz 6C 128 GB DDR3 2x960 GB SSD 1 Gb/s 100 TB — od 99 USD! Czytać o Jak zbudować firmę infrastrukturalną klasy z wykorzystaniem serwerów Dell R730xd E5-2650 v4 o wartości 9000 euro za grosz?

Źródło: www.habr.com

Dodaj komentarz