Some of these definitions will vary depending on who you ask, so it's often a good idea to clarify exactly what is required (e.g. level of visual fidelity or interactions required). But from my experience, here is how I would define them:
Wireframes: non interactive, simple blueprints of your screens. These are often the next level up from a sketch on paper, but some agencies will use them as part of functional documentation too.
Prototypes: the main difference between prototypes and wireframes are that prototypes will have a level of interactivity to them. At the most simple level, you can click on links and buttons to navigate between otherwise static screens to get a sense of the flow. They can also be quite complex, simulating forms and complex interactions too. Generally, prototypes will be quite low fidelity in terms of visuals.
Mockups: this one probably has the widest range of possible definitions, but almost all of them imply a level of visual fidelity that's not seen in either wireframes or prototypes. Making mockups will typically involve Photoshop, Sketch, or your visual design tool of choice. They are often used as part of in-depth user research, where look and feel, visuals, and user experience are being tested together. The amount of interaction can vary too - it can be as simple as linking screens together, all the way through to simulating complex user flows, interactions, or animations as if it were as close to the final product as possible.
Again, different agencies or people may use these terms differently than the definitions above. The two main ways in which they differ is level of interactivity and level of visual fidelity. Wireframes are low fidelity and low interactivity, designed to quickly validate an idea, and are usually iterated quickly. Whereas mockups are high interactivity and high fidelity, intended to present detailed outputs to clients or senior stakeholders before proper development work begins.