In practice, a host probably doesn't decrement the TTL, but what an actual host or OS does is off-topic here.
According to RFC 791, Internet Protocol, the IPv4 module in the host network stack should decrement the TTL, too, as it processes the IPv4 header. This is to protect upper-layer protocols from old data:
Time to Live: 8 bits
This field indicates the maximum time the datagram is allowed to
remain in the internet system. If this field contains the value zero,
then the datagram must be destroyed. This field is modified in
internet header processing. The time is measured in units of seconds,
but since every module that processes a datagram must decrease the
TTL by at least one even if it process the datagram in less than a
second, the TTL must be thought of only as an upper bound on the time
a datagram may exist. The intention is to cause undeliverable
datagrams to be discarded, and to bound the maximum datagram lifetime.
Time to Live
The time to live is set by the sender to the maximum time the datagram
is allowed to be in the internet system. If the datagram is in the
internet system longer than the time to live, then the datagram must
This field must be decreased at each point that the internet header is
processed to reflect the time spent processing the datagram. Even if
no local information is available on the time actually spent, the
field must be decremented by 1. The time is measured in units of
seconds (i.e. the value 1 means one second). Thus, the maximum time
to live is 255 seconds or 4.25 minutes. Since every module that
processes a datagram must decrease the TTL by at least one even if it
process the datagram in less than a second, the TTL must be thought of
only as an upper bound on the time a datagram may exist. The
intention is to cause undeliverable datagrams to be discarded, and to
bound the maximum datagram lifetime.
Some higher level reliable connection protocols are based on
assumptions that old duplicate datagrams will not arrive after a
certain time elapses. The TTL is a way for such protocols to have an
assurance that their assumption is met.
This leads to some confusion. Certainly, if a host is configured to forward IPv4 packets to other hosts on other networks, including VMs on an internal, virtual network, it should decrement the TTL, but that doesn't always seem to happen in real life.
For IPv6, the wording is more specific, telling you that a node that forwards a packet must decrement the Hop Limit field. Instead of a TTL field, IPv6 uses a Hop Limit field. The IPv6 Hop Limit field is really the same thing as the IPv4 TTL field.
RFC 2460, Internet Protocol, Version 6 (IPv6) Specification:
8-bit unsigned integer. Decremented by 1 by each node that forwards
the packet. The packet is discarded if Hop Limit is decremented to
The IPv6 RFC seems to say that IPv4 hosts are required to enforce the TTL, which doesn't seem to really happen:
8.2 Maximum Packet Lifetime
Unlike IPv4, IPv6 nodes are not required to enforce maximum packet
lifetime. That is the reason the IPv4 "Time to Live" field was
renamed "Hop Limit" in IPv6. In practice, very few, if any, IPv4
implementations conform to the requirement that they limit packet
lifetime, so this is not a change in practice. Any upper-layer
protocol that relies on the internet layer (whether IPv4 or IPv6) to
limit packet lifetime ought to be upgraded to provide its own
mechanisms for detecting and discarding obsolete packets.