The World Championship was taken over by Max Verstappen after an engine failure on Charles Leclerc's car.
Verstappen leads Leclerc by 34 points despite six pole positions in eight races and two engine retirements.
The impression is that the season is falling apart after such a promising start, as Leclerc's team-mate Carlos Sainz did the same.
George Russell took third for Mercedes, with team-mate Lewis Hamilton fighting back to finish fourth.
Perez dived for the inside into Turn One after a good start as Leclerc lost the advantage he had earned with a brilliant pole position lap.
There was a virtual safety car period on lap nine due to Sainz parking up in a run-off area, but the Italian team was able to hold off Verstappen.
Red Bull was hoping that it would vault Leclerc into the lead, which it didn't, but it did eventually.
Verstappen overtook Perez for the lead on lap 15 after the Mexican was told "no fighting". Perez and Verstappen stopped two laps apart.
After the Red Bull drivers' stops, the race looked set to boil down to whether Leclerc could hold off the challenge of the Red Bulls.
A second virtual safety car would have made the question even more intriguing when Kevin Magnussen's engine failed.
There was a cloud of smoke behind Leclerc's car at the end of the 21st lap as he was long out of the race.
Leclerc is more than frustrated. We weren't very strong at the beginning, but I was catching back Checo. I believe pitting was the correct choice. We were leading and I was doing a good job with the tires. We had to manage the tires to the end and we were in a good position to do that. Another failed attempt at a finish. It makes you feel bad.
It's more than important. I don't know what to say. I hope we can bounce back from it and be on top of it.
Red Bull was in complete control from that point on. The two cars sailed to the flag.
Russell was the only driver to finish in the top five in every race this season in his first year with Mercedes, and he was the only one to finish in the top four when Sainz retired and Leclerc went out.
The slight delay to Hamilton, who was forced to wait behind his team-mate, meant he dropped back to 11th place.
Hamilton passed Ocon after Ocon tried to pass Sebastian Vettel, who was running wide.
Despite complaining that the car's bouncing on the straights was hurting his back, Hamilton had to pass both Alpha Tauris to take a well-earned result.
Gasly took fifth, followed by Vettel, Alpine's Fernando Alonso, the McLarens of Daniel Ricciardo and Lando Norris, who were together for much of the race on different strategies and had a bit of radio needle as to who should be allowed to pass who.
F1 flies a third of the way around the world to Montreal for the Canadian Grand Prix, which was dropped off the calendar due to the swine flu.