Я слабо разбираюсь в Windows, поэтому не считайте моё мнение экспертным, могу быть не прав.
Если не ошибаюсь, при входящих TCP-соединениях Windows автоматически сохраняет IP-адрес назначения, на который это соединение пришло, во внутренних структурах сокета, поэтому в рамках одного TCP-соединения пакеты будут уходить с одного IP-адреса (они автоматически bind'ятся на этот source ip address).
Далее маршрутизация: в Windows, начиная с Vista, используется strong host model (см.
RFC1122), которая предписывает отправлять пакеты с того сетевого интерфейса, IP-адрес которого указан в структурах сокета.
Старая статья на technet имеет следующую приписку:
If the program specifies a source IP address, that IP address is used as the source IP address for connections sourced from that socket and the adapter associated with that source IP is used as the source interface. The route table is searched but only for routes that can be reached from that source interface.
И далее описываются похожие принципы, связанные с RFC3484.
«Автоматически» всё работает только для протоколов с концепцией соединения, т.е. с TCP. Для UDP, если программа не написана с учётом поддержки multihoming, пакеты могут уходить согласно метрике, т.е. с неправильного адреса (не с того, на какой пришел входящий пакет), и ничего не заработает.