Another problem might be a firewall issue. If there is a firewall between the database servers, your firewall may be configured to allow connections to remain open for a certain period of time, and you are past that period of time. The firewall terminates the connection and your local side receives this error.
You may also have a protocol.ora conifiguration file that is causing your problems. Many people do not need such a file. Rename the file (on the remote server) to something else and restart the listener. Then try your operation again. If you get the following query to work:
SELECT sysdate FROM dual@link_name;
Then you'll know everything is just fine. Those are the first places to look.