Protocol

What is NVMe/TCP?

NVMe over TCP is a storage networking protocol that enables access to NVMe (Non-Volatile Memory Express) storage devices over standard TCP/IP networks, delivering near-native NVMe performance without specialized hardware.

Technical Overview

NVMe/TCP was standardized by NVM Express, Inc. as part of the NVMe over Fabrics (NVMe-oF) specification (TP8000, published 2018) and is now part of the mainstream NVMe 2.0 base specification. The protocol encapsulates NVMe commands and data inside TCP segments, using a defined PDU (Protocol Data Unit) framing layer that sits between NVMe and TCP. Because TCP handles flow control, ordering, and retransmission, NVMe/TCP requires no changes to your network switches, NICs, or cabling — any standard Ethernet infrastructure at 10 GbE or higher works out of the box.

The Linux kernel has included an NVMe/TCP initiator driver since kernel 5.0 (2019) and a target implementation via the nvmet-tcp module since 5.0 as well. This means the vast majority of modern Linux distributions ship with full NVMe/TCP support without any out-of-tree drivers. On the performance side, NVMe/TCP supports up to 64,000 I/O queues per controller and up to 64,000 commands per queue — a dramatic improvement over legacy protocols like iSCSI, which supports a single queue with 128 commands.

The protocol operates on TCP port 4420 by default (IANA-assigned). A typical connection flow begins with the initiator establishing a TCP connection to the target, followed by an NVMe/TCP Connect command that specifies the target NVMe subsystem NQN (NVMe Qualified Name). After authentication (optional, using DH-HMAC-CHAP), I/O queues are established and the initiator can submit read/write commands that map directly to NVMe queue entries on the target controller.

How It Relates to NVMe/TCP

As the subject of this glossary, NVMe/TCP is the central protocol tying together all surrounding concepts — namespaces, subsystems, initiators, targets, and transport-layer metrics like IOPS and latency. Its key differentiator from other NVMe-oF transports (RDMA, Fibre Channel) is that it trades a small amount of additional CPU overhead for universal infrastructure compatibility. simplyblock.io is built on NVMe/TCP, providing Kubernetes-native block storage that inherits the protocol's performance advantages without requiring any specialized hardware.

Key Characteristics

  • Transport: Standard TCP/IP — no RDMA NICs, no FC HBAs required
  • Latency: Typically 25–40 µs over a local network (vs. 50–100 µs for iSCSI)
  • Queue model: Up to 64K queues × 64K commands per queue (vs. 1 × 128 for iSCSI)
  • Kernel support: Linux 5.0+ initiator and target drivers included in mainline
  • Port: TCP 4420 (IANA-assigned)
  • Authentication: Optional DH-HMAC-CHAP in-band authentication

NVMe/TCP vs Alternatives

Protocol Transport Latency Special Hardware
NVMe/TCP TCP/IP Ethernet 25–40 µs None
NVMe/RDMA RDMA (RoCE/iWARP) 10–20 µs RDMA-capable NIC
iSCSI TCP/IP Ethernet 100–200 µs None
Fibre Channel FC fabric 30–50 µs FC HBA + FC switches

NVMe in Kubernetes: Why Latency Matters