Некоторые сведения о физическом уровне и управлении виртуальными машинами

Носители данных

Две задачи:

  1. Свойства среды передачи данных

    • Коммутация каналов или данных?
      • Аналоговый поток ⇒ разделяем каналы
        • Не обязательно тянуть несколько линий: при частотной модуляции можно использовать несколько несущих разной частоты на одной среде

      • Цифровой поток ⇒ разделяем данные
        • Объём метаинформации растёт
    • С помощью чего передаются данные
      • Пример: RS232 можно 3 провода (RxD, TxD, GND), можно 5 (+RTS, CTS), можно больше для согласования и управления (см. там же)

        • RS-485 (посложнее), и TTL (простым 0/1)

      • Пример: витая пара

    • Параметры среды, условия эксплуатации
      • RS-232: длина и сопротивление провода
      • Витая пара: оплётка, шаг и направление скруток, расстояние до соседней пары и т. п. (тысячи их)

  2. Формат данных
    • Физическое кодирование — как представляются 0 и 1

    • Синхронизация
      • RS232: кодирование NRZ, нужно включать в поток «синхронизирующие метки»

        • делается с нарушением независимости уровней — уровнем выше в UART-интерфейсе

      • 10BASE-T: Manchester)

    • Как отличить данные от не-данных? (преамбула/кадр)

    • Обнаружение ошибок. Пример: чётность; сколько дополнительных битов, столько ошибок можно найти, но не исправить.
      • RS232: снова уровнем выше, биты чётности UART

    • Исправление ошибок (пример: линейный код избыточность такая, что при возникновении одной ошибки результат всё равно по метрике ближе неискажённому исходнику)

    • Скремблинг (в некоторых средах спасает от собственных помех и «накопления единицы»)

    • Адская математика и алгоритмы коррекции искажений среды (например, ADSL)

    • Пример: витая пара

Что известно о физическом уровне со стороны ОС? Да ничего почти.

Работа с VirtualBox

О волшебных скриптах в лекции

/!\ Не гарантируется, что скрипты будут работать (особенно с учётом марсианских технологий VBoxManage).

Как делать Д/З

Программа (скрипт) report и файлы отчёта

Передача отчёта из виртуалки

  1. «аппаратный вариант» — COM-порт в файл
    • выключите виртуалку
    • удалите файл port_logger (или как вы его назвали)

    • Настройте эмуляцию COM-порта — перенаправление вывода в файл
    • В виртуальной машине:
      • Настройте второй COM-порт так:
        # stty raw -echo < /dev/ttyS1
        • raw — это режим, при котором ядро не считает его терминалом, и не обрабатывает/преобразует передаваемые байты

        • -echoвыключает режим, при котором вся вводимая информация немедленно отображается (то есть «как бы» выводится; в этом году у нас в конце лекции из-за невыключения были непонятки)

      • Вывалите отчёт в COM-порт (больше ничего с ним не делайте)
         # cat report.01.base > /dev/ttyS1
    • Выключите виртуалку и переименуйте файл port_logger (или как там он назван) в report.01.base

  2. «Аппаратно-сетевой вариант» — COM-порт в TCP + netcat (для систем, в которых есть netcat) — как консоль в лекциях.

    • Настройте эмуляцию COM-порта — перенаправление ввода-вывода в поток TCP/IP например, на порт 2010
    • После старта вируталки в хост-системе запустите
      # netcat localhost 2010 > report.01.base
    • В виртуалке проделайте обе команды (перенастройку ttyS1 и перенаправление файла с отчётом)
    • На хост-системе скажите netcat-у ^D (Это control+D)

Отчёт — это tar-архив

Д/З

<!> Внимание:

Задание 1

  1. Дважды склонировать базовый образ (виртуалки будут называться base и second)

  2. Настроить COM2 в двух образах на работу с сокетом («настройки ВМ → COM-порты» «Порт2 → хост-канал» + какое-нибудь имя, например, vboxport; см. подсказку VirtualBox-а, как это должно называться под Windows — там хитро)

    • На одном хосте поставить (./) «подключаться к уже существующему каналу», на другом — нет (он-то будет открывать сокет)

    • Если хотите сделать то же самое из командной строки, то у меня получилось так:
         1 $ VBoxManage modifyvm base --uart2 0x02f8 3 --uart-mode2 server название_канала
         2 $ VBoxManage modifyvm second --uart2 0x02f8 3 --uart-mode2 client название_канала
      
    • В результате запись в COM2 на одной машине должна приводить к чтению из COM2 на другой и наоборот
  3. Отчёты:
    • На базовой машине (report 1 base)

      • stty -a < /dev/ttyS1

      • stty raw -echo < /dev/ttyS1

      • stty -a < /dev/ttyS1

      • cat /dev/ttyS1

      • после получения текста нажать ^C (Это control+C)

      • (не забыть ^D для остановки отчёта)
    • На клоне (report 1 second)

      • stty -a < /dev/ttyS1

      • stty raw -echo < /dev/ttyS1

      • date > /dev/ttyS1

      • stty -a < /dev/ttyS1

      • (не забыть ^D для остановки отчёта)
  4. Получить оба отчёта с виртуалок. Например, перенастроить на обеих машинах COM2 для получения через него отчёта в файл, и тем же cat засунуть его туда

  5. Оба отчёта (report.01.base и report.01.second) именно с такими названиями переслать одним письмом в качестве двух приложений на uneexlectures@cs.msu.ru

    • В теме письма должно встречаться слово LinuxNetwork2024

    • <!> Перед отправкой обязательно проверьте, что отчёт не битый и открывается как tar.gz-архив! Если он побирся, возможно, вы не сделали stty raw -echo.

LecturesCMC/LinuxNetwork2024/01_HardwareAndCommandline (последним исправлял пользователь FrBrGeorge 2024-02-19 23:13:02)