如果您有多个接口并为每个接口配置了一个默认网关,那么默认情况下 TCP/IP 将根据接口速度自动计算接口跃点数。此接口跃点数将成为所配置的默认网关的路由表中的默认路由的跃点数。最高速度的接口具有默认路由的最低跃点数。这样,只要在多个接口上配置多个默认网关,就会使用最快速度的接口将通信转发到其默认网关。如果相同速度的多个接口具有相同的最低接口跃点数,那么根据绑定顺序,将使用第一个网络适配器的默认网关。如果第一个网络适配器不可用,则使用第二个网络适配器的默认网关。默认网关:是一台主机如果找不到可用的网关,就把数据包发给默认指定的网关,由这个网关来处理数据包.
在 TCP/IP 的早期版本中,多个默认网关都具有设置为1的默认路由跃点数,并且使用的默认网关将取决于接口顺序。有时,这会给确定TCP/IP协议正在使用哪一个默认网关带来一些困难。
一台电脑可以同时有多个网络连接,如果不绑定指定的IP,系统就会按照默认路由表经过默认的网关进行数据的收发;
拿一个简单的TCP通信程序来说,服务端需要在指定的端口进行监听,所以必须绑定指定的端口,而客户端创建的socket是连接指定的服务端,创建socket后直接调用connect()函数就可以连接到指定的服务端;系统会根据默认的路由和空闲的端口,让数据从指定的网关和端口出去;如果要从指定的网卡进行通信,可以在客户端创建socket后调用bind()绑定指定的IP和端口,然后在调用connet()连接指定的服务端.
FTP也一样,都是TCP方式的数据传输,如果需要FTP客户端要指定从哪个网络连接进行测试(即指定从哪个网卡收发数据),可以在创建socket是调用bind()函数对本机的IP进行绑定,无论是内网的IP还是公网的IP,只要绑定本机上的IP就行了!
还有一点很重要,就是调用bind()时绑定的端口要设为零,即让系统自己随机分配端口;FTP客户端连接服务器进行文件的上传和下载,需要和服务器建立两个通道:控制通道和数据通道.控制通道:传输FTP命令;数据通道:进行数据传输;一共有三个socket:负责命令通道的socket;负责数据传输的socket;建立数据通道时负责监听服务器连接的socket;三个socket在创建后都要绑定指定的网卡的IP,才可以从指定的网卡上进行收发数据.
最后一点就是要设置路由表了.要将各个网卡destination为0.0.0.0的路由的metric值都设为1才行!要不然,绑定了一个网卡的IP,它的路由路径的metric(路由跳转数)不为1,则登录不了服务器;范例:route change 0.0.0.0 mask 0.0.0.0 192.168.1.1 metric 1; 192.168.1.1就是绑定网卡的网关;如果两个网卡都时同一个局域网内的就不用再设路由表,因为他们都走同一个网关的!
修改(2010.06.24):修改路由表的时候,不能直接调用route change命令修改,而是先将需要修改的路由删除(例:route delete 0.0.0.0 mask 0.0.0.0 192.168.1.1 ),然后再添加新的路由(例:route add 0.0.0.0 mask 0.0.0.0 192.168.1.1 metric 1);直接修改会出现"创建数据通道失败"的错误!