在同一个子网的模块中拥有两个接口,并不能让你有两个接口进入和离开模块。虽然你确实有两个接口进入模块,但STCP在发送数据包出模块时只用一个接口。无论客户端连接到哪个接口,它都会这样做。
例如,给定172.16.1.0/24子网的这两个接口。
%phx_vos#sdlmux.m16.10.11-2 IP: 172.16.1.116 MAC: 00:00:a8:42:52:22
%phx_vos#sdlmux.m16.11.11-2 IP: 172.16.1.226 MAC: 00:00:a8:43:52:22
在图1中注意到,发送到172.16.1.226的数据包使用的目的MAC地址是00:00:a8:43:52:22,但回复来自于00:00:a8:42:52:22,即172.16.1.116的MAC地址,尽管在数据包中回复显示为来自172.16.1.226。
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 - 从模块到另一台服务器的连接请求(服务器上的跟踪记录
即使你在发送数据包时绑定到第二个(226)IP地址,它也会通过第一个(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) 接口出现故障时,模块才会转向使用第二个 (226) 接口。虽然与第二个(226)接口的连接将保持,但与第一个(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。
二是用netstat看一下接口,产生一些流量,再运行netstat,比较一下。只有一个接口的"传输帧"计数器应该是递增的。
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比较传输帧计数器
第三种方法是连接到另一个系统上的服务,看看使用的是什么本地源地址。除非你明确绑定到另一个地址,否则源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 - 为接口添加别名