  Low-power and lossy networks (LLNs) enable diverse applications integrating
many resource-constrained embedded devices, often requiring interconnectivity
with existing TCP/IP networks as part of the Internet of Things. But TCP has
received little attention in LLNs due to concerns about its overhead and
performance, leading to LLN-specific protocols that require specialized
gateways for interoperability. We present a systematic study of a well-designed
TCP stack in IEEE 802.15.4-based LLNs, based on the TCP protocol logic in
FreeBSD. Through careful implementation and extensive experiments, we show that
modern low-power sensor platforms are capable of running full-scale TCP and
that TCP, counter to common belief, performs well despite the lossy nature of
LLNs. By carefully studying the interaction between the transport and link
layers, we identify subtle but important modifications to both, achieving TCP
goodput within 25% of an upper bound (5-40x higher than prior results) and
low-power operation commensurate to CoAP in a practical LLN application
scenario. This suggests that a TCP-based transport layer, seamlessly
interoperable with existing TCP/IP networks, is viable and performant in LLNs.
