TCP communication skip local node loopback address
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/communication/tcp/TcpCommunicationSpi.java b/modules/core/src/main/java/org/apache/ignite/spi/communication/tcp/TcpCommunicationSpi.java
index 1dd48d1..15faeb3 100755
--- a/modules/core/src/main/java/org/apache/ignite/spi/communication/tcp/TcpCommunicationSpi.java
+++ b/modules/core/src/main/java/org/apache/ignite/spi/communication/tcp/TcpCommunicationSpi.java
@@ -2987,6 +2987,10 @@
         if (isExtAddrsExist)
             addrs.addAll(extAddrs);
 
+        if (log.isDebugEnabled())
+            log.debug("Addresses resolved from attributes [rmtNode=" + node.id() + ", addrs=" + addrs +
+                ", isRmtAddrsExist=" + isRmtAddrsExist + ']');
+
         Set<InetAddress> allInetAddrs = U.newHashSet(addrs.size());
 
         for (InetSocketAddress addr : addrs) {
@@ -3015,7 +3019,7 @@
         }
 
         if (log.isDebugEnabled())
-            log.debug("Addresses to connect for node [rmtNode=" + node.id() + ", addrs=" + addrs.toString() + ']');
+            log.debug("Addresses to connect for node [rmtNode=" + node.id() + ", addrs=" + addrs + ']');
 
         boolean conn = false;
         GridCommunicationClient client = null;
@@ -3024,6 +3028,15 @@
         int connectAttempts = 1;
 
         for (InetSocketAddress addr : addrs) {
+            if (addr.getAddress().isLoopbackAddress() && addr.getPort() == boundTcpPort) {
+                if (log.isDebugEnabled())
+                    log.debug("Skipping local address [addr=" + addr +
+                        ", locAddrs=" + node.attribute(createSpiAttributeName(ATTR_ADDRS)) +
+                        ", node=" + node + ']');
+
+                continue;
+            }
+
             long connTimeout0 = connTimeout;
 
             int attempt = 1;