Linux
如何選擇發送響應數據包的設備
我讀到,當核心確定數據包的源 ipv6 地址時,它會考慮將使用哪個介面來發送數據包,
*(http://www.rfc-editor.org/rfc/rfc3484.txt,第 5 節)*規則 5:首選傳出介面。如果 SA 分配給將用於發送到 D 的介面,而 SB 分配給不同的介面,則首選 SA。類似地,如果 SB 分配給將用於發送到 D 的介面,而 SA 分配給不同的介面,則首選 SB。
- D = 目標地址
但是介面本身是如何確定的呢?我們以 tcp 握手為例:
- 主機A有一個介面和一個IP地址
1:0:0:0:0:0:0:a
- 主機B有兩個帶 ip 的介面 eth0 和帶 ip
1:0:0:0:0:0:0:b0
的 eth11:0:0:0:0:0:0:b1
- A向**B
1:0:0:0:0:0:0:b0
發送SYN 。B以 SYN-ACK 響應。它應該在 Ipv6 標頭中設置 src ip。據我了解(如果我錯了,請糾正我!)它將在我上面連結的 rfc 中的規則之間進行選擇
1:0:0:0:0:0:0:b0
,1:0:0:0:0:0:0:b1
但我無法圍繞它們,尤其是規則 5,因為我不知道如何首先選擇介面。
您的範例與第 5 節(“源地址選擇”)無關。
在您的範例中,當主機 B響應來自主機 A的 SYN 數據包時,它無法選擇使用哪個地址。TCP 連接由 address:port + address:port 組合定義,主機 A已經選擇了該組合。
您範例中的另一個奇怪之處是您範例中的主機 B具有地址
1:0:0:0:0:0:0:b0
和1:0:0:0:0:0:0:b1
不同的介面。合理地,這兩個地址看起來像是屬於同一個介面(相同的前綴?)。與此相關的是:
主機 A有多個可能用作源地址的地址。
當主機 A創建一個新連接(即它將發送初始 TCP SYN)到某個指定地址時,在源地址選擇過程中它將應用第 5 節規則 5(只是在選擇過程),它確保無論主機 A選擇哪個地址,它都會更喜歡分配給將用於(根據路由)發送到指定目標地址的介面的地址,而不是其他地址。
即,路由表說用於目標地址的任何介面都會影響選擇哪個地址作為源地址。