When running traceroutes some hops return * which as far as I know means that the host is not responding to ICMP echo request, and some other hops (mainly the last) return !H which according to the man pages it means that the host is unreachable. What does unreachable means? That there's no known route to that address?
The simple difference is that for an unreachable host, the last hop router is returning an ICMP destination unreachable response.
Most routers will hardware process ACLs or rate limits, but generation of ICMP responses require CPU resources so it is common practice to not generate them.
The answer by YLearn is correct but it is important to know more details.
*means that your machine received no response.
!Hmeans that your machine received ICMP message "destination host unreachable" from the host indicated in the
traceroutecan indicate also other unreachable messages like
!P(network or protocol) etc.
A machine normally sends "destination host unreachable" when it cannot send the IP packet to the network. This could happen when:
- There is no route to the destination.
- The next hop IP address or the final IP address cannot be resolved to an L2 address (there is no ARP reply for the IP address).
As YLearn wrote, routers can be configured to not to send the ICMP message but you can also get
* instead of
!H when your request was silently dropped by an ACL or firewall policy. In security policies silent drop is a normal practice. The drop caused by a security policy depends on the type of the message sent by
traceroute. Traditional Unix
traceroute by default sends UDP packets to "unusual" ports like 33434 but it can use other methods too. Windows
tracert sends ICMP echo request.