Dynamic Source Routing (DSR) (Динамическая маршрутизация от источника) — протокол маршрутизации для mesh-сетей. Он схож c AODV в том, что также формирует маршрут по-требованию, посредством передачи запроса. Однако, он использует маршрутизацию от источника, не полагаясь на таблицы маршрутизации на каждом промежуточном устройстве. В DSR было внесено множество последовательных конкретизаций, включая DSR-Flow.
Определение маршрута от источника требует накопления адресов каждого устройства между источником и приемником при обнаружении маршрута. Информация о накопленном пути кешируется узлами, обрабатывающими пакеты обнаружения. Изученные пути используются для маршрутизации пакетов. Чтобы осуществить маршрутизацию от источника, маршрутизируемые пакеты содержат адрес каждого устройства, через которое они прошли. Это может привести к высокой избыточности для длинных путей или больших адресов, как в IPv6.
Чтобы избежать использование маршрутизации от источника, в DSR определена опция "flow id", которая позволяет пакетам быть отправленными в соответствии с таблицами маршрутизации промежуточных узлов.
Этот протокол основан на маршрутизации от источника, посредством чего вся информация маршрутизации храниться (непрерывно обновляясь) в мобильных узлах. У него есть только 2 главных фазы, которые являются Поиск Маршрута и Поддержание Маршрута. Маршрут генерируется, если сообщение с запросом достигло намеченного узла адресата (отчет маршрута, который накапливается в Запросе Маршрута, был бы вставлен в Ответ Маршрута).
Чтобы получить Ответ Маршрута, у узла адресата должен быть маршрут к исходному узлу. Если бы маршрут находится в кэше маршрута Адресата, использовалась бы кешированная запись. Иначе, узел полностью изменит маршрут, основываясь на отчете маршрута в заголовке сообщения Ответа Маршрута (для этого необходимо, чтобы все каналы в сети были симметричны). В случае удачной передачи инициализируется Фаза Поддержания Маршрута, посредством которой Ошибочные пакеты Маршрута будут учитываться узлом. Испорченный канал связи будет удален из кэша маршрута узла, как и все маршруты, содержащие этот канал. Затем происходит повторная инициация фазы Поиска Маршрута, чтобы определить новый жизнеспособный маршрут.
Динамический протокол маршрутизации от источника (DSR) по требованию, создавался для того, чтобы ограничивать полосу пропускания, потребляемую управляющими пакетами в специальных беспроводных сетях, устраняя сообщения обновления периодической таблицы, требуемые в подходе с формированием изображений при помощи таблицы. Главное различие между этим и другим реактивными протоколами маршрутизации - то, что в нем отсутствуют «маяки» и следовательно не требует периодической передачи пакета приветствия, которые используются узлом, чтобы сообщить его соседям о его присутствии. Основной подход этого протокола (как и других реактивных протоколов маршрутизации) состоит в том, что во время фазы конструкции маршрута узел устанавливает маршрут, рассылая широковещательные пакеты RouteRequest по сети. Узел адресата, при получении пакета RouteRequest, отвечает, отсылая пакет RouteReply назад к источнику, который несет маршрут, пройденный полученным пакетом RouteRequest.
Рассмотрим исходный узел, у которого нет маршрута к адресату. Когда у него есть пакеты данных, которые будут посланы адресату, он инициализирует пакет RouteRequest, который распространяется по сети. Каждый узел, после получения пакета RouteRequest, повторно передает пакет своим соседям, (если еще не передал, так как копия пакета может прийти к нему от другого узла), при условии, что узел не является адресатом и что время жизни пакета (TTL) не было превышено. У каждого RouteRequest есть порядковый номер, сгенерированный исходным узлом и узлами, через которые он прошел. Узел, после получения пакета RouteRequest, проверяет порядковый номер на пакете прежде, чем отправить его. Пакет отправлен, только если это не дублирующийся RouteRequest. Порядковый номер на пакете используется, чтобы предотвратить формирования цикла и избежать множественных передач одного и того же RouteRequest промежуточным узлом, который получает его через несколько каналов. Таким образом, все узлы кроме адресата отправляют пакет RouteRequest во время фазы формирования маршрута. Узел адресата, после получения первого пакета RouteRequest, отвечает источнику через обратный путь, который пересек пакет RouteRequest. Узлы могут также узнать о соседних маршрутах, пересеченных пакетами данных если задан режим промискуитета (режим работы, в котором узел может получить пакеты, которые не переданы, и не адресованы ему). Этот кэш маршрута также используется во время фазы формирования маршрута. Если у промежуточного узла, получающего RouteRequest, есть маршрут к узлу адресата в его кэше маршрута, то он отвечает на исходный узел, посылая RouteReply со всей информацией маршрута от исходного узла до узла адресата.
Этот протокол использует реактивный подход, который избавляет от необходимости периодически засорять сеть сообщениями обновления таблицы, которые требуются в подходе с формированием маршрутов при помощи таблиц маршрутизации. В реактивных (по требованию) протоколах маршрут устанавливается только, когда он требуется и следовательно потребность в поиске путей ко всем другим узлам в сети как делается в подходом с формированием маршрутов при помощи таблиц отсутствует. Промежуточные узлы также эффективно используют информацию кэша маршрута, чтобы уменьшить издержки. Недостаток этого протокола - то, что механизм обслуживания маршрута в местном масштабе не восстанавливает разорванные соединения. Устаревшая информация из кэша маршрута может также привести к несогласованностям во время фазы реконструкции маршрута. Задержка установки подключения выше, чем в протоколах, использующих таблицы. Даже при том, что протокол хорошо работает в статических средах и средах с низкой подвижностью узлов, производительность быстро ухудшается с увеличивающейся подвижностью. Кроме того, значительные издержки маршрутизации появляются из за маршрутизации от источника, используемой в DSR. Эти издержки прямо пропорциональны длине пути.