Unity has to turn the C# you write into something each device can actually run. Over the years it has done this in a few different ways, and you'll hear all three names.
Mono is another version of that .NET runtime, its own independent take on the same idea. Not the CLR itself, but a sibling that does the equivalent job. It was Unity's runtime for years, and a big reason C# could power games across so many platforms. With Mono, the halfway code (CIL) ships inside your game, and the runtime translates it into machine code on the device while the game runs.
IL2CPP ("Intermediate Language to C++") is the newer approach. Instead of translating on the device as it runs, it takes your compiled code and converts it into C++ ahead of time, which is then built into native machine code for each platform. Some platforms, like iOS, don't allow on-the-device translation at all, so IL2CPP became the way to reach them. It also tends to run faster, which is why many modern games use it.
CoreCLR is the modern, cross-platform runtime from today's mainstream .NET (.NET Core and .NET 5 and up). It's the same lineage as the original CLR, but rebuilt to run on Windows, Mac, and Linux, and it's where Microsoft's active development is currently focused. Unity has been working to adopt CoreCLR to replace the aging Mono backend, bringing modern .NET and a much better JIT and garbage collector to the engine, so it's the direction things are heading.


