Я считал, что, когда ядро определяет источник 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-пакет с Хоста A, у него нет выбора, какой адрес использовать. TCP-соединение определяется комбинацией address:port + address:port, которая уже была выбрана Host A.
Еще одна странная вещь в вашем примере заключается в том, что Host B в вашем примере имеет адреса 1:0:0:0:0:0:0:b0
и 1:0:0:0:0:0:b1
на разных интерфейсах. Разумно, что эти два адреса выглядят так, как будто они принадлежат одному и тому же интерфейсу (один и тот же префикс?).
Что было бы релевантно, так это то, что
Хост A имеет несколько адресов, которые потенциально могут быть использованы в качестве адреса источника.
Когда Host A создает новое соединение (т.е. посылает начальный TCP SYN) на некоторый указанный адрес, в процессе выбора исходного адреса он применит Раздел 5 Правило 5 (только одно из нескольких правил, которые все применяются в процессе выбора), что гарантирует, что какой бы адрес Host A ни выбрал, он будет предпочитать адреса, назначенные интерфейсу, который будет использоваться (в соответствии с маршрутами) для отправки по указанному адресу назначения, а не по другим адресам.
Ie, какой бы интерфейс, по словам таблицы маршрутизации, ни использовался для адреса назначения, это повлияет на то, какой адрес будет выбран в качестве исходного.
.