COLUMBUS, Ohio – It was the heavyweight fight of the year in the Big Ten, maybe in the nation, and Penn State had Ohio State on the ropes for much of the time, looking for the knockout.

But in the end, it was the Buckeyes and Nittany Lions nemesis J.T. Barrett who raised their arms in victory Saturday before a delirious sellout crowd at Ohio Stadium.

Ohio State's veteran quarterback threw two touchdown passes late in the fourth quarter, including the go-ahead 16-yard score to tight end Marcus Baugh with 1 minute, 48 seconds to play, and led the sixth-ranked Buckeyes to a 39-38 victory over the No. 2 Nittany Lions before a crowd of 109,302.

[Box score, play-by-play]

The Nittany Lions (7-1, 4-1), who led the game for 57 minutes, 57 seconds, saw their chances at a repeat Big Ten championship and a College Football Playoff berth take a big hit. They were unable to close out the Buckeyes (7-1, 5-0) after holding leads of 18 points in the first half and 15 early in the fourth quarter.

Probably the most frustrating part of the game for Penn State was its inability to get to Barrett, the shifty 6-foot-2, 220-pound quarterback who ran his record against the visitors to 3-1 with magnificent numbers: 33 completions in 39 attempts for 328 yards, and 17 rushes for 95 yards. The Buckeyes outgained the Lions, 529-283.

"You've got a veteran quarterback that's being protected extremely well and they've got really good skill players," Penn State head coach James Franklin said. "We're usually able to get to quarterbacks either through just pass rush or through blitz, and we weren't able to do that tonight.

"Again, when you've got a quarterback who's been starting for as long as he has and you look at his numbers and his statistics, he's a damn good quarterback, and we weren't able to make him uncomfortable in the pocket tonight at all."

Barrett, who was sacked only twice, was the undisputed star on a day when Saquon Barkley looked ready to retire the Heisman Trophy debate in the first half. Penn State's electrifying star returned the opening kickoff 97 yards for a touchdown, and scored on a 36-yard run around left end in the second quarter.

But the Buckeyes completely shut down Barkley in a second half when Penn State managed just 10 points. He carried the football 14 times after intermission for minus-3 yards. On eight of those 14 rushes, he was tackled for a loss. He finished with 44 yards on 21 carries.

"They were blitzing, bringing pressures, adding extra guys … " said Barkley, who finished with 172 all-purpose yards. "Their d-line made plays. They're a talented group, very talented. They made plays."

Trace McSorley threw touchdown passes to DaeSean Hamilton and DeAndre Thompkins, and ran 6 yards for another score.

Special teams made an impact late. Trailing 35-20, Ohio State's Denzel Ward blocked a punt by Blake Gillikin, giving Ohio State the ball at the Lions' 41, a play that re-energized the crowd.

"That was big for them," said defensive end Shareef Miller, the former George Washington High School star. "That swung the whole momentum of the game."

Barrett's 38-yard pass to Johnnie Dixon accounted for the first of Ohio State's three touchdowns in the final period. The Nittany Lions responded by driving to the Buckeyes' 3 but had to settle for Tyler Davis' 24-yard field goal, making it a two-score game at 38-27 with 5:42 to play.

But Penn State had nothing left on offense. Its last two drives covering seven plays accounted for minus-9 yards and no first downs. Meanwhile, Barrett had Ohio State's up-tempo offense turned up to 11.

A 76-yard drive after the Davis field goal resulted in a 10-yard TD pass to Dixon with 4:20 to play. The Buckeyes failed on a two-point try but regained possession at its 42 after a punt and needed just five plays to take the lead on the Barrett-to-Baugh connection.

Before you knew it, it was over. McSorley misfired on fourth-and-15 from the Lions' 36. Ohio State ran out the clock and the crowd stormed the field.

"We didn't play good enough at a lot of positions," Franklin said. "I didn't manage the game well enough, we didn't call the game good enough. There's enough blame to be spread all around. The reality is, we didn't win the game against a really good opponent on the road, and we've got to learn from this and get better."