In Next.js server components, data fetching happens during the server-side rendering process. The component function is async and uses await to pause execution until the fetch call completes and the JSON data is parsed. Once data is ready, the component renders JSX with the data included. The server then sends the fully rendered HTML to the client. This means the client receives content immediately without waiting for data loading. The execution table shows each step from starting the component, fetching data, parsing it, rendering, and sending HTML. Variables like 'res' and 'data' change as the fetch and parsing complete. Using await ensures the component waits for data before rendering, preventing errors or empty content.