Интерфейсный уровень и его представление
Задачи интерфейсного уровня:
- Организация процесса передачи данных
- Как отличить данные от не-данных (или начало от середины)?
- Как идентифицировать абонентов среды?
- Дисциплина использования среды
- Очерёдность, коллизии, приоритеты и т. п.
- Защита данных и авторизация абонента
Инкапсуляция на аппаратном уровне (то, чего на интерфейсном уровне не видно):
- Заворачивание фрейма в маркеры начала и конца / межфреймовый заполнитель
- Избыточность при кодировании (борьба с шумом на аппаратном уровне: payload vs overhead)
Ethernet:
- в действительности 10101010*7 10101011, потому что старший бит октета — последний
Interpacket_gap (12 октетов) пропуска
Фреймы (пакеты интерфейсного уровня)
Сеть с разделением пакетов (окончательно)
Состав фрейма:
- Паспорт (ID отправителя и получателя, сведения о топологии, всякое)
- Полезная нагрузка
- Контрольная сумма (нужно ли больше избыточного кодирования?)
- Данные по шифрованию / авторизации
Ethernet
Общая среда ⇒
- ID отправителя и получателя (MAC: 3*8 VENDOR + 3*8 ID [+ 4*8 VLAN])
- Аппаратная фильтрация MAC
- promiscuous mode
- Широковещательный адрес
Алгоритм доступа: неодновременный
- определение коллизий (CD)
- определение идущей передачи (CSMA)
- определение работоспособности сети
- вычисление задержки для повторной передачи / общий тайм-аут
⇒ нет гарантированного времени доставки
Linux
ethtool — взаимодействие с аппаратным уровнем
iproute2 — основной инструмент настройки
ip link (поднятие, останов, свойства)
tcpdump — основной инструмент анализа
Настройка внутренней сети в VBox
- Типы сетей в VB
- «Внутренняя» появляется просто по факту наименования — это общая среда
- «Втыкание провода» и «неразборчивый режим»
Название intnet — произвольное
Проверка работоспособности:
2 клона (не забываем: другие MAC-адреса всем интерфейсам)
- Просмотр интерфейсов:
# ip link
- Активация («поднятие») интерфейса
# ip link set eth1 up
- На одной машине:
# tcpdump -XXvv
-XX означает выводить шестнадцатеричный дамп всего фрейма
- На другой машине:
# echo "08:00:27:ab:cd:ef 08:00:27:fe:dc:ba 8102 48 69" | xxd -r -p | socat - INTERFACE:eth1
08:00:27:ab:cd:ef — MAC-адрес получателя
08:00:27:fe:dc:ba — MAC-адрес отправителя
8102 — Тип содержимого (IP-пакет, но у нас он неправильный)
48 69 — «Hi»
xxd -r -p — вырезает из входного текста всё, кроме шестнадцатеричных цифр, остальное преобразует в байты (операция, противоположная шестнадцатеричному дампу)
socat - INTERFACE:eth1 — запихивает получившийся фрейм в интерфейс eth1
Минимальный размер фрейма — 64 октета (включая 4 октета контрольной суммы, которая формируется / проверяется аппаратно и не выводится).
Если вместо -XX написать -X, увидим только payload — «Hi».
Если запустить tcpdump с добавочным ключом -p, то:
- Не будет включён promiscuous mode ⇒ если поменять MAC получателя, фрейм не дойдёт
- Вариант: поставить широковещательного получателя ff:ff:ff:ff:ff:ff
- А вот MAC отправителя может быть любой ☺
Протоколы интерфейсного уровня
Вообще-то Тысячи их
Wi-Fi
Например, IEEE 802.11g
- Воздух: затухание и вариабельность сигнала ⇒ избыточность
- Совместный доступ:
- Несколько «каналов»
OFDM (FDM+ортогональность)
(совместимость: Complementary_code_keying, DSSS)
- Воздух общий ⇒ авторизация/шифрование
- ESSID
- Короткие, предсказуемые пакеты ⇒ ухудшение стойкости ключа со временем
⇒ регулярное пересоздание ключей WPA2
Шифрование ⇒ сертификация
WIFI в Linux
rfkill
ip link set wlan0 up
iw wlan0 scan
iw wlan0 link
(stty -echo; wpa_passphrase) > config
wpa_supplicant -B -i wlan0 -c config
iw wlan0 link
dhcpcd wlan0
Д/З
Образ не изменился.
Задание 2
Воспроизвести пример из лекции с двумя виртуалками, объединёнными внутренней сетью
- Настроить в самом virtualbox общую виртуальную сеть
- Сделать два клона (base и second) и настроить на обеих машинах «Адаптер 2» как подключённый к некоторой одинаковой сети
- Отчёты:
На базовой машине (report 2 base)
- Поднять сетевой интерфейс, к которому подключена виртуальная сеть
Запустить tcpdump -p -XX -c 2 на этот интерфейс; дождаться окончания
На дублёре (report 2 second)
- Поднять сетевой интерфейс, к которому подключена виртуальная сеть
Трижды сгенерировать и отправить фрейм с помощью xxd + socat по примеру из лекции (payload может быть любым не длиннее 40 символов)
- MAC отправителя и MAC получателя должны совпадать с актуальными
MAC получателя должен не совпадать с актуальным
MAC получателя должен совпадать с актуальным, а MAC отправителя — нет
Оба отчёта (report.02.base и report.02.second) именно с такими названиями переслать одним письмом в качестве приложений на uneexlectures@cs.msu.ru
В теме письма должно встречаться слово LinuxNetwork2023