Such issues may occur if you are tunnelling connections or having a NAT somewhere on the way, which works one way but not properly doing NAT back. Routing may be an issue as well.
The simplest way to start with is to check the routing on all 3 machines. You can do that with:
I don't know your specific setup but you should be using proper interfaces and gateways, pay attention to netmasks as well.
Then, have a look at the NAT table:
iptables -L -n -t nat
Sometimes firewall may be an issue so worth checking those too:
iptables -L -n
You haven't specified the protocol that you use (UDP/TCP) so I'm assuming TCP. TCP connections have several states in which they can be. You can have Cacti monitor those for you in a graphical way, have a look here on Cacti forums, how to set it up: http://forums.cacti.net/viewtopic.php?f=12&t=12787
On top of that, you can add ip_conntrack module ( modprobe nf_conntrack ) or just compile it into your kernel (harder, but maybe your default Linux kernel already supports it).
You will see a connections list along with their status. You can use grep to filter out what you don't need or just look for what is of your interest. You can have it run every minute (from crontab) and dump the connection status into a file, like this:
grep IP_serverB /proc/net/ip_conntrack > `date +%Y%m%d_%H:%M`
Which will put all the connections to/from IP_serverB into a file named: 20131003_23:11 into the current directory.
That way you can see what happens on both of the machines (or 3 of them, if you let it run on 3 of them). Wikipedia has a nice graph illustrating each TCP state here: http://upload.wikimedia.org/wikipedia/commons/thumb/a/a2/Tcp_state_diagram_fixed.svg/796px-Tcp_state_diagram_fixed.svg.png
You can also setup tcpdump to log your tcp connections to/from given machines in this way:
tcpdump -i <network_interface> host <IP> and ip proto \\tcp and port <port> -l > tcpdump_logfile &
Or if you want to look at it real time AND log it into a file at the same time, do:
tcpdump -i <network_interface> host <IP> and ip proto \\tcp and port <port> -l | tee tcpdump_logfile
With extra -v(vv) parameters you can increase verbosity. Tcpdump will log all the details of TCP connections (without the data itself). This should also help you diagnose, what happens on the wire.
Ettercap/wireshark/tshark could be your friend if you wanted to actually see the data within TCP packets.