What is the difference between an RNIC and a TOE?
Like an RNIC, the purpose of a TOE (TCP offload engine) is to reduce the burden of network processing on a computer’s CPU. For TCP traffic, that burden takes three forms: (1) TCP protocol processing such as assembling messages and error checking, (2) data movement between NIC memory, operating-system kernel memory, and application memory, and (3) context switches from user space to kernel space and back when network processing needs to be done. A TOE is a network interface card with on-board TCP processing capability. It relieves the first of the three burdens. It does not do RDMA and so does not relieve the second and third burdens. An RNIC, on the other hand, relieves all three burdens. (Also, technically the first burden could be processing a transport protocol other than TCP, such as SCTP.) So an RNIC is basically a TOE with RDMA capabilities.