Chasing a mammoth score of 315, The Lankans got off to a shaky start, losing opener Tillakaratne Dilshan with just nine runs on the board.
Upul Tharanga and Kumar Sangakkara, then added 77 runs for the second wicket as they continued to help Lanka inch closer towards the massive total.
Ravichandran Ashwin then managed to the break the partnership with the wicket of Tharanga.
Once the opener departed, bowlers helped India claw back into the match with crucial wickets of Dinesh Chandimal and Mahela Jayawardene.
Zaheer Khan came back in his second spell an snapped the wicket of Angelo Mathews while Ashwin then bagged his second wicket to have Sri Lanka reeling at six for 191.
Sangakkara then found an able partner in Thisara Perera as the duo keep the hopes alive for the Lankans with a 78-run partnership.
But with the run-rate mounting with every passing ball, Sangakkara perished trying to scoop the ball over the wicket-keeper only to see the ball crash into the stumps.
With Sangakkara’s exit the match was for India to win.
Earlier, Virat Kohli notched up a brisk hundred, while Virender Sehwag missed his ton by a whisker as India posted a daunting 314 for 6.
Kohli, who scored his fourth hundred in his last five innings, was in sublime form and starred in a 173-run second wicket stand with Sehwag to lay the foundation for a big total.
The 23-year-old Kohli blasted nine boundaries in his 113-ball innings, while Sehwag, who was dropped by Tillakaratne Dilshan on nought in the second over, had 10 boundaries in his 97-ball innings.
India had a shaky start after skipper Mahendra Singh Dhoni (35) won the toss and elected to bat.
Sehwag looked rusty early on and got a respite initially but his partner Gautam Gambhir (3) was not lucky and was sent packing after being bowled while trying to work out a Kulasekara delivery square in the third over.
It was one down batsman Kohli who broke the shackles with a hard slash to bring up the first boundary through point, two balls later off Kulasekara.
The young right-hander picked up another boundary when he worked down a Malinga ball to fine leg in the fourth over.
Unusually restrained for long, Sehwag finally blasted two fours in the sixth over off Malinga. In the ninth over, the duo picked up two more boundaries before the opener smashed another four off Angelo Mathews over extra cover.
In the 11th over, Sehwag survived again when Kulasekara had almost caught him at mid-off and two balls later, Kohli too got a chance when Perera who failed to grab a difficult chance on his follow through.
In the 13th over, Sehwag hit Perera for a boundary at mid-on and then picked up another four over square leg in the 17th over off Herath. He picked up a single in the next ball to reach his fifth.
After the batting Powerplay, Dilshan and Herath checked the flow of runs a bit though Sehwag and Kohli were successful in taking singles and twos to keep the scoreboard ticking.
Kohli brought up his fifth consecutive ODI fifty in the 23rd over with a single off Herath, before Sehwag sent Perera over mid-on for a four in the 28th over.
In the 30th over, Perera was once again in Sehwag’s firing line as he slashed a loose delivery from the bowler over point to pick up another four.
Perera was again taken to task in the 32nd over, when Kohli picked up successive fours in his first two balls.
However, the Lankans broke the partnership in the next ball when Perera showed great athleticism to run out Sehwag at the non-striker’s end after their was a confusion between the batsmen for a single. Sehwag missed his century by four runs.
Rohit Sharma (5) then joined Kohli but he was soon dismissed in the 34th over by Mathews, who dislodged his off-stump.
Kohli finally brought up his 12th ODI hundred with a single to deep cover area. Perera finally brought an end to Kohli’s innings when he had him caught by substitute fielder Sachitra Senanayake at the extra cover area.
Dhoni and Raina then joined hands and dealt in boundaries. In the 45th over, Raina blasted a full-toss ball past point before hitting another Malinga delivery over extra cover.
Malinga once again came under attack when Raina sent his first ball in the 47th over out of the park, while Dhoni added insult to injury, smashing him over midwicket area.
In the 48th over, Raina picked up another four between deep square leg and deep midwicket, while Dhoni blasted a four and a six off Malinga in the next over.
In the last over, Raina and Dhoni lost their wickets in pursuit of quick runs.