HW solution for HSE AMI nets course
requires python3.8+
cd tcp_over_udp && python3 -m pip install -r requirements.txt
./client.sh --host <host> --port <port>
./server.sh --host <host> --port <port>
Решение - попытка имплементировать протокол TCP поверх протокола UDP, но в сильно урезанном виде.
Пакет представляет собой вид <header><data>
Заголовок описывается в tcp_over_udp/common/const.py
и занимает 13 байт.
Название заголовка | размер (bytes) | описание |
---|---|---|
SQN_NUMBER | 4 | собственно sequence number |
ACK_NUMBER | 4 | собственно ack number |
DATA_SIZE | 2 | размер содержательной части сообщения (нужен для отделения слипшихся в буфере пакетов) |
CHECKSUM | 2 | чексумма |
FLAGS | 1 | Флаги пакета |
Имплементация tcp_over_udp/common/message.py
Клиент и сервер используют общий абстрактный протокол общения, описанный в tcp_over_udp/common/protocol.py`
Все сообщения разбиваются на пакеты по MTU=1500
, по достижению размера отправленного сообщения в WINDOW_SIZE
(определяется в tcp_over_udp/common/const.py
) с отправляющей стороны отправляется флаг PSH который на принимающей
стороне делает флаш для буфера и ACK всех уже полученных сообщений.
Таким образом скорость передачи сообщения в локальной сети в данном решении составляет 15 Mb/s
Unit тесты поднимают локально echo сервер и клиент и проверяют корректность базовых операций
Pumba тесты поднимают docker-compose с сервером, клиентом, и контейнером/ами с пумбой