Физический и канальный уровни

Исследуем сеть на физическом уровене. Пусть у нас сеть Ethernet. Для того, чтобы посмотреть, какие сетевые интерфейсы есть в системе, можно воспользоваться командой ip link или просто ip l:

[root@demo ~]# ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether 08:00:27:50:7a:b1 brd ff:ff:ff:ff:ff:ff

Видно два интерфейса, lo, и eth0. В Linux-машине, даже если нет физических сетевых адаптеров, один сетевой интерфейс есть всегда (впрочем, если может и не быть, в том случае, когда поддержка сети не включена в ядро) --- это так называемый loopback, обратная петля. Через него можно подключиться к этой же самой машине. Это удобно, например, для отладки программ, работающих с сетью, когда самой сети под рукой нет. Традиционно интерфейсы называются ethN, где N -- номер, и нумеруются с 0, т.е. eth0, eth1, и т.п.

После link/loopback и link/ether указаны MAC-адреса интерфейсов. MAC-адрес --- это 6 байт, которые записываются в шестнадцатеричном виде через :. Видно, что у интерфейса lo его нет (нулевой), а у eth0 --- вполне определенный. Физическим сетевым адаптерам этот адрес присваивается производителем. Первые три байта составляют код производителя, оставшиеся три байта --- код сетевого адаптера. Современные адаптеры позволяют его изменять, но этого делать не рекомендуется.

После brd указан еще один MAC-адрес --- это так называемый broadcast (широковещательный) адрес. Он используется для того, чтобы послать некоторый фрейм сразу всем адаптерам, подключенным к данной среде. У lo его по понятным причинам нет, а у eth0 он состоит из все единиц в двоичном представлении.

Сравнение mac-адреса получателя фрейма и mac-адреса сетевого адаптера производится на аппаратном уровне, поэтому чужие пакеты адаптер может отбросить самостоятельн, и операционная система об этом даже не узнает.

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

Можно дать такое определение: локальная сеть --- это множество узлов, которые равноправно общаются между собой через одну среду передачи данных.

== Сетевой уровень ==

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

  1. Однозначно идентифицировать все компьютеры в глобальной сети, чтобы их адресовать и отличать друг от друга,
  2. Организовать маршрутизацию данных от одного компьютера к другому через некоторое количество промежуточных узлов.

Инкапсуляция протоколов TCP/IP

Инкапсуляция протоколов выражается в том, что данные, требуемые для передачи в рамках работы протокола некоторого уровня инкапсулируются в пакеты протокола более низкого уровня.

Например, пусть у нас работает FTP-клиент. Будучи сам на прикладном уровне, он приготовил FTP-специфический массив данных, например, большой файл и собирается его передать, воспользовавшись услугами нижнего, транспортного уровня (допустим, TCP). Для передачи по TCP этот массив должен быть разбит на фрагменты определенного размера. Каждый такой фрагмент инкапсулируется в TCP-пакет и снабжается дополнительной служебной информацией, характерной для протокола TCP. На этом дело не останавливается. Для передачи каждого TCP-пакета средствами IP он должен быть, в свою очередь разбит на фрагменты определенного размера (характерного для IP). Каждый из этих фрагментов инкапсулируется в IP-пакет и снабжается своей служебной информацией, на этот раз характерной для протокола IP. Допустим, по правилам маршрутизации выяснилось, что нам нужно передать этот пакет нашему ближайшему соседу по сети. Операция повторяется снова --- IP-пакет разбивается и инкапсулируется в несколько пакетов физического уровня, например, ethernet-фреймов.

После передачи фреймов по физическому каналу происходит обратное преобразование: из "фарша" восстанавливается "корова": протокол физического уровня Ethernet составляет из нескольких своих фреймов некоторый набор данных, который передает на уровень выше. Протокол IP в этом наборе данных узнаёт IP-пакет и интерпретирует служебную информацию, в частности IP-адрес. Предположим, по правилам маршрутизации IP-пакет надо отправить следующему соседу. Тогда он снова передаётся на физический уровень, где инкапсулируется в несколько фреймах, и т.д. Если IP-протокол решит, что именно эта машина является получателем, то он из нескольких IP-пакетов соберёт некоторый набор данных, и передает его на уровень TCP, который узнает в этом наборе TCP-пакет и обработает его подобающим образом.

В некоторых случаях может быть так, что ip-пакеты собираются до tcp, чтобы решить, что делать дальше. Это надо всегда иметь в виду.

Инкапсуляция протколов приводит к накладным расходам: фактически по сети передаётся существенно больше данных, чем было запланировано прикладном уровне.


Сведения о ресурсах

Готовность (%)

Продолжительность (ак. ч.)

Подготовка (календ. ч.)

Полный текст (раб. д.)

Предварительные знания

Level

Maintainer

Start date

30

1

1

1

1

02.07.2008