Honda's Dani Pedrosa got the hole shot but it was Yamaha Factory Racing's Ben Spies who led the opening laps after overtaking Pedrosa early on.
Spies team mate, championship leader Jorge Lorenzo - the only prototype rider to opt for the soft option rear tyre - had a less than ideal start, but was soon up into third, forcing his way past
Yamaha Tech 3's Andrea Dovizioso.
Pedrosa and Spies were providing a entertaining battle at the front in the early stages, as Lorenzo was unable to close the pair down. Meanwhile, Pedrosa's factory Honda team mate Casey Stoner, riding with a pain killing injection due to his fractured right ankle with torn ligaments, forced his way past Honda privateer Alvaro Bautista with a strong move.
On lap five Pedrosa made a move stick down the main straight to take the lead, and a lap later, Stoner was a man on a mission as he also took Honda privateer Stefan Bradl to go fifth.
It was misery for Ben Spies as the home favourite's engine blew at full throttle halfway down the main straight on lap seven, bringing out the oil flags as the Yamaha rider immediately pulled off the racing line.
This affected the following group, as Stoner dropped back again behind Dovizioso and Bradl. Three laps later, Tech 3's British rider Cal Crutchlow lost the front end of his bike in Turn 4, while Stoner fought his way back past his group into third.
With 12 laps to go Pedrosa, running at lap-record pace, had a big wobble, but managed to stay on the circuit. Even that didn't slow him down, however and hew soon got back in the groove.
Five laps later, Dovizioso was all over the back of Stoner, who was fighting fearlessly with his injury, and took him for third.
But in the end it was Pedrosa's dominant performance that gave him his fifith podium and his second win of the season, ahead of Lorenzo and Dovizioso.
Lorenzo retained his championship lead, albeit cut to 18 points by Pedrosa, but the ride of the day was arguably Stoner's teeth-gritted battle past the pain from his ankle into fourth. Bautista came in fifth, ahead of Bradl, Ducati's Valentino Rossi and Ducati privateer Karel Abraham.
Speed Up rider Andrea Iannone took the hole shot ahead of Kalex's Pol Espargaró and Suter sider Dominique Aegerter. Aegerter was fastest in the early laps however, as he took and held the lead.
Championship leader Marc Márquez (Suter) got a rocky start but soon made his way aggressively past Iannone and Espargaró in the first two laps to hunt down the Swiss rider, whom he overtook down the main straight on lap five.
A lap later Espargaró, who had dropped down the order, went past Julián Simón (Suter), as he tried to reel in Marquez at the front.
Two laps later Iannone and Espargaró both went past Aegerter, who seemed to be slowing, on the main straight.
Espargaro seemed to regain the pace he'd shown all weekend as he went past Iannone the Italian to take second - and Simón took advantage of Iannone's momentary distraction to slip into third!
But Iannone's race was run, as he slowed and was also passed by Mika Kallio (Kalex) and Aegerter.
By mid-race Márquez had pulled a gap of more than six seconds, as Iannone dropped back to 10th and Thomas Lüthi (Suter) moved up to challenge Kallio for fourth.
On lap 16 Tech 3 teenager Xavier Simeon slid into the FTR of Alex de Angelis, taking both out of the race. Neither was hurt, but it earned the youngster a loud, profane and very public trackside dressing-down from the San Marino veteran.
But nobody got anywhere near Marquez as the field spread out in the closing stages, as the Spanish teenager put in a faultless ride to extend his championship lead with an emphatic victory, ahead of Espargaró and Simón in third. Márquez now holds a 39-point advantage over Espargaró in the standings, while Simón recorded his first podium since Portugal in 2011. Mika Kallio won the battle for fourth, ahead of Lüthi, Kalex rider Scott Redding, Aegerter, Simone Corsi (FTR), Iannone and Claudio Corti on a Kalex.
KTM's Danny Kent, Luis Salom (Kalex KTM) and Kent's team mate Sandro Cortese got the best of the start, but there was a big crash on lap one as Adrian Martín (FTR Honda) took out Niklas Ajo (KTM) and FGR rider Jasper Iwema was skittled FTR Honda's Niccolò Antonelli.
Ajo got back on track was black-flagged shortly after for “unsporting behaviour” after confronting Martín after the crash.
By lap seven Alex Rins (Suter Honda) and Maverick Viñales (FTR Honda) were swapping positions in second place, as KTM rider Zulfahmi Khairuddin tried to pull out a gap at the front.
Meanwhile, Salom's team mate, South African Brad Binder, had retired with an engine problem, and Cortese and Salom had fought past Khairuddin to chase down Viñales.
The last lap was a cliff-hanger as Cortese, Viñales and Salom swapping positions fiercely, banging fairings on every corner - but it was Salom who judged it perfectly to take his first Grand Prix victory ahead of Cortese, while Viñales provided last minute drama by falling in the final turn, and was unable to get his bike re-started. Folger benefited from this to take his first podium of the season in his first race for the Aspar team.
This now gives Cortese a 29-point lead at the top of the championship.
Rins' team mate Miguel Oliveira was fourth ahead of FTR Honda rider Romano Fenati, Khairuddin, Rins, Jakub Kornfeil and Alberto Moncayo on FTR Hondas and Alexis Masbou on a Honda.
RESULTS - MOTOGP
1 Dani Pedrosa (Spain) Honda - 46min39.631
2 Jorge Lorenzo (Spain) Yamaha +10.823sec
3 Andrea Dovizioso (Italy) Yamaha +17.310
4 Casey Stoner (Australia) Honda +19.803
5 Alvaro Bautista (Spain) Honda +22.556
6 Stefan Bradl (Germany) Honda +30.072
7 Valentino Rossi (Italy) Ducati +57.614
8 Karel Abraham (Czech Republic) Ducati +1min08.442
9 Yonny Hernandez (Colombia) BQR +1min11.106
10 Aleix Espargaro (Spain) ART +1min14.079
11 Toni Elias (Spain) Ducati +1min26.305
12 Ivan Silva (Spain) BQR +1min40.274
13 Colin Edwards (US) Suter +1 lap
14 Steve Rapp (US) APR +1 lap
15 James Ellison (Britain) ART +1 lap
16 Aaron Yates (US) BCL +1lap
1 Marc Marquez (Spain) Suter - 45min13.763
2 Pol Espargaro (Spain) Kalex +5.855sec
3 Julian Simon (Spain) Suter +9.394
4 Mika Kallio (Finland) Kalex +15.549
5 Thomas Luthi (Switzerland) Suter +16.138
6 Scott Redding (Britain) Kalex +16.805
7 Dominique Aegerter (Switzerland) Suter +21.359
8 Simone Corsi (Italy) FTR +21.368
9 Andrea Iannone (Italy) Speed Up +25.873
10 Claudio Corti (Italy) Kalex +26.471
1 Luis Salom (Spain) Kalex KTM - 42min14.300
2 Sandro Cortese (Germany) KTM +0.056sec
3 Jonas Folger (Germany) Kalex KTM +2.940
4 Miguel Oliveira (Portugal) Suter Honda +3.027
5 Romano Fenati (Italy) FTR Honda +3.664
6 Zulfahmi Khairuddin (Malaysia) KTM +7.663
7 Alex Rins (Spain) Suter Honda +7.697
8 Jakub Kornfeil (Czech Republic) FTR Honda +11.203
9 Alberto Moncayo (Spain) FTR Honda +11.242
10 Alexis Masbou (France) Honda +13.163