Easing functions specify the rate of change of a parameter over time.
Objects in real life don’t just start and stop instantly, and almost never move at a constant speed. When we open a drawer, we first move it quickly, and slow it down as it comes out. Drop something on the floor, and it will first accelerate downwards, and then bounce back up after hitting the floor.
This page helps you choose the right easing function.
@keyframes, see above.