L2 - канальный уровень
Задачи канального уровня
- обеспечивать передачу пакета данных от одного терминала (определиться с терминами) другому;
- обеспечивать корректную передачу данных: обнаружение (и исправление?) ошибок;
- обеспечивать назначение адресов (совместно с транспортным уровнем).
Формат кадра
0-6 | Preamble | 7 | 0x55 0x55 0x55 0x55 0x55 0x55 0x55 |
7 | Start Frame Delimitor (SFD) | 1 | 0xD5 |
8 | Destination Address (DST) | ? | - |
? | Source Address (SRC) | ? | - |
? | Payload (DATA) | N | - |
?+N | Checksumm (CRC32C) | 4 | - |
На данном этапе, в качестве максимальной длины пакета (исключая Preamble и SFD) - MTU - возьмем Ethernet'овские 1500 байт. В прочем, для наших целей это много, так как передача одного пакета будет занимать до 10с.
Заметки
- Исправлять ошибки не планируется;
- Preamble и SFD занимают много места - найти возможность укоротить;
- Придумать, как приемник определит длину пакета:
- длина в заголовке;
- специальный маркер;
- пропажа несущей;
Как вариант:
- на канале всегда тишина;
- на всех несущих (если их немколько) начинает передаваться Preamble - используем это для обнаружения всех несущих;
- передается маркер SFD;
- передаются заголовок и данные;
- убирается несущая сразу после CRC;
- сразу же можно передавать следующий пакет.