CVS tracks all revisions to a file in an associated file with the same name as the original file but with the string ",v" (for version) appended to the filename. These files are stored in a (possibly centralised) repository.
Changes are checked in or "committed" along with a comment (which appears in the the "commit log"). CVS has the notions of projects, branches, file locking and many others needed to provide a full-functioned repository.
It is commonly accessed over over its own "anonCVS" protocol for read-only access (many open source projects are available by anonymous CVS) and over the SSH protocol by those with commit privileges ("committers").
CVS has been rewritten several times and does not depend on RCS. However, files are still largely compatible; one can easily migrate a project from RCS to CVS by copying the history files into a CVS repository. A sub-project of the OpenBSD project is building a complete new implementation of CVS, to be called OpenCVS.