Я читал, что когда ядро определяет исходный адрес ipv6 для пакета, оно принимает во внимание, какой интерфейс будет использоваться для отправки пакета,
(http://www.rfc-editor.org/rfc/rfc3484.txt, Раздел 5) Правило 5: Предпочитайте исходящий интерфейс. Если SA назначен интерфейсу, который будет использоваться для отправки на D, а SB назначен другому интерфейсу, тогда предпочтите SA. Точно так же, если SB назначен интерфейсу, который будет использоваться для отправки в D, а SA назначен другому интерфейсу, тогда предпочтите SB.
*D = Адрес назначения
Но как определяется сам интерфейс? В качестве примера возьмем рукопожатие tcp:
1:0:0:0:0:0:0:a
1:0:0:0:0:0:0:b0
и eth1 с ip 1:0:0:0:0:0:0:b1
1:0:0:0:0:0:0:b0
. B отвечает SYN-ACK. Он должен установить src ip в заголовке Ipv6.Как я понял (поправьте меня, если ошибаюсь!) Он будет выбирать между 1:0:0:0:0:0:0:b0
и 1:0:0:0:0:0:0:b1
на основе правил в RFC, которые я привел выше, но я не могу обдумать их, особенно правило 5, поскольку я не могу понять, как интерфейс выбран в первую очередь.
Ваш пример не имеет отношения к раздел 5 («Выбор исходного адреса»).
Когда в вашем примере Хост B отвечает на пакет SYN от Хост А у него нет выбора, какой адрес использовать. TCP-соединение определяется комбинацией адрес: порт + адрес: порт, которая уже была выбрана Хост А.
Еще одна странная вещь в вашем примере заключается в том, что Хост B в вашем примере есть адреса 1:0:0:0:0:0:0:b0
и 1:0:0:0:0:0:0:b1
на разных интерфейсах. Разумеется, эти два адреса выглядят так, как будто они принадлежат одному интерфейсу (один и тот же префикс?).
Было бы актуально что-то вроде этого:
Хост А имеет несколько адресов, которые потенциально могут использоваться в качестве исходного адреса.
когда Хост А создает новое соединение (т. е. отправляет исходный TCP SYN) на некоторый указанный адрес, в процессе выбора исходного адреса оно будет применяться Раздел 5 Правило 5 (только одно из нескольких правил, которые применяются в процессе выбора), что гарантирует, что любой адрес Хост А выбирает, он предпочтет адреса, назначенные интерфейсу, который будет использоваться (в соответствии с маршрутами) для отправки на указанный адрес назначения, а не другим адресам.
То есть, какой бы интерфейс, указанный в таблице маршрутизации, не использовался для адреса назначения, будет влиять на то, какой адрес выбрать в качестве адреса источника.