[О блоге]
[наверх]
[пред]
[2020-12-13 13:28:10+03:00]
[abd2e63aaa15e316206336230e6cf2e09b525389]
Темы: [go]
Попробовал UDT протокол
https://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%BE%D1%82%D0%BE%D0%BA%D0%BE%D0%BB_%D0%BF%D0%B5%D1%80%D0%B5%D0%B4%D0%B0%D1%87%D0%B8_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_%D0%BD%D0%B0_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B5_UDP
https://udt.sourceforge.io/
https://tools.ietf.org/html/draft-gg-udt-03
Нашёл Go wrapper над этой библиотекой. Впервые собирал Go с C и даже кое
какого C кода в этой обёртке написал (настраивал MSS, размеры буферов).
Понравилось что пользоваться этим легко: самый обычный io.ReadWriter
сокет, который вполне себе работает. UDT4 полностью на UDP основан,
никакого TCP управляющего соединения (хотя я и не против него).
Но... одни документы/презентации говорят что UDT творит чудеса, там где
FTP при небольших потерях пакетов проседает до неюзабельного состояния.
А https://scialert.net/fulltext/?doi=itj.2009.600.604 говорит что UDT
очень далёк до насыщения даже гигабитного канала связи. И да, даже с
большим MSS и буферами, на lookpack UDT передача у меня более чем на
порядок медленнее простого TCP соединения. Лень проверять что будет на
канале с большой задержкой или потерями, но наверное будет конечно же
лучше. Но это значит что применим он только к очень особым каналам
связи, как они и заявляют. А вот http://tsunami-udp.sourceforge.net/
даже в теории должен творить чудеса, как тесты в статье и показывают. Но
я с ходу не смог собрать ни саму библиотеку, ни ничего на Go не нашёл
для неё.
Тема очень интересная в целом. Может эти UDT/Tsunami и прочее не так
популярно потому что современные TCP CC алгоритмы и возможности их
настроек в ядрах ОС достаточно хороши?
Ещё нашёл KCP библиотеку/протокол: https://github.com/xtaci/kcp-go
Который тоже предоставляет UDP надёжный ordered протокол. Но он заточен
на низкие задержки и поэтому в нём добавляется избыточность и коды
Рида-Соломона. Тоже интересная тема (хотя это же всё уже обмуслёкано в
QUIC и HTTP/3) и приятно что на pure Go всё есть.
[оставить комментарий]