Журнал LinuxFormat - перейти на главную

LXF168:Се­ти. Па­ке­ты и со­единения

Материал из Linuxformat
(Различия между версиями)
Перейти к: навигация, поиск
(Сеть: Изу­ча­ем па­ке­ты, фи­зи­че­ские со­еди­не­ния и ад­ре­са­цию)
(Сеть: Изу­ча­ем па­ке­ты, фи­зи­че­ские со­еди­не­ния и ад­ре­са­цию)
 
Строка 11: Строка 11:
 
На дан­ном уро­ке мы под­ру­жим вас с тре­мя ки­та­ми, на ко­то­рых зи­ж­дет­ся вся жизнь се­тей – с па­ке­та­ми, фи­зи­че­­ски­­ми со­единения­ми и ад­ре­са­ци­ей. А на сле­дую­щем – соз­да­дим несколь­ко вир­ту­аль­ных ма­шин и по­стро­им из них несколь­ко про­стых се­тей.
 
На дан­ном уро­ке мы под­ру­жим вас с тре­мя ки­та­ми, на ко­то­рых зи­ж­дет­ся вся жизнь се­тей – с па­ке­та­ми, фи­зи­че­­ски­­ми со­единения­ми и ад­ре­са­ци­ей. А на сле­дую­щем – соз­да­дим несколь­ко вир­ту­аль­ных ма­шин и по­стро­им из них несколь­ко про­стых се­тей.
  
Се­ти с па­кет­ной ком­му­та­ци­ей
+
===Се­ти с па­кет­ной ком­му­та­ци­ей===
  
 
Для на­ча­ла по­го­во­рим о том, что же та­кое сеть: го­во­ря по­про­сту, это два или бо­лее ком­пь­ю­те­ров, свя­зан­ных друг с дру­гом че­рез фи­зи­че­скую сре­ду, ко­то­рой мо­жет быть мед­ный про­водник (Ethernet), оп­то­во­ло­кон­ный ка­бель или ра­дио­вол­ны (Wi-Fi). От­прав­ляя сиг­на­лы че­рез эту сре­ду, ком­пь­ю­те­ры мо­гут об­менивать­ся ин­фор­ма­ци­ей друг с дру­гом.
 
Для на­ча­ла по­го­во­рим о том, что же та­кое сеть: го­во­ря по­про­сту, это два или бо­лее ком­пь­ю­те­ров, свя­зан­ных друг с дру­гом че­рез фи­зи­че­скую сре­ду, ко­то­рой мо­жет быть мед­ный про­водник (Ethernet), оп­то­во­ло­кон­ный ка­бель или ра­дио­вол­ны (Wi-Fi). От­прав­ляя сиг­на­лы че­рез эту сре­ду, ком­пь­ю­те­ры мо­гут об­менивать­ся ин­фор­ма­ци­ей друг с дру­гом.
Строка 24: Строка 24:
  
 
При по­те­ре па­ке­та принимаю­щий ком­пь­ю­тер уви­дит, что час­ти по­то­ка не хва­та­ет, и ему останет­ся за­про­сить по­втор­ную от­прав­ку толь­ко от­сут­ст­вую­ще­го па­ке­та, а не все­го по­то­ка. Бо­лее то­го, так как па­ке­ты раз­би­ва­ют дан­ные на неза­ви­си­мые фраг­мен­ты, все ком­пь­ю­те­ры, ко­то­рые поль­зу­ют­ся сре­дой, мо­гут пе­ре­да­вать па­ке­ты (а не це­лые фай­лы) по оче­ре­ди, то есть смо­гут ра­бо­тать со сре­дой бо­лее эф­фек­тив­но. Эти па­ке­ты – не про­сто аб­ст­ракт­ная идея: вы мо­же­те по­смот­реть, как от­дель­ные па­ке­ты пе­ре­да­ют­ся по се­ти. Для это­го уста­но­ви­те про­грам­му tcpdump с по­мо­щью менед­же­ра па­ке­тов сво­его ди­ст­ри­бу­ти­ва Linux. По­сле уста­нов­ки от­крой­те тер­ми­нал и най­ди­те, ка­кое уст­рой­ст­во сей­час пре­достав­ля­ет се­те­вое со­единение. Ес­ли ак­тив­ное со­единение у вас все­го од­но, это мож­но сде­лать ко­ман­дой
 
При по­те­ре па­ке­та принимаю­щий ком­пь­ю­тер уви­дит, что час­ти по­то­ка не хва­та­ет, и ему останет­ся за­про­сить по­втор­ную от­прав­ку толь­ко от­сут­ст­вую­ще­го па­ке­та, а не все­го по­то­ка. Бо­лее то­го, так как па­ке­ты раз­би­ва­ют дан­ные на неза­ви­си­мые фраг­мен­ты, все ком­пь­ю­те­ры, ко­то­рые поль­зу­ют­ся сре­дой, мо­гут пе­ре­да­вать па­ке­ты (а не це­лые фай­лы) по оче­ре­ди, то есть смо­гут ра­бо­тать со сре­дой бо­лее эф­фек­тив­но. Эти па­ке­ты – не про­сто аб­ст­ракт­ная идея: вы мо­же­те по­смот­реть, как от­дель­ные па­ке­ты пе­ре­да­ют­ся по се­ти. Для это­го уста­но­ви­те про­грам­му tcpdump с по­мо­щью менед­же­ра па­ке­тов сво­его ди­ст­ри­бу­ти­ва Linux. По­сле уста­нов­ки от­крой­те тер­ми­нал и най­ди­те, ка­кое уст­рой­ст­во сей­час пре­достав­ля­ет се­те­вое со­единение. Ес­ли ак­тив­ное со­единение у вас все­го од­но, это мож­но сде­лать ко­ман­дой
 +
{{Врезка|left|Заголовок= Классическая мо­де­ль сети|Ширина=98%|Содержание=В этой ста­тье мы за­гля­ды­ва­ем глу­бо­ко внутрь се­ти, от фи­зи­че­­ской сре­ды и па­ке­тов до MAC-ад­ре­сов и мар­шру­ти­зи­руе­мых IP-се­тей. Труд­но да­же по­нять, как все это со­че­та­ет­ся друг с дру­гом, а пред­ставь­те се­бе, как труд­но соз­да­вать сис­те­мы, в ко­то­рых все это ра­бо­та­ет! Это боль­шая слож­ность, и для пра­виль­ной ра­бо­ты се­те­во­го под­клю­чения мно­же­ст­во ком­понен­тов долж­ны ра­бо­тать вме­сте.
 +
 +
Что­бы уп­ро­стить соз­дание се­те­вых про­грамм и уст­ройств, ра­бо­таю­щих друг с дру­гом, несколь­ко ум­ных лю­дей со­бра­лись вме­сте и при­ду­ма­ли мо­дель OSI (Open Systems Interconnection – взаи­мо­дей­ст­вие от­кры­тых сис­тем). В OSI оп­ре­де­ля­ет­ся семь уровней, ка­ж­дый из ко­то­рых за­да­ет на­бор функ­ций, имею­щих пер­во­оче­ред­ное зна­чение для пра­виль­ной ра­бо­ты се­ти.
 +
 +
Ка­ж­дый уро­вень пре­достав­ля­ет оп­ре­де­лен­ные сер­ви­сы, опи­ра­ясь на ниже­ле­жа­щий уро­вень, но не обя­зан знать, как реа­ли­зо­ва­ны про­чие уровни над ним – он дол­жен толь­ко уметь взаи­мо­дей­ст­во­вать с бо­лее низ­ки­ми уров­ня­ми. Это оз­на­ча­ет, что уровни мож­но соз­да­вать и про­ве­рять от­дель­но и что мож­но иметь множество раз­лич­ных реа­ли­за­ций раз­лич­ных функ­ций (на­при­мер, применять оп­то­во­лок­но или Ethernet в ка­че­­ст­ве фи­зи­че­­ско­­го уров­ня) без необ­хо­ди­мо­сти заме­ны всех осталь­ных ком­понен­тов.
 +
 +
На на­шем уро­ке мы рас­кро­ем три пер­вых уров­ня мо­де­ли OSI:
 +
 +
» Фи­зи­че­­ский уро­вень, оп­ре­де­ляю­щий, как элек­три­че­­ские сиг­на­лы пе­ре­да­ют­ся по оп­ре­де­лен­ной фи­зи­че­­ской сре­де.
 +
 +
» Ка­наль­ный уро­вень, оп­ре­де­ляю­щий, как хосты фи­зи­че­­ски иден­ти­фи­ци­ру­ют­ся в се­ти, т. е. с по­мо­щью MAC-ад­ре­сов.
 +
 +
» Се­те­вой уро­вень, оп­ре­де­ляю­щий, как па­ке­ты марш­ру­ти­зи­ру­ют­ся ме­ж­ду се­тя­ми и как на­зна­ча­ют­ся ло­ги­че­­ские ад­ре­са.
 +
 +
Че­ты­ре остав­ших­ся уров­ня от­ве­ча­ют за под­держ­ку на­деж­ных со­единений ме­ж­ду ком­пь­ю­те­ра­ми, а так­же пред­став­ление и ис­поль­зо­вание пе­ре­дан­ных дан­ных на уровне при­ло­жения. Сю­да от­но­сят­ся аб­бре­виа­ту­ры, ко­то­рые вам на­вер­ня­ка зна­ко­мы: это про­то­ко­лы TCP и UDP на уровне 4, ме­то­ды ко­ди­ро­вания фай­лов UTF, ASCII, JPG и т. д. на уровне 6, про­то­ко­лы HTTP (ра­бо­та с веб-сай­та­ми), FTP (пе­ре­да­ча фай­лов) и SMTP (пе­ре­да­ча поч­ты) на уровне се­те­вых при­ло­жений 7.}}
  
 
ip a | grep “state UP”
 
ip a | grep “state UP”
Строка 37: Строка 52:
 
Та­ким об­ра­зом очень удоб­но ди­аг­но­сти­ро­вать про­бле­мы в се­ти. На­при­мер, ес­ли вам не уда­ет­ся за­ста­вить пра­виль­но ра­бо­тать DHCP, за­пусти­те от­сле­жи­вание па­ке­та на сер­ве­ре DHCP, и уз­нае­те, по­лу­ча­ет ли он за­про­сы на ад­ре­са, от­ве­ча­ет ли он на за­про­сы, бло­ки­ру­ют­ся ли па­ке­ты бранд­мау­эром – это по­мо­жет най­ти ис­точник про­бле­мы.
 
Та­ким об­ра­зом очень удоб­но ди­аг­но­сти­ро­вать про­бле­мы в се­ти. На­при­мер, ес­ли вам не уда­ет­ся за­ста­вить пра­виль­но ра­бо­тать DHCP, за­пусти­те от­сле­жи­вание па­ке­та на сер­ве­ре DHCP, и уз­нае­те, по­лу­ча­ет ли он за­про­сы на ад­ре­са, от­ве­ча­ет ли он на за­про­сы, бло­ки­ру­ют­ся ли па­ке­ты бранд­мау­эром – это по­мо­жет най­ти ис­точник про­бле­мы.
  
MAC-ад­ре­са
+
===MAC-ад­ре­са===
  
 
Зная, сколь­ко ком­пь­ю­те­ров мо­гут на­хо­дить­ся в од­ной фи­зи­че­­ской се­ти, вы мо­же­те по­ин­те­ре­со­вать­ся, как они иден­ти­фи­ци­ру­ют друг дру­га в се­ти, т. е. как от­пра­вить ин­фор­ма­цию толь­ко на ком­пь­ю­тер Бо­ба, а не на ком­пь­ю­тер Али­сы?
 
Зная, сколь­ко ком­пь­ю­те­ров мо­гут на­хо­дить­ся в од­ной фи­зи­че­­ской се­ти, вы мо­же­те по­ин­те­ре­со­вать­ся, как они иден­ти­фи­ци­ру­ют друг дру­га в се­ти, т. е. как от­пра­вить ин­фор­ма­цию толь­ко на ком­пь­ю­тер Бо­ба, а не на ком­пь­ю­тер Али­сы?
Строка 63: Строка 78:
 
Та­ким об­ра­зом умень­ша­ет­ся объ­ем тра­фи­ка, пе­ре­сы­лае­мого ме­ж­ду ин­тер­фей­са­ми, и снижа­ет­ся их кон­ку­рен­ция – то есть умень­ша­ет­ся ко­ли­че­­ст­во кол­ли­зий, и об­мен дан­ны­ми ста­но­вится бо­лее на­деж­ным.
 
Та­ким об­ра­зом умень­ша­ет­ся объ­ем тра­фи­ка, пе­ре­сы­лае­мого ме­ж­ду ин­тер­фей­са­ми, и снижа­ет­ся их кон­ку­рен­ция – то есть умень­ша­ет­ся ко­ли­че­­ст­во кол­ли­зий, и об­мен дан­ны­ми ста­но­вится бо­лее на­деж­ным.
  
Ло­ги­че­­ские се­ти
+
===Ло­ги­че­­ские се­ти===
  
 
Од­на­ко ис­поль­зо­вание ком­му­та­то­ров для рас­ши­рения се­тей и умень­шения кол­ли­зий – не конец ис­то­рии, так как у MAC-ад­ре­сов од­но­род­ная [flat] струк­ту­ра. Это зна­чит, что их труд­но клас­си­фи­ци­ро­вать или груп­пи­ро­вать.
 
Од­на­ко ис­поль­зо­вание ком­му­та­то­ров для рас­ши­рения се­тей и умень­шения кол­ли­зий – не конец ис­то­рии, так как у MAC-ад­ре­сов од­но­род­ная [flat] струк­ту­ра. Это зна­чит, что их труд­но клас­си­фи­ци­ро­вать или груп­пи­ро­вать.
Строка 75: Строка 90:
 
В от­ли­чие от пред­став­ления хоста в се­ти пол­ным ад­ре­сом, этот ад­рес раз­бит на две час­ти – ад­рес се­ти и ад­рес хоста – с по­мо­щью так на­зы­вае­мо­го пре­фик­са. Пре­фикс – это чис­ло от 0 до 32, оп­ре­де­ляю­щее, ка­кая часть IP-ад­ре­са яв­ля­ет­ся ад­ре­сом се­ти, а ка­кая – ад­ре­сом хоста. Пол­ный ад­рес за­пи­сы­ва­ет­ся в сле­дую­щем ви­де: 192.168.1.2/24.
 
В от­ли­чие от пред­став­ления хоста в се­ти пол­ным ад­ре­сом, этот ад­рес раз­бит на две час­ти – ад­рес се­ти и ад­рес хоста – с по­мо­щью так на­зы­вае­мо­го пре­фик­са. Пре­фикс – это чис­ло от 0 до 32, оп­ре­де­ляю­щее, ка­кая часть IP-ад­ре­са яв­ля­ет­ся ад­ре­сом се­ти, а ка­кая – ад­ре­сом хоста. Пол­ный ад­рес за­пи­сы­ва­ет­ся в сле­дую­щем ви­де: 192.168.1.2/24.
  
Со­еди­ня­ем оба вме­сте
+
===Со­еди­ня­ем оба вме­сте===
  
 
Эти ло­ги­че­­ские ад­ре­са свя­зы­ва­ют­ся с фи­зи­че­­ски­­ми MAC-ад­ре­са­ми, о ко­то­рых мы го­во­ри­ли ранее, при этом ка­ж­дый IP-ад­рес свя­зан с кон­крет­ным MAC-ад­ре­сом. Для про­смот­ра этой ин­фор­ма­ции на сво­ем ком­пь­ю­те­ре об­ра­ти­тесь к ip neighbour:
 
Эти ло­ги­че­­ские ад­ре­са свя­зы­ва­ют­ся с фи­зи­че­­ски­­ми MAC-ад­ре­са­ми, о ко­то­рых мы го­во­ри­ли ранее, при этом ка­ж­дый IP-ад­рес свя­зан с кон­крет­ным MAC-ад­ре­сом. Для про­смот­ра этой ин­фор­ма­ции на сво­ем ком­пь­ю­те­ре об­ра­ти­тесь к ip neighbour:
Строка 89: Строка 104:
 
Ес­ли в этих дру­гих се­тях сотни, ты­ся­чи или да­же де­сят­ки ты­сяч ком­пь­ю­те­ров, вы пой­ме­те, как это снижа­ет объ­ем ин­фор­ма­ции, ко­то­рую дол­жен хранить ка­ж­дый ро­утер. Вме­сто MAC-ад­ре­сов всех этих хостов он дол­жен обес­пе­чить хранение толь­ко од­но­го ад­ре­са для ка­ж­дой се­ти – ад­ре­са шлю­за.
 
Ес­ли в этих дру­гих се­тях сотни, ты­ся­чи или да­же де­сят­ки ты­сяч ком­пь­ю­те­ров, вы пой­ме­те, как это снижа­ет объ­ем ин­фор­ма­ции, ко­то­рую дол­жен хранить ка­ж­дый ро­утер. Вме­сто MAC-ад­ре­сов всех этих хостов он дол­жен обес­пе­чить хранение толь­ко од­но­го ад­ре­са для ка­ж­дой се­ти – ад­ре­са шлю­за.
  
Ис­сле­до­вание ин­фор­ма­ции о мар­шру­ти­за­ции
+
===Ис­сле­до­вание ин­фор­ма­ции о мар­шру­ти­за­ции===
  
 
Знание пу­ти от­прав­ки па­ке­тов – на­при­мер, с Ком­пь­ю­те­ра A на Ро­утер A и за­тем с Ро­уте­ра A на Ро­утер B и, на­конец, на Ком­пь­ю­тер B – на­зы­ва­ет­ся ин­фор­ма­ци­ей о мар­шру­ти­за­ции, так как это ин­фор­ма­ция о пу­ти, ко­то­рый дол­жен прой­ти па­кет.
 
Знание пу­ти от­прав­ки па­ке­тов – на­при­мер, с Ком­пь­ю­те­ра A на Ро­утер A и за­тем с Ро­уте­ра A на Ро­утер B и, на­конец, на Ком­пь­ю­тер B – на­зы­ва­ет­ся ин­фор­ма­ци­ей о мар­шру­ти­за­ции, так как это ин­фор­ма­ция о пу­ти, ко­то­рый дол­жен прой­ти па­кет.
Строка 111: Строка 126:
 
arping 192.168.1.1
 
arping 192.168.1.1
  
с IP-ад­ре­сом шлю­за по умол­чанию. Взгля­нув на вы­вод tcpdump, вы те­перь долж­ны уви­деть за­прос и от­вет ARP. |
+
с IP-ад­ре­сом шлю­за по умол­чанию. Взгля­нув на вы­вод tcpdump, вы те­перь долж­ны уви­деть за­прос и от­вет ARP.  
 +
 
 +
{{Врезка|left|Заголовок=Подробнее про IP-ад­ре­са |Ширина=98%|Содержание=IP-ад­ре­са чуть сложнее, чем бу­дет рас­ска­за­но да­лее в основ­ной ста­тье. Хо­тя обыч­но IP-ад­рес за­пи­сы­ва­ет­ся в ви­де че­ты­рех чи­сел, раз­де­лен­ных точ­ка­ми, на са­мом де­ле это од­но 32-бит­ное дво­ич­ное чис­ло. Ка­ж­дое из че­ты­рех чи­сел пред­став­ля­ет груп­пу из вось­ми бит (ок­тет) дво­ич­но­го ад­ре­са, на­при­мер:
 +
 
 +
192.168.1.1
 +
 
 +
11000000.10101000.00000001.00000001
 +
 
 +
Это оз­на­ча­ет, что ка­ж­дое из че­ты­рех чи­сел IP-ад­ре­са мо­жет быть от 0 до 255.
 +
 
 +
Пре­фикс, о ко­то­ром бу­дет го­во­рить­ся, оп­ре­де­ля­ет, сколь­ко раз­ря­дов ад­ре­са (спе­ре­ди) при­над­ле­жат к се­те­вой час­ти ад­ре­са; его мож­но рас­смат­ри­вать как на­кла­ды­вае­мое на IP-ад­рес еще од­но дво­ич­ное чис­ло, в ко­то­ром в 1 уста­нов­ле­ны би­ты, со­от­вет­ст­вую­щие се­те­вой час­ти ад­ре­са:
 +
 
 +
11000000.10101000.00000001.00000001
 +
 
 +
11111111.11111111.11111111.00000000
 +
 
 +
В дан­ном слу­чае, в IP-ад­ре­се 192.168.1.1 пер­вые три ок­те­та (24 би­та) пред­став­ля­ют се­те­вую часть ад­ре­са, и хостам мож­но при­сваи­вать уникаль­ные но­ме­ра толь­ко из по­следнего ок­те­та. По­это­му в вы­во­де ко­ман­ды ip route мы ви­дим .0/24. Сле­до­ва­тель­но, в се­ти 192.168.1.0/24 есть все­го 255 уникаль­ных ад­ре­сов, ко­то­рые мож­но на­зна­чить хостам. По фак­ту, их да­же 253, так как пер­вый и по­следний ад­ре­са ре­зер­ви­ру­ют­ся для осо­бых це­лей. Пер­вый ад­рес – это ад­рес се­ти, и он обо­зна­ча­ет не хост в се­ти, а са­му сеть. По­следний ад­рес ис­поль­зу­ет­ся для от­прав­ки ши­ро­ко­ве­ща­тель­ных со­об­щений, ад­ре­со­ван­ных всем хостам в се­ти.
 +
 
 +
Дру­гой при­мер: в се­ти 192.168.1.0/28 все­го 14 доступ­ных ад­ре­сов, так как мак­си­маль­ное ко­ли­че­­ст­во ад­ре­сов, пред­ста­ви­мых че­тырь­мя дво­ич­ны­ми циф­ра­ми – 16 (2^4), а пер­вый и по­следний ад­ре­са за­ре­зер­ви­ро­ва­ны. }}
 +
|

Текущая версия на 20:16, 10 ноября 2018

Содержание

[править] Сеть: Изу­ча­ем па­ке­ты, фи­зи­че­ские со­еди­не­ния и ад­ре­са­цию

Ком­пь­ю­тер­ные се­ти: Ос­но­вы.

Сде­лай­те пер­вые ша­ги к по­ни­ма­нию се­тей и объ­е­ди­ни­те свои Linux-ком­пь­ю­те­ры – ос­нов­ные кон­цеп­ции се­ти вам рас­тол­ку­ет Джо­на­тан Ро­бертс.

(thumbnail)
Наш эксперт Джо­на­тан Ро­бертс сбе­жал из Ба­шен Linux Format, что­бы по­ис­кать сча­стья в ка­че­­ст­ве си­сад­ми­на.

На страницах Linux Format мы из­ве­ли мас­су вре­мени на объ­яснения, как де­лать те или иные ве­щи – от соз­дания анима­ций и ре­дак­ти­ро­вания изо­бра­жений до ра­бо­ты с команд­ной стро­кой и шиф­ро­вания дан­ных. При­чем боль­шую часть это­го вре­мени мы не поль­зо­ва­лись на­ши­ми ком­пь­ю­те­ра­ми по­оди­ноч­ке, а со­единили их друг с дру­гом, раз­де­лив хра­ня­щие­ся на них фай­лы и ин­фор­ма­цию еще и ме­ж­ду на­ши­ми до­ма­ми, а так­же че­рез Ин­тернет.

Что­бы по­мочь вам при­менить на­вы­ки ра­бо­ты в Linux в этой опу­тан­ной се­тью сре­де, сле­дую­щие два ме­ся­ца мы по­тра­тим на зна­ком­ст­во с осно­ва­ми ра­бо­ты се­ти. Упор бу­дет сде­лан на прак­тичес­кую работу: на­ря­ду с пояснением тео­ри­и и тер­ми­но­ло­ги­и мы нау­чим вас поль­зо­вать­ся ути­ли­та­ми Linux для ис­сле­до­вания и по­строения се­тей.

На дан­ном уро­ке мы под­ру­жим вас с тре­мя ки­та­ми, на ко­то­рых зи­ж­дет­ся вся жизнь се­тей – с па­ке­та­ми, фи­зи­че­­ски­­ми со­единения­ми и ад­ре­са­ци­ей. А на сле­дую­щем – соз­да­дим несколь­ко вир­ту­аль­ных ма­шин и по­стро­им из них несколь­ко про­стых се­тей.

[править] Се­ти с па­кет­ной ком­му­та­ци­ей

Для на­ча­ла по­го­во­рим о том, что же та­кое сеть: го­во­ря по­про­сту, это два или бо­лее ком­пь­ю­те­ров, свя­зан­ных друг с дру­гом че­рез фи­зи­че­скую сре­ду, ко­то­рой мо­жет быть мед­ный про­водник (Ethernet), оп­то­во­ло­кон­ный ка­бель или ра­дио­вол­ны (Wi-Fi). От­прав­ляя сиг­на­лы че­рез эту сре­ду, ком­пь­ю­те­ры мо­гут об­менивать­ся ин­фор­ма­ци­ей друг с дру­гом.

Вро­де ниче­го слож­но­го: со­единить два ком­пь­ю­те­ра про­во­дом, а они бу­дут от­прав­лять по нему элек­три­че­­ские сиг­на­лы и де­лить­ся друг с дру­гом ин­фор­ма­ци­ей. Но вот бе­да: да­же в та­кой про­стой мо­де­ли (это мы еще не ка­са­ем­ся то­го, как элек­три­че­­ские сиг­на­лы ко­ди­ру­ют­ся и де­ко­ди­ру­ют­ся!) бы­ст­ро возника­ют про­бле­мы.

Ин­фор­ма­ция, ко­то­рой долж­ны об­менивать­ся ком­пь­ю­те­ры, обыч­но до­воль­но объ­ем­ная и слож­ная, со­стоя­щая из мно­гих мил­лио­нов бит. Ее мож­но от­прав­лять по про­во­ду по­сле­до­ва­тель­но – что занима­ет несколь­ко ми­нут, ча­сов или да­же дней. Когда ком­пь­ю­те­ров в се­ти все­го два, пе­чаль неве­ли­ка: один мо­жет про­сто по­до­ж­дать, по­ка не по­лу­чит сиг­нал об окон­чании, и за­тем от­пра­вит свою ин­фор­ма­цию в от­вет.

На­стоя­щие про­бле­мы на­чи­на­ют­ся в боль­ших се­тях, с де­сят­ка­ми или сот­ня­ми ком­пь­ю­те­ров, под­клю­чен­ных к об­щей сре­де. По­ка один ком­пь­ю­тер от­прав­ля­ет ин­фор­ма­цию, ни один из осталь­ных не смо­жет восполь­зо­вать­ся пе­ре­даю­щей сре­дой. Ху­же то­го: ес­ли сиг­нал пре­рвет­ся, при­дет­ся на­чать от­прав­ку за­но­во – а ес­ли файл был боль­шим, оно уж со­всем обид­но!

В ком­пь­ю­тер­ных се­тях эти две про­бле­мы ре­ша­ют­ся с по­мо­щью па­ке­тов. Боль­шие объ­е­мы ин­фор­ма­ции раз­би­ва­ют­ся на фраг­менты мень­ше­го раз­ме­ра (лег­че управ­ляе­мые), ко­то­рые на­зы­ва­ют­ся па­ке­та­ми. На­ря­ду с пе­ре­да­вае­мой ин­фор­ма­ци­ей па­ке­ты со­дер­жат ме­та­дан­ные, ко­то­рые, сре­ди про­че­го, ого­ва­ри­ва­ют ме­сто­по­ло­жение па­ке­та в по­то­ке ин­фор­ма­ции.

При по­те­ре па­ке­та принимаю­щий ком­пь­ю­тер уви­дит, что час­ти по­то­ка не хва­та­ет, и ему останет­ся за­про­сить по­втор­ную от­прав­ку толь­ко от­сут­ст­вую­ще­го па­ке­та, а не все­го по­то­ка. Бо­лее то­го, так как па­ке­ты раз­би­ва­ют дан­ные на неза­ви­си­мые фраг­мен­ты, все ком­пь­ю­те­ры, ко­то­рые поль­зу­ют­ся сре­дой, мо­гут пе­ре­да­вать па­ке­ты (а не це­лые фай­лы) по оче­ре­ди, то есть смо­гут ра­бо­тать со сре­дой бо­лее эф­фек­тив­но. Эти па­ке­ты – не про­сто аб­ст­ракт­ная идея: вы мо­же­те по­смот­реть, как от­дель­ные па­ке­ты пе­ре­да­ют­ся по се­ти. Для это­го уста­но­ви­те про­грам­му tcpdump с по­мо­щью менед­же­ра па­ке­тов сво­его ди­ст­ри­бу­ти­ва Linux. По­сле уста­нов­ки от­крой­те тер­ми­нал и най­ди­те, ка­кое уст­рой­ст­во сей­час пре­достав­ля­ет се­те­вое со­единение. Ес­ли ак­тив­ное со­единение у вас все­го од­но, это мож­но сде­лать ко­ман­дой

ip a | grep “state UP”

Ко­ман­да ip вы­во­дит ин­фор­ма­цию о се­те­вых под­клю­чениях – по­поз­же мы по­зна­ко­мим­ся с ней бли­же – а ко­ман­да grep фильт­ру­ет ре­зуль­тат, что­бы мы ви­де­ли толь­ко под­клю­чения в со­стоянии ’up‘, то есть ак­тив­ные. Нас ин­те­ре­су­ет фраг­мент в на­ча­ле стро­ки – ско­рее все­го это eth0, wlan0 или em1, в за­ви­си­мо­сти от кон­фи­гу­ра­ции. Его мож­но ука­зать как па­ра­метр ко­ман­де tcpdump и по­на­блю­дать за се­те­вым об­щением. От имени су­пер­поль­зо­ва­те­ля-root вы­полните ко­ман­ду:

tcpdump -i wlan0

где wlan0 – уст­рой­ст­во, ко­то­рое мы об­на­ру­жи­ли вы­ше. За­тем от­крой­те брау­зер и зай­ди­те на ка­кой-нибудь сайт. Вер­нув­шись в тер­ми­нал, вы уви­ди­те, как эк­ран за­пол­ня­ет­ся стро­ка­ми тек­ста. Ка­ж­дая стро­ка пред­став­ля­ет па­кет, от­прав­лен­ный ме­ж­ду ва­шим ком­пь­ю­те­ром и сер­ве­ром для за­груз­ки web-страницы, и в ка­ж­дом па­ке­те есть ин­фор­ма­ция о нем, вклю­чая вре­мя прие­ма или от­прав­ки, ком­пь­ю­те­ры (или хосты), с ко­то­рых и на ко­то­рые он был от­прав­лен, и мно­гое дру­гое.

Вы­вод ко­ман­ды и со­дер­жи­мое па­ке­тов (в тер­ми­на­ле ото­бра­жа­ют­ся толь­ко за­го­лов­ки па­ке­тов) мож­но со­хранить в фай­ле, при­пи­сав к ко­ман­де па­ра­метр -w и имя фай­ла, а по­том про­ана­ли­зи­ро­вать в гра­фи­че­­ской ути­ли­те на­по­до­бие Wireshark.

Та­ким об­ра­зом очень удоб­но ди­аг­но­сти­ро­вать про­бле­мы в се­ти. На­при­мер, ес­ли вам не уда­ет­ся за­ста­вить пра­виль­но ра­бо­тать DHCP, за­пусти­те от­сле­жи­вание па­ке­та на сер­ве­ре DHCP, и уз­нае­те, по­лу­ча­ет ли он за­про­сы на ад­ре­са, от­ве­ча­ет ли он на за­про­сы, бло­ки­ру­ют­ся ли па­ке­ты бранд­мау­эром – это по­мо­жет най­ти ис­точник про­бле­мы.

[править] MAC-ад­ре­са

Зная, сколь­ко ком­пь­ю­те­ров мо­гут на­хо­дить­ся в од­ной фи­зи­че­­ской се­ти, вы мо­же­те по­ин­те­ре­со­вать­ся, как они иден­ти­фи­ци­ру­ют друг дру­га в се­ти, т. е. как от­пра­вить ин­фор­ма­цию толь­ко на ком­пь­ю­тер Бо­ба, а не на ком­пь­ю­тер Али­сы?

На са­мом де­ле, ком­пь­ю­те­ры, под­клю­чен­ные к од­ной и той же фи­зи­че­­ской сре­де (на­при­мер, к мед­но­му про­во­ду), ви­дят все па­ке­ты, от­прав­ляе­мые на все осталь­ные ком­пь­ю­те­ры. От чтения всех па­ке­тов под­ряд ком­пь­ю­тер оста­нав­ли­ва­ет то, что его се­те­вая кар­та (Network Interface Card, NIC – это ап­па­рат­ный ком­понент ком­пь­ю­те­ра, ко­то­рый пре­об­ра­зу­ет ин­фор­ма­цию от ком­пь­ю­те­ра в сиг­нал, при­год­ный для пе­ре­да­чи по фи­зи­че­­ской сре­де, и на­обо­рот) снаб­же­на так на­зы­вае­мым MAC-ад­ре­сом [от Media Access Control – управление доступом к среде].

Ка­ж­дый па­кет вклю­ча­ет MAC-ад­рес по­лу­ча­те­ля. Ком­пь­ю­тер, по­лу­чив па­кет, про­ве­ря­ет, сов­па­да­ет ли ад­рес его се­те­вой кар­ты с ад­ре­сом в па­ке­те; ес­ли да, то из па­ке­та из­вле­ка­ет­ся со­дер­жа­щая­ся в нем ин­фор­ма­ция, ес­ли нет – па­кет от­бра­сы­ва­ет­ся для эко­но­мии про­цес­сор­ного вре­мени.

Ад­рес ак­тив­ной се­те­вой кар­ты мож­но про­смот­реть опять же ко­ман­дой IP:

ip link show dev wlan0

где wlan0 – имя уст­рой­ст­ва, ко­то­рое мы вы­яснили ранее. Ес­ли на­брать про­сто ip link show, бу­дет по­ка­за­на ин­фор­ма­ция обо всех се­те­вых кар­тах, под­клю­чен­ных к ком­пь­ю­те­ру. MAC-ад­рес со­сто­ит из 12 зна­ков и сле­ду­ет за link/ether в вы­во­де ко­ман­ды. Он вы­гля­дит при­мер­но так: ea:34:43:81:02:7c.

Конеч­но, одним про­во­дом слож­но со­единить боль­ше двух ком­пь­ю­те­ров. Что­бы под­клю­чить несколь­ко ком­пь­ю­те­ров к од­ной фи­зи­че­­ской се­ти, ис­поль­зу­ет­ся уст­рой­ст­во под на­званием «хаб [hub – англ. сты­ко­воч­ный узел]». У ха­ба есть несколь­ко разъ­е­мов Ethernet, и по по­ступлении па­ке­та на один из вхо­дов тот пе­ре­сы­ла­ет­ся на все осталь­ные ин­тер­фей­сы.

Но да­же в се­тях с па­кет­ной ком­му­та­ци­ей мо­гут возник­нуть про­бле­мы, ес­ли ком­пь­ю­те­ров слиш­ком мно­го – раз­ные ком­пь­ю­те­ры бу­дут пы­тать­ся пе­ре­да­вать ин­фор­ма­цию в од­но и то же вре­мя, в ре­зуль­та­те она бу­дет по­вре­ж­де­на, и эф­фек­тив­но­го об­ме­на дан­ны­ми не со­сто­ит­ся.

Это про­ис­хо­дит по­то­му, что ком­пь­ю­те­ры от­прав­ля­ют па­ке­ты не по оче­ре­ди, а когда по­па­ло, и ис­поль­зу­ют слож­ные ал­го­рит­мы для вы­хо­да из кол­ли­зий.

Что­бы обой­ти данную проблему, при­ме­ня­ют дру­гое уст­рой­ст­во – ком­му­та­тор, он же свитч [switch]. Ком­му­та­тор по­хож на хаб на­ли­чи­ем несколь­ких ин­тер­фей­сов Ethernet, но дей­ст­ву­ет значительно умнее.

Вме­сто то­го, что­бы всле­пую пе­ре­на­прав­лять все по­лу­чае­мые па­ке­ты на все осталь­ные ин­тер­фей­сы, ком­му­та­тор со­став­ля­ет таб­ли­цу MAC-ад­ре­сов ин­тер­фей­сов. Когда на ком­му­та­тор при­хо­дит па­кет, он смот­рит на MAC-ад­рес пакета и оп­ре­де­ля­ет, на ка­кой именно порт пакет следует от­пра­влять.

Та­ким об­ра­зом умень­ша­ет­ся объ­ем тра­фи­ка, пе­ре­сы­лае­мого ме­ж­ду ин­тер­фей­са­ми, и снижа­ет­ся их кон­ку­рен­ция – то есть умень­ша­ет­ся ко­ли­че­­ст­во кол­ли­зий, и об­мен дан­ны­ми ста­но­вится бо­лее на­деж­ным.

[править] Ло­ги­че­­ские се­ти

Од­на­ко ис­поль­зо­вание ком­му­та­то­ров для рас­ши­рения се­тей и умень­шения кол­ли­зий – не конец ис­то­рии, так как у MAC-ад­ре­сов од­но­род­ная [flat] струк­ту­ра. Это зна­чит, что их труд­но клас­си­фи­ци­ро­вать или груп­пи­ро­вать.

При неболь­шой се­ти это не про­бле­ма, но с ростом се­ти таб­ли­цы MAC-ад­ре­сов на ком­му­та­то­рах, в ко­то­рых про­из­во­дит­ся по­иск пор­та для от­прав­ки па­ке­та, дости­га­ют ог­ром­но­го раз­ме­ра. Это за­мед­ля­ет ра­бо­ту ком­му­та­то­ров и де­ла­ет невоз­мож­ным по­строение гло­баль­ной се­ти, та­кой как Ин­тернет.

Что­бы ре­шить эту про­бле­му, мож­но раз­бить боль­шие се­ти на мно­же­ст­во мел­ких ло­ги­че­­ски сгруп­пи­ро­ван­ных се­тей и на­прав­лять тра­фик ме­ж­ду ними с по­мо­щью тех­но­ло­гий меж­се­те­во­го взаи­мо­дей­ст­вия.

Как это ра­бо­та­ет? Ну, для на­ча­ла на­до по­зна­ко­мить вас с ад­ре­са­ми но­во­го ти­па, ко­то­рые на­зы­ва­ют­ся ад­ре­са­ми Про­то­ко­ла Ин­тернета (Internet Protocol – IP). Воз­мож­но, вы уже ви­де­ли IP-ад­ре­са – они обыч­но со­сто­ят из че­ты­рех чи­сел, раз­де­лен­ных точ­ка­ми, на­при­мер, 192.168.1.218.

В от­ли­чие от пред­став­ления хоста в се­ти пол­ным ад­ре­сом, этот ад­рес раз­бит на две час­ти – ад­рес се­ти и ад­рес хоста – с по­мо­щью так на­зы­вае­мо­го пре­фик­са. Пре­фикс – это чис­ло от 0 до 32, оп­ре­де­ляю­щее, ка­кая часть IP-ад­ре­са яв­ля­ет­ся ад­ре­сом се­ти, а ка­кая – ад­ре­сом хоста. Пол­ный ад­рес за­пи­сы­ва­ет­ся в сле­дую­щем ви­де: 192.168.1.2/24.

[править] Со­еди­ня­ем оба вме­сте

Эти ло­ги­че­­ские ад­ре­са свя­зы­ва­ют­ся с фи­зи­че­­ски­­ми MAC-ад­ре­са­ми, о ко­то­рых мы го­во­ри­ли ранее, при этом ка­ж­дый IP-ад­рес свя­зан с кон­крет­ным MAC-ад­ре­сом. Для про­смот­ра этой ин­фор­ма­ции на сво­ем ком­пь­ю­те­ре об­ра­ти­тесь к ip neighbour:

ip neigh show

Ка­ж­дая стро­ка вы­во­да со­от­вет­ст­ву­ет од­но­му хосту, дости­жи­мо­му с ва­ше­го ком­пь­ю­те­ра. Пер­вый па­ра­метр в стро­ке – IP-ад­рес хоста; сле­дую­щие два оп­ре­де­ля­ют, че­рез ка­кую се­те­вую кар­ту он досту­пен; а lladdr со­дер­жит MAC-ад­рес уст­рой­ст­ва. С по­мо­щью этой ин­фор­ма­ции ком­пь­ю­тер мо­жет фор­ми­ро­вать па­ке­ты, ад­ре­со­ван­ные то­му или ино­му ком­пь­ю­те­ру.

А те­перь кое-что ин­те­рес­ное: ком­пь­ю­те­ры с оди­на­ко­вы­ми ад­ре­са­ми се­ти хра­нят эту ин­фор­ма­цию друг о дру­ге и мо­гут взаи­мо­дей­ст­во­вать на­пря­мую. Но ес­ли ад­ре­са се­ти у них раз­ные, они не хра­нят эту связь IP- и MAC-ад­ре­сов и на­пря­мую взаи­мо­дей­ст­во­вать не мо­гут. Вме­сто это­го они взаи­мо­дей­ст­ву­ют че­рез про­ме­жу­точ­ное уст­рой­ст­во, из­вест­ное как шлюз или мар­шру­ти­за­тор (он же ро­утер).

Ро­уте­ры от­сле­жи­ва­ют и со­хра­ня­ют все связ­ки IP- и MAC-ад­ре­сов для сво­ей се­ти, а так­же ин­фор­ма­цию о под­клю­чении к дру­гим ро­уте­рам и се­тям. Ес­ли хост в се­ти ро­уте­ра хо­чет под­клю­чить­ся к хосту в дру­гой се­ти, он от­прав­ля­ет со­об­щение на шлюз с пол­ным IP-ад­ре­сом дру­го­го хоста, и шлюз пе­ре­сы­ла­ет это со­об­щение в со­от­вет­ст­вую­щую сеть. За­тем шлюз в этой се­ти от­прав­ля­ет па­кет со­от­вет­ст­вую­ще­му хосту.

Ес­ли в этих дру­гих се­тях сотни, ты­ся­чи или да­же де­сят­ки ты­сяч ком­пь­ю­те­ров, вы пой­ме­те, как это снижа­ет объ­ем ин­фор­ма­ции, ко­то­рую дол­жен хранить ка­ж­дый ро­утер. Вме­сто MAC-ад­ре­сов всех этих хостов он дол­жен обес­пе­чить хранение толь­ко од­но­го ад­ре­са для ка­ж­дой се­ти – ад­ре­са шлю­за.

[править] Ис­сле­до­вание ин­фор­ма­ции о мар­шру­ти­за­ции

Знание пу­ти от­прав­ки па­ке­тов – на­при­мер, с Ком­пь­ю­те­ра A на Ро­утер A и за­тем с Ро­уте­ра A на Ро­утер B и, на­конец, на Ком­пь­ю­тер B – на­зы­ва­ет­ся ин­фор­ма­ци­ей о мар­шру­ти­за­ции, так как это ин­фор­ма­ция о пу­ти, ко­то­рый дол­жен прой­ти па­кет.

Соб­ст­вен­ную таб­ли­цу мар­шру­ти­за­ции сво­его ком­пь­ю­те­ра мож­но про­смот­реть, ука­зав ар­гу­мент route в ко­ман­де ip:

ip route show

В пер­вой стро­ке вы­во­да сто­ит “default”, за­тем идет IP-ад­рес, че­рез ко­то­рый долж­ны от­прав­лять­ся па­ке­ты, и ин­тер­фейс, с ко­то­ро­го они долж­ны от­прав­лять­ся. Мар­шрут по умол­чанию – ого­вор­ка для ва­ше­го ком­пь­ю­те­ра: ес­ли для IP-ад­ре­са, с ко­то­рым вы пы­тае­тесь свя­зать­ся, не за­да­но дру­го­го мар­шру­та, па­ке­ты уй­дут в этот шлюз.

Сравнив точ­ку на­зна­чения мар­шру­та по умол­чанию с вы­во­дом ко­ман­ды ip neighbour, вы уви­ди­те, что MAC-ад­рес ком­пь­ю­те­ра со­от­вет­ст­ву­ет его шлю­зу по умол­чанию; вот так два ком­пь­ю­те­ра мо­гут об­щать­ся на­пря­мую.

[править] Раз­ре­ша­ем ад­ре­са

Таб­ли­цу со­от­вет­ст­вия MAC-ад­ре­сов и IP-ад­ре­сов, по­лу­чен­ных от ко­ман­ды ip neigh, ваш ком­пь­ю­тер стро­ит с по­мо­щью про­то­ко­ла раз­ре­шения ад­ре­сов (Address Resolution Protocol – ARP). В ARP ис­поль­зу­ет­ся спе­ци­аль­ный па­кет, точ­но та­кой же, как по­ка­зы­ва­ла ко­ман­да tcpdump. Же­лая выяснить MAC-ад­рес ком­пь­ю­те­ра с за­дан­ным IP-ад­ре­сом, ваш ком­пь­ю­тер фор­ми­ру­ет па­кет за­про­са ARP.

Тот со­дер­жит ваш MAC-ад­рес как от­пра­ви­те­ля и IP-ад­рес хоста, MAC-ад­рес ко­то­ро­го вы хо­ти­те уз­нать, но не ука­зы­ва­ет MAC-ад­рес на­зна­чения. За­тем этот па­кет от­прав­ля­ет­ся всем хостам, под­клю­чен­ным к той же фи­зи­че­­ской се­ти, что и вы – т. е. на все пор­ты коммутатора, но не с од­но­го ро­уте­ра на дру­гой – и со­дер­жит, на­при­мер, сле­дую­щий за­прос: «За­прос ком­пь­ю­те­ра с IP-ад­ре­сом 192.168.1.2, пе­ре­дать от­вет на 192.168.1.1 [Request who has 192.168.1.2 tell 192.168.1.1]».

Ес­ли та­кой IP-ад­рес су­ще­ст­ву­ет в этой се­ти, на MAC-ад­рес от­пра­ви­те­ля по­сы­ла­ет­ся arp-па­кет REPLY с та­ким со­дер­жи­мым: «От­вет 192.168.1.2 – ea:34:43:81:02:7c [Reply 192.168.1.2 is-at ea:34:43:81:02:7c]». Те­перь ком­пь­ю­те­ры мо­гут об­щать­ся друг с дру­гом на­пря­мую. Это мож­но уви­деть в дей­ст­вии, сно­ва за­пустив ко­ман­ду tcpdump. Но вме­сто от­кры­тия web-страницы, зай­ди­те в дру­гой тер­ми­нал и ско­ман­дуй­те от имени root:

arping 192.168.1.1

с IP-ад­ре­сом шлю­за по умол­чанию. Взгля­нув на вы­вод tcpdump, вы те­перь долж­ны уви­деть за­прос и от­вет ARP.


|

Персональные инструменты
купить
подписаться
Яндекс.Метрика