同じサブネット上のモジュールに2つのインターフェイスを持っていても、モジュールに2つのインターフェイスを出し入れすることはできません。モジュールには2つのインターフェイスがありますが、STCPはモジュールからパケットを送信するときには1つのインターフェイスだけを使用します。これは、クライアントがどのインターフェイスに接続しているかに関係なく行われます。
例えば、172.16.1.1.0/24 サブネット上の以下の 2 つのインターフェイスがあるとします。
%phx_vos#sdlmux.m16.10.11-2 IP: 172.16.1.116 MAC: 00:00:00:a8:42:52:22
%phx_vos#sdlmux.m16.11.11-2 IP: 172.16.1.226 MAC: 00:00:00:a8:43:52:22
図1では、172.16.1.226に送信されたパケットは宛先MACアドレス00:00:00:a8:43:52:22を使用していますが、172.16.1.116のMACアドレスである00:00:a8:42:52:22からの返信であることに注意してください。
11:04:57.117 Xmit Ether Dst 00:00:a8:43:52:22 Src 00:00:a8:42:3b:6e Type 0800
+(IP)
IP Ver/HL 45, ToS 0, Len 2c, ID 2045, Flg/Frg 0, TTL 3c, Prtl 6
Cksum 0363, Src ac100122, Dst ac1001e2
TCP from 172.16.1.34.49183 to 172.16.1.226.telnet
. . .
11:04:57.130 Rcvd Ether Dst 00:00:a8:42:3b:6e Src 00:00:a8:42:52:22 Type 0800
+(IP)
IP Ver/HL 45, ToS 0, Len 2c, ID 7c8, Flg/Frg 0, TTL 3c, Prtl 6
Cksum 1be0, Src ac1001e2, Dst ac100122
TCP from 172.16.1.226.telnet to 172.16.1.34.49183
. . .
図 1 - モジュールへの接続要求 (クライアント上で取得されたトレース)
モジュールが接続を受信する代わりに接続を開始する場合、モジュールは常に最初の(116)インターフェースを使用します。
13:01:36.479 Rcvd Ether Dst 00:00:a8:42:3b:6e Src 00:00:a8:42:52:22 Type 0800
+(IP)
IP Ver/HL 45, ToS 0, Len 2c, ID 4a33, Flg/Frg 0, TTL 3c, Prtl 6
Cksum d9e2, Src ac100174, Dst ac100122
TCP from 172.16.1.116.49320 to 172.16.1.34.4680
. . .
図 2 - モジュールから別のサーバへの接続要求 (サーバ上で取得されたトレース)
パケット送信時に2つ目の(226)IPアドレスにバインドしても、1つ目の(116)インターフェイスを経由して送信されます。
13:02:55.349 Rcvd Ether Dst 00:00:a8:42:3b:6e Src 00:00:a8:42:52:22 Type 0800
+(IP)
IP Ver/HL 45, ToS 0, Len 2c, ID 4b7a, Flg/Frg 0, TTL 3c, Prtl 6
Cksum d82d, Src ac1001e2, Dst ac100122
TCP from 172.16.1.226.49321 to 172.16.1.34.4680
. . .
図 3 - モジュールから別のサーバへの接続要求 (他のサーバで取得されたトレース)
172.16.1.226 IP インターフェースにバインドされたクライアントアプリケーション
最初の (116) インターフェイスがダウンした場合のみ、モジュールは 2 番目の (226) インターフェイスを使用するようにシフトします。2 番目の (226) インターフェイスへの接続は維持されますが、1 番目の (116) インターフェイスへの接続は失敗します。
13:14:43.884 Xmit Ether Dst 00:00:a8:43:52:22 Src 00:00:a8:42:3b:6e Type 0800
+(IP)
IP Ver/HL 45, ToS 0, Len 28, ID 5072, Flg/Frg 0, TTL 3c, Prtl 6
Cksum d339, Src ac100122, Dst ac1001e2
TCP from 172.16.1.34.49186 to 172.16.1.226.telnet
. . .
13:14:43.885 Rcvd Ether Dst 00:00:a8:42:3b:6e Src 00:00:a8:42:52:22 Type 0800
+(IP)
IP Ver/HL 45, ToS 0, Len 28, ID 53ef, Flg/Frg 0, TTL 3c, Prtl 6
Cksum cfbc, Src ac1001e2, Dst ac100122
TCP from 172.16.1.226.telnet to 172.16.1.34.49186
. . .
インターフェイス 172.16.1.116 が失敗しました - ソース MAC アドレスの変更に注意してください。
13:15:56.718 Xmit Ether Dst 00:00:a8:43:52:22 Src 00:00:a8:42:3b:6e Type 0800
+(IP)
IP Ver/HL 45, ToS 0, Len 29, ID 50e7, Flg/Frg 0, TTL 3c, Prtl 6
Cksum d2c3, Src ac100122, Dst ac1001e2
TCP from 172.16.1.34.49186 to 172.16.1.226.telnet
. . .
13:15:56.719 Rcvd Ether Dst 00:00:a8:42:3b:6e Src 00:00:a8:43:52:22 Type 0800
+(IP)
IP Ver/HL 45, ToS 0, Len 29, ID 5552, Flg/Frg 0, TTL 3c, Prtl 6
Cksum ce58, Src ac1001e2, Dst ac100122
TCP from 172.16.1.226.telnet to 172.16.1.34.49186
. . .
図 4 - 最初のインターフェイスが失敗したときの MAC の変化 (クライアントで取得したトレース)
トラフィックを送信するためにどのインターフェースを使用するかは、どのようにして分かるのでしょうか?
いくつかの方法があります。 最初の方法は、リモートホストやネットワーク上で packet_monitor や他のプロトコルアナライザを使用して、ソースの Mac アドレスを評価することです(図 1 から 4 を参照)。
2つ目は、netstatを使ってインタフェースを見て、トラフィックを生成し、再度netstatを実行して比較することです。1つのインターフェイスだけが"送信フレーム"カウンタをインクリメントしているはずです。
netstat -interface #sdlmux.m16.10.11-2; netstat -interface #sdlmux.m16.11.11-2
. . .
MAC Statistics:
Received frames : 1598960
Received multicast and broadcast frames : 1564503
Received octets : 258513766
Transmitted frames : 531
Transmitted octets : 50850
. . .
MAC Statistics:
Received frames : 1603838
Received multicast and broadcast frames : 1569292
Received octets : 259291185
Transmitted frames : 15
Transmitted octets : 947
. . .
ready 13:29:48
ping 172.16.1.34
Pinging host 172.16.1.34 : 172.16.1.34
ICMP Echo Reply:TTL 60 time = 0 ms
ICMP Echo Reply:TTL 60 time = 0 ms
ICMP Echo Reply:TTL 60 time = 0 ms
ICMP Echo Reply:TTL 60 time = 0 ms
Host 172.16.1.34 replied to all 4 of the 4 pings
ready 13:29:55
netstat -interface #sdlmux.m16.10.11-2; netstat -interface #sdlmux.m16.11.11-2
. . .
MAC Statistics:
Received frames : 1603142
Received multicast and broadcast frames : 1568591
Received octets : 259187870
Transmitted frames : 535
Transmitted octets : 51274
. . .
MAC Statistics:
Received frames : 1607492
Received multicast and broadcast frames : 1572869
Received octets : 259880655
Transmitted frames : 15
Transmitted octets : 947
. . .
図5 - netstatを使用した送信フレームカウンタの比較
3 番目の方法は、別のシステム上のサービスに接続して、どのローカルソースアドレスが使用されているかを確認することです。別のアドレスに明示的にバインドしない限り、ソース IP アドレスはアクティブなインターフェイスに対応します。
netstat -numeric
Active connections
Proto Recv-Q Send-Q Local Address Foreign Address (state)
. . .
tcp 0 0 172.16.1.116:49369 172.16.1.34:23 ESTABLISHED
. . .
図 6 - 発信接続に使用されるインターフェイス
同じサブネット上に複数のインターフェイスを持つことは、混乱を招くだけで、通常は混乱を招くだけの価値がないというのが私の意見です。何らかの理由で同じサブネット上のIPアドレスにする必要がある場合は、最初のインターフェイスにエイリアスを追加します。
ifconfig #sdlmux.m16.10.11-2 172.16.1.226 -add -alias
インタフェース %phx_vos#sdlmux.m16.10.11-2 に IP アドレス 172.16.1.226 を追加しました。
%phx_vos#sdlmux.m16.10.11-2: <UP, BROADCAST, RUNNING, NOFORWARDBROADCAST, KEEPAL
+IVE>
172.16.1.116 netmask 0xffffff00 broadcast 172.16.1.255
Number of additional address(es): 1
172.16.1.226
図 7 - インターフェイスへのエイリアスの追加