Site Tools


software:article:utp_dpi

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
software:article:utp_dpi [2015/05/23 14:30]
– [Заход 2: ng_utp] root
software:article:utp_dpi [2022/02/05 04:27] (current)
root
Line 1: Line 1:
 ====== Torrent/uTP — о протоколе и самодельных DPI ====== ====== Torrent/uTP — о протоколе и самодельных DPI ======
-{{:ru:software:article:utorrent_logo.png|}}+{{software:article:utorrent_logo.png|}}
  
 В 2009 году появился [[http://en.wikipedia.org/wiki/Micro_Transport_Protocol|Micro Transport Protocol]], сокращённо - uTP, можно ознакомится [[http://habrahabr.ru/post/68332/|тут]].\\ В 2009 году появился [[http://en.wikipedia.org/wiki/Micro_Transport_Protocol|Micro Transport Protocol]], сокращённо - uTP, можно ознакомится [[http://habrahabr.ru/post/68332/|тут]].\\
Line 10: Line 10:
 Вот какой бред написан в [[https://ru.wikipedia.org/wiki/ΜTorrent|русской википедии]] про uTP:\\ Вот какой бред написан в [[https://ru.wikipedia.org/wiki/ΜTorrent|русской википедии]] про uTP:\\
 "Также провайдерам намного сложнее блокировать передачу данных через μTP благодаря отсутствию строгих, формализованных отличий UDP пакетов обычного трафика (формируемого, к примеру, сетевыми играми) от трафика, формируемого протоколом μTP, в отличие от TCP пакетов, по содержанию полей которых можно делать вывод об их принадлежности к p2p-трафику."\\ "Также провайдерам намного сложнее блокировать передачу данных через μTP благодаря отсутствию строгих, формализованных отличий UDP пакетов обычного трафика (формируемого, к примеру, сетевыми играми) от трафика, формируемого протоколом μTP, в отличие от TCP пакетов, по содержанию полей которых можно делать вывод об их принадлежности к p2p-трафику."\\
 +[[http://en.wikipedia.org/wiki/Micro_Transport_Protocol|Вики на английском]] более адекватна.\\
  
 ===== Жизнь с uTP ===== ===== Жизнь с uTP =====
Line 110: Line 110:
 В начале я пробовал слать RESET с виндовой машины, перебирая connid, но это явно не работало, не совпадали адреса отправителя пакета и seq_nr, ack_nr. Это был первый неудачный опыт.\\ В начале я пробовал слать RESET с виндовой машины, перебирая connid, но это явно не работало, не совпадали адреса отправителя пакета и seq_nr, ack_nr. Это был первый неудачный опыт.\\
  
-[[ru:software:freebsd:utp_ctrl_daemon|uTPControl - block uTP torrent proto]] - была первая более менее программа которую я написал под FreeBSD.\\+[[software:freebsd:utp_ctrl_daemon|uTPControl - block uTP torrent proto]] - была первая более менее программа которую я написал под FreeBSD.\\
 uTP протокол был любезно предоставлен в [[https://github.com/bittorrent/libutp|libuTP]] всему интернету :)\\ uTP протокол был любезно предоставлен в [[https://github.com/bittorrent/libutp|libuTP]] всему интернету :)\\
  
Line 129: Line 129:
  
 === Заход 2: ng_utp === === Заход 2: ng_utp ===
-[[ru:software:freebsd:ng_utp|FreeBSD uTP (udp torrent) netgraph node]]\\+[[software:freebsd:ng_utp|FreeBSD uTP (udp torrent) netgraph node]]\\
 Прошло полтора года, я успел покопаться в ядре FreeBSD и netgraph, лучше узнать как работает сеть и пришла мысль: uTP имеет состояния аналогичные TCP, значит чтобы его 100% определять нужно эти состояния отслеживать.\\ Прошло полтора года, я успел покопаться в ядре FreeBSD и netgraph, лучше узнать как работает сеть и пришла мысль: uTP имеет состояния аналогичные TCP, значит чтобы его 100% определять нужно эти состояния отслеживать.\\
 Заодно я ещё раз заглянул в [[https://github.com/bittorrent/libutp|libuTP]] и получше посмотрел за что можно зацепится.\\ Заодно я ещё раз заглянул в [[https://github.com/bittorrent/libutp|libuTP]] и получше посмотрел за что можно зацепится.\\
Line 224: Line 224:
  
 ===== Заключение ===== ===== Заключение =====
-1. То что <a href="https://ru.wikipedia.org/wiki/ΜTorrent">написано в вики на русском</a> - полнейший бред: uTP имеет достаточно чёткие сигнатуры и легко ловится DPI. +1. uTP имеет достаточно чёткие сигнатуры и легко ловится DPI.\\ 
-Более того, ловить сигнатуры в TCP ощутимо сложнее, поскольку для гарантированного обнаружения нужно уметь собирать несколько пакетов вместе и уже потом проверять содержимое: клиент может передавать данные по одному байту. +Более того, ловить сигнатуры в TCP ощутимо сложнее, поскольку для гарантированного обнаружения нужно уметь собирать несколько пакетов вместе и уже потом проверять содержимое: клиент может передавать данные по одному байту.\\ 
-Авторы uTP либо не ставили себе цель сделать протокол без сигнатур либо даже не приблизись к цели. +Авторы uTP либо не ставили себе цель сделать протокол без сигнатур либо даже не приблизись к цели.\\ 
-(На мой взгляд в начале не ставили, а потом было уже поздно и рандомизация отдельных полей не помогает). +На мой взгляд в начале не ставили, а потом было уже поздно и рандомизация отдельных полей не помогает.\\
-<a href="http://en.wikipedia.org/wiki/Micro_Transport_Protocol">Вики на английском</a> более адекватна.+
  
-2. Производители различных DPI уже давно добавили сигнатуры для uTP, вряд ли им это было трудно сделать.+2. Производители различных DPI уже давно добавили сигнатуры для uTP, вряд ли им это было трудно сделать.\\
  
-3. В порядке слухов: для линукса вроде бы тоже есть ядерная версия для работы с uTP протоколом на базе ipp2p а может уже отдельно. Но в паблик её не выкладывали. С середины 2012 года.+3. В порядке слухов: для линукса вроде бы тоже есть ядерная версия для работы с uTP протоколом на базе ipp2p а может уже отдельно. Но в паблик её не выкладывали. С середины 2012 года.\\
  
-4. Для IPv6 код не писал, на всякий случай ;)+4. Для IPv6 код не писал, на всякий случай ;)\\
  
 5. uTP не лучше TCP для передачи данных, вся проблема в том, что TCP можно хоть как то управлять из приложения только на BSD/Linux - setsockopt(..., IPPROTO_TCP, TCP_CONGESTION,...) - основное что требуется, хотя и там более тонкие параметры congestion control для отдельных сокетов не настраиваются. 5. uTP не лучше TCP для передачи данных, вся проблема в том, что TCP можно хоть как то управлять из приложения только на BSD/Linux - setsockopt(..., IPPROTO_TCP, TCP_CONGESTION,...) - основное что требуется, хотя и там более тонкие параметры congestion control для отдельных сокетов не настраиваются.
Line 240: Line 239:
 Возможно с приходом кучи готовых либ для HTTP/2.0 торренты пустят и через него, скорее всего это вопрос времени. Возможно с приходом кучи готовых либ для HTTP/2.0 торренты пустят и через него, скорее всего это вопрос времени.
  
 +
 +{{tag>software article net torrent}}
software/article/utp_dpi.txt · Last modified: 2022/02/05 04:27 by root