NFSv4.1 has Sessions as a major new feature that changes clients from "stateless" to "stateful".
The Sessions feature addresses network outages and disrupted TCP connections. RPC requests and replies may need retries when new connections are established. Sessions provide "Exactly-Once" Semantics so that lost requests aren't executed more than once in this situation.
The NFS server has a Duplicate Requests Cache (DRC) that saves the replies for executed requests. If a request is duplicated in the DRC, the server resends the reply without executing the request again. The client does not acknowledge the replies so the NFS server does not know how many replies may be lost. The size of the DRC in that situation was not limited.
Sessions limits the amount of memory used for DRC by giving each client a fixed number of slots in a table. Each slot holds one client request. The client reuses a slot when the reply for the previous request in the slot has been received. The server now has information about the client receiving the server reply. This makes the client "stateful". If slots aren't available when needed, the client waits for an available slot.