We have an asp.net app that makes an http request call to
a server by dns name (there are 3 vips associated with
this dns name). For some reason, all our calls are
resolving to only one of the VIPs. Running an nslookup
command shows all 3 IP address of the 3 VIPs (in
different orders on each call); this confirms that DNS is
not favoring any of these addresses; it was clearly doing
a round-robin. We tried setting the TTL value to 1/0 but
this did not work; most calls were still going to the one
vip. Running "ipconfig/dnsflush" did not work either.
If dns is not the problem, then can .net be the issue?

The code leaves the dns resolution to the .NET Framework
network layer (the ServicePoint class). We don't
explicitly do anything to those objects. Is it possible
that this resolves the IP address and caches it?

Re: .Net network layer have DNS caching flaw? by William

William
Fri Aug 29 04:15:42 CDT 2003

As a test, set the TTL on all the records in your set to 0. Then clear the
cache on the server (dnscmd /clearcache) and on the client (ipconfig
/flushdns). Now rerun your test and see it that shows it using Round robin.
The issue is the client resolver cache. Round robin only works when you
make a query to the dns server, if the records are cached locally (for their
TTL period) then your not hitting the DNS server each time and the .NET DNS
method is just returning the IPs from cache in the order they where placed
there. Your client should, however, get a new order after the cache expires
for the records. This does not mean they *will get a different order. Your
client could get the same order back depending on how many people hit the
DNS server before you. This is one reason why round robin is not a load
balancer, but can only "help" spread the load given many clients from
*different locations (i.e. not the same network or ISP.) If you want to
manually change the order in your asp app, get the IPs using .net's DNS
class and order the IPAddress[] however you want. I would not cache that
array, but reload it each time an IP is needed as IPs do change. Can your
http request method take an IP instead of a name?

--
William Stacey, DNS MVP

"Chichi Paparucci" <chichi@vzavenue.net> wrote in message
news:015901c36df3$876ddaf0$a001280a@phx.gbl...
> We have an asp.net app that makes an http request call to
> a server by dns name (there are 3 vips associated with
> this dns name). For some reason, all our calls are
> resolving to only one of the VIPs. Running an nslookup
> command shows all 3 IP address of the 3 VIPs (in
> different orders on each call); this confirms that DNS is
> not favoring any of these addresses; it was clearly doing
> a round-robin. We tried setting the TTL value to 1/0 but
> this did not work; most calls were still going to the one
> vip. Running "ipconfig/dnsflush" did not work either.
> If dns is not the problem, then can .net be the issue?
>
> The code leaves the dns resolution to the .NET Framework
> network layer (the ServicePoint class). We don't
> explicitly do anything to those objects. Is it possible
> that this resolves the IP address and caches it?
>
>
>
>
>
>
>



Re: .Net network layer have DNS caching flaw? by Chichi

Chichi
Fri Aug 29 10:23:46 CDT 2003

The request method can take an IP, but we don't want to
code to an IP (for obvious reasons). Since 80% of our
requests are hitting this one IP, it sounds like our only
choice is to manually rotate the order in code?

Is there a way to validate where each request's getting
the IP from - the dns server or cache? Even with TTL set
to 0, it still hung on the one IP.

I'll follow up with you on our findings from your
suggestion.

ChiChi

>-----Original Message-----
>As a test, set the TTL on all the records in your set to
0. Then clear the
>cache on the server (dnscmd /clearcache) and on the
client (ipconfig
>/flushdns). Now rerun your test and see it that shows
it using Round robin.
>The issue is the client resolver cache. Round robin
only works when you
>make a query to the dns server, if the records are
cached locally (for their
>TTL period) then your not hitting the DNS server each
time and the .NET DNS
>method is just returning the IPs from cache in the order
they where placed
>there. Your client should, however, get a new order
after the cache expires
>for the records. This does not mean they *will get a
different order. Your
>client could get the same order back depending on how
many people hit the
>DNS server before you. This is one reason why round
robin is not a load
>balancer, but can only "help" spread the load given many
clients from
>*different locations (i.e. not the same network or
ISP.) If you want to
>manually change the order in your asp app, get the IPs
using .net's DNS
>class and order the IPAddress[] however you want. I
would not cache that
>array, but reload it each time an IP is needed as IPs do
change. Can your
>http request method take an IP instead of a name?
>
>--
>William Stacey, DNS MVP
>
>"Chichi Paparucci" <chichi@vzavenue.net> wrote in message
>news:015901c36df3$876ddaf0$a001280a@phx.gbl...
>> We have an asp.net app that makes an http request call
to
>> a server by dns name (there are 3 vips associated with
>> this dns name). For some reason, all our calls are
>> resolving to only one of the VIPs. Running an nslookup
>> command shows all 3 IP address of the 3 VIPs (in
>> different orders on each call); this confirms that DNS
is
>> not favoring any of these addresses; it was clearly
doing
>> a round-robin. We tried setting the TTL value to 1/0
but
>> this did not work; most calls were still going to the
one
>> vip. Running "ipconfig/dnsflush" did not work either.
>> If dns is not the problem, then can .net be the issue?
>>
>> The code leaves the dns resolution to the .NET
Framework
>> network layer (the ServicePoint class). We don't
>> explicitly do anything to those objects. Is it
possible
>> that this resolves the IP address and caches it?
>>
>>
>>
>>
>>
>>
>>
>
>
>.
>