Batting first, the hosts managed a huge score of 281 for 9. Mahela Jayawardene [ Images ] top-scored with a fine 83, and was involved in a 125-run fifth wicket partnership with Russel Arnold [ Images ], who made 64.
Opener Sanath Jayasuriya [ Images ] provided Sri Lanka with a solid start, scoring 67, and in the course of his innings crossed the 10,000-run mark in one-day internationals.
For India, Ashish Nehra [ Images ] was the best bowler as he took 6 for 59 in his 10 overs.
In reply, the Indian batting failed to get the better of the Sri Lankan spinners and fell short by 18 runs. India finished on 263 for 9 in their 50 overs, after controlling the proceedings for most part of the innings.
Virender Sehwag [ Images ] provided India with a blazing start, scoring 48 from 22 balls, with nine boundaries and a six.
Half-centuries from Rahul Dravid [ Images ] (69) and his 84-run partnership for the third wicket with Yuvraj Singh [ Images ] (42) had taken India to 186 for 3 after 35 overs. But Yuvraj's dismissal started a procession of wickets, from which India never recovered.
Sri Lanka innings:
It was no surprise that Sri Lanka elected to bat on a ground, which over the years has favoured sides batting first. In 18 matches played between the two teams at the Premadasa stadium, India have won just five matches as compared to Sri Lanka's 10 victories, with three matches being abandoned.
Jayasuriya reached 10,000 runs in One-Day Internationals with a trademark pull shot off Irfan Pathan [ Images ] in the fifth over as he moved on to 11 and Sri Lanka made a steady start, reaching 28 for no loss after five overs.
He became the first batsman from Sri Lanka to reach the landmark in his 337th match. He is the fourth batsman to do so after the Indian duo of Sachin Tendulkar [ Images ], Sourav Ganguly [ Images ] and Pakistan captain Inzamam-ul Haq.
Zaheer Khan [ Images ] struggled to control the swing and started with five extras (4 wides and a no ball) giving away 11 runs, and was replaced by Ashish Nehra after bowling just two overs.
The move paid immediate dividends as Nehra struck in his first over. Atapattu, who scored 11, had no answer to a beauty that pitched on leg stump and crashed onto the batsman's off and middle stump. (32-1, 6 overs)
All-rounder and hard-hitting batsman Dilhara Lokhuhettige was promoted to number three in a bid to attack the bowlers in the first 15 overs.
Lokhuhettige then signalled his intentions as he launched Nehra over the cover region, but was dismissed the very next ball, trapped leg before wicket for 9. (46-2, 7.5)
The first 50 for Sri Lanka came after just 8.1 overs, a perfect start in their quest for a big score.
Jayasuriya, batting on 19, got a lucky escape as Mahendra Singh Dhoni [ Images ] gloved an edge by the left-hander straight to Virender Sehwag's face at first slip. The let-off didn't affect him, as he hit Nehra through the covers for his third boundary as the hosts reached 56 for 2 after 10 overs.
Pathan, meanwhile, left the field after he injured his shoulder while diving to stop a boundary, and was replaced by Zaheer.
Jayasuriya, batting on 31, got another reprieve when Sehwag, at first slip, was too slow to react to an edge. It would have been the much-needed boost for the struggling Zaheer, bowling well under his normal speed, but Sehwag was found wanting.
Sehwag, however, made amends, taking a sharp catch at short point to send back Kumara Sangakkara for 8 and hand Nehra his third wicket of the innings. (67-3, 13.1)
Sri Lanka reached a healthy 71 for 3 after 15 overs, with Jayasuriya looking solid on 35, but India were fighting back courtesy a three-wicket bust from Nehra.
The fourth wicket nearly fell in the 16th over, but substitute Venugopal Roa, at square leg, missed the stumps at the bowlers end, as Mahela Jayawardene had given up hope after a huge mix up with his partner.
India went in for a double bowling change as Harbhajan and Anil Kumble [ Images ] replaced Zaheer and Nehra respectively. Nehra bowled an incredible first spell of 3 for 26 in his six overs, while Zaheer got some control as he bowled three overs for 9 runs in his second spell.
Jayasuriya reached his half-century off 61 balls, his 58th in ODIs. Kumble was hit for 13 runs as the left-hander hit him for three boundaries in his second over. Sri Lanka were 97 for 3 after 20 overs and 100 for 3 after 22, the second fifty taking 83 balls.
The 50-run partnership between Jayasuriya (64 off 74 balls) and Jayawardene (15 off 34 balls) needed 71 deliveries. Sri Lanka were comfortable placed at 117 for 3 after 25 overs.
Jayasuriya's dismissal came in the worst possible manner when he looked set for a big innings. He was run out for 67 attempting a second run, but fell short as wicketkeeper Dhoni whipped the bails off Harbhajan's brilliant throw from the fine leg boundary. (122-4, 25.5 overs)
His 77-ball knock contained nine boundaries and gave Sri Lanka a great chance of posting a big score. He was particularly severe on Kumble, hitting him for 19 runs from 16 balls, inclusive of three boundaries.
Jayawardene and Russel Arnold then set about building the innings with quick singles and twos as the hosts reached 142 for 4 after 30 overs.
Dhoni then made another blunder when he dropped a straightforward catch on the leg-side by Jayawardene (26) off Pathan, a mistake that proved very costly.
The two batsmen brought up their 50-run partnership in just 52 balls; the feature of their partnership was the amount of singles and twos they took, while hitting only three boundaries.
The runs kept flowing as Sri Lanka reached 176 for 4 after 35 overs. With the two batsmen playing with such relative ease, only a miracle could help India restrict the score to the 250-run mark.
Jayawardene continued his good form, reaching his half-century, which included two boundaries, off 71 balls.
Harbhajan went wicketless but impressed in his 10-over spell, conceding just 40 runs.
The two batsmen complemented each other in their 100-run partnership, off 101 balls, which came in the 43rd over with the score 224 for 4. Majority of their runs had come in singles and twos, with only seven boundaries between them.
India's best bowler of the day, Nehra, was not called upon until the 44th over. The tactics seemed strange as Sri Lanka were accumulating runs without much trouble. W wicket was the need of the hour in the middle overs.
Arnold also raced to his half-century off 53 balls.
The scoring rate increased after the 40-over mark as the batsmen started to take risks. They ensured that a single was scored off every delivery, while looking for the odd boundary in between, leaving the bowlers frustrated.
Kumble disappointed in his 10 overs as he was carted for 64 runs. Both the Indian spinners failed to grab any wickets and the batsmen, after consolidating in the middle overs, went all out in the last few overs.
Nehra took his fourth wicket of the innings in his eighth over, when he had Jayawardene caught by Kaif at short fine leg for 83. (247-5, 45.2)
His fifth wicket partnership of 125 runs from 117 balls had taken Sri Lanka to a position of strength.
Soon after Arnold also headed back to the pavilion after scoring 64 from 63 balls. He was run-out by a direct hit from Dravid in the 47th over. (257-6, 46.4)
While the other bowlers failed to impress, it was Nehra who stood out with a five-wicket haul. He bowled Tillakaratne Dilshan [ Images ] with an unplayable Yorker for 7. (262-7, 48)
But nothing went right for him in the field. He dropped an easy catch at short fine leg off Zaheer as Upul Chandana survived in the 49th over.
But he had his man in the next over when he had Chandana caught at the off-side boundary by Harbhajan for 2. This was Nehra's sixth wicket of the innings, his second six-wicket haul in a One-Day Internationals. (268-8, 49.2)
But Vaas smashed him for three consecutive boundaries on the leg side to take the Sri Lankan total to 280 for 9 after 50 overs.
Vaas finished unbeaten on 18 off 9 balls, as Muttiah Muralitharan [ Images ] was run out without scoring off the last ball of the innings, trying to go for the second run.
Nehra finished with six wickets for 59 runs in 10 overs. No other Indian bowler could pick a wicket.
India have a tough task on hand on a pitch expected to get slower and favour spinners in the second innings.
Sourav Ganguly came out to open with Virender Sehwag and India's hopes depended on how much and how fast these two batsmen could score in the first 15 overs.
But Vaas, playing his first match of the tournament, was right on target as he started with a maiden over to Sourav Ganguly, but 15 runs came off the second over from Fervez Maharoof.
Sehwag, who had struggled, scoring 54 in four matches before the final, finally looked to have found his footing.
He made 22 from 15 balls with four boundaries in the first 5 overs as India reached 35 for no loss.
India had come with a definite plan - to attack the inexperienced Maharoof and not let him settle down early on. And it forced Atapattu to bring a change early on, Lokuhettige replacing Maharoof in the 6th over.
Lokuhettige also suffered the same fate.
Sehwag hit him for two boundaries off the first two balls and then followed it up with a huge six over long-off. He then glanced the fourth delivery to the square leg fence, and the fifth ball was hit to the midwicket fence. The last ball was hit to the cover boundary as India raced to 61 after six overs. In a space of just a single over, Sehwag moved from 22 to 48, with five boundaries and a six.
But the experience of Vaas paid off as Sehwag played onto his stumps, to be dismissed for 48 from 22 balls. (62-1, 6.2)
Maharoof came back for his second spell after Lokuhettige was taken off after being smashed for 22 runs by Sehwag.
Dravid, on one, survived a close leg before wicket call as umpire Simon Taufel turned down the decision.
Maharoof's horror run continued as Dravid hit him for two consecutive boundaries on the off-side as India reached 73 for 1 after 10 overs.
Tillakaratne Dilshan was unleashed in the 14th over to unruffled the Indian plan. In the last match against India, Dilshan had run through the Indian middle order, taking 4 for 29 in his 10 overs.
India reached 99 for 1 after 15 overs, with two of their most experienced batsmen at the crease.
Ganguly was unbeaten on 25 and captain Dravid on 15. At the same stage, Sri Lanka were trailing at 71 for 3.
Dilshan's magic arm worked again, as he dismissed Ganguly leg before wicket for 26 in his second over. He added 40 runs in 56 balls for the second wicket with his captain, before he pushed forward and was hit on the pads just outside the off stump. (102-2, 15.5)
Dravid and Yuvraj Singh set about following the footprints of Jayawardene and Arnold, trying to score mainly in singles and twos as India scored 116 for 2 from 20 overs.
Sanath Jayasuriya came into the attack in the 25th over, but only lasted one ball, as he felt the pain in his right shoulder and was unable to continue further.
At the halfway mark, the match was evenly balanced with India on 136 for 2, needing another 146 runs from 150 balls.
Dravid and Yuvraj batted with a specific plan against the spinners, using the occasional sweep shots and finding gaps at will. Their 50-run partnership took 75 balls with both batsmen sharing the strike and the runs. After 30 overs, India reached 161 for 2, with Dravid looking solid on 46 and Yuvraj on 30.
The Indian captain had to work hard for his half-century, which came off 74 balls. It was his 62nd half-century in ODIs, and contained three boundaries.
Yuvraj's frustration finally got the better off him as he hit a sweep shot straight to Lokuhettige at the square leg fence. The left-hander played some intelligent cricket to score 42 off 57 balls, but Chandana struck at the right time for his first wicket of the match. (186-3, 35.1)
The match was still in the balance, and it was now upon Dravid to play a captain's innings and steer India home.
India reached 200 for 3 in the 38th over, but calamity struck in the next over as Dravid was run out by Dilshan at short midwicket after some misunderstanding with Mohammad Kaif. (205-4, 38.5)
Dravid looked set to anchor the innings till the end, scoring 69 from 99 balls, but his dismissal gave Sri Lanka the advantage, considering that India had just one genuine batsman, Mahendra Singh Dhoni, to follow.
After 40 overs, India reached 209 for 4, still needing another 73 runs with 6 wickets in hand. They lost their fifth wicket in the form of Dhoni, who was trapped plumb in front of the wicket to Chandana. (216-5, 42)
The big-hitting wicketkeeper failed to rise to the occasion, and had no answer to a quicker one from the Sri Lankan leg-spinner, denting another big hole to India's run-chase.
Pathan has displayed some glimpses of his batting talent in the earlier matches, but he too failed when it really mattered. He charged down the wicket to Muralitharan, missed the flight of the ball and was bowled for 1. (219-6, 43)
The Sri Lankan spinners started taking control of things as run scoring became difficult. With just four wickets in hand and 63 runs needed at 9 runs per over, it was obvious that India needed more than a miracle and a blinder of an innings from Kaif.
Harbhajan then obliged the Lankans as he ran himself out. The off-spinner hit a ball straight to Maharoof at short third man and ran straight down the pitch, much to Kaif's amazement, who did not move out of his crease. (223-7, 44.1)
The eighth wicket did not take long as Zaheer swept one straight to Lokuhettige at square leg to give Muralitharan his second wicket. (229-8, 44.5)
India lost its last six wicket for just 43 runs, sliding from 186 for 2 to 229 for 8 in the space of 10 overs. The batting wilted under pressure in the face of some disciplined bowling from Chandana and Muralitharan as India looked set to end up on the losing side in yet another final.
Kaif staged a lone battle, hitting Dilshan for two boundaries in the 47th over, the second one courtesy of a dropped catch from Chandra at the long-on boundary. His resistance, however, ended in the 48th over, as he skied a full toss on the leg-side and was caught by Atapattu. (246-8, 47.3)
Vaas was brilliant in his first spell bowling his eight overs for 24 runs and a wicket. He returned for his second spell and claimed a wicket immediately, maintaining a tight line and length, forcing Kaif to make a mistake.
Thereafter, the result was just a formality. India finished on 263 for 9 in their 50 overs, with Kumble and Nehra unbeaten on 9 each.
Vaas, playing his first game of the tournament, impressed a lot claiming 2 for 38 in his 10 overs.
Muralitharan and Upul Chandana bowled decisive spells when it mattered the most, claiming 2 for 35 and 2 for 38 respectively. In comparison, both the Indian spinners - Kumble and Harbhajan - went wicketless and in the final analysis it was one of the decisive factors.