I have a theory, but I don't have enough information to prove it. I
know that messenger establishes a persistent TCP connection to a server
(baym-cs***.msgr.hotmail.com). You can see this with the NETSTAT
command. Capturing the traffic going to and from this server shows
exchanges of packets are widely spaced with several minutes between
them when it is working. The contents of the packets seem to be short
packets with updates of the status of contacts like "CHG 153 IDL".
The common ground with the disconnect problem is that everybody is
using a router with NAT to connect to the Internet. As you might know,
NAT allows one public IP address to service multiple private IP
addresses. This is done by translating port numbers to keep the host
connections sorted out. The router maintains a table of active
connections so when an incoming packet comes in addressed to a
particular port, it can look up that port and forward it to the proper
host on the internal LAN. To keep the table from overflowing, there is
a timeout function. If no traffic uses a specific translation in the
table during some period, it is removed. If the translation table
entry is removed, any incoming (from the Internet) traffic after that
point is discarded, so the connection is effectively broken.
My theory is when there is a sufficient delay between any Messenger
status updates, the connection times out at the NAT router. There are
two factors that may make the situation worse. First, inexpensive
routers have limited RAM, and thus the table is small and might time
out "old" connections sooner than it would otherwise. Secondly,
Microsoft probably makes the protocol as "sparse" as possible to
minimize traffic to all the messenger clients. The traffic to and from
the millions of Messenger users would add up to significant bandwidth,
even for Microsoft.
Unfortunately I don't know of any technique to solve this problem, if
it is indeed the root cause of the disconnects. Maybe that is why this
topic has been brought up regularly for several years. Lots of people
say "yes I have that problem" but nobody ever discovers any solution.
Microsoft could potentially solve it by putting a "keep alive" function
into Messenger, so the client would check in with the server at a
regular interval. If the client initiates traffic, the NAT translation
will be re-established if it has timed out. But that would make for
more traffic at the MS servers, so they may not want to implement it.
------- Tim G -------- o953agd02 \at\ sneakemail /dot/ com
|