Rahul, who top-scored with 54, and Dhawan, who hit 52, put on 97 runs for the opening wicket as India amassed 201 for six after being put in to bat in Pune.
Paceman Navdeep Saini claimed three wickets to help dismiss Sri Lanka for 123 in 15.5 overs despite a fighting 57 by Dhananjaya de Silva. Saini sent back De Silva after his 36-ball knock and then got skipper Lasith Malinga for nought as the islanders lost their second straight match after the opening T20 was abandoned due to rain.
Manish Pandey and Shardul Thakur also played key roles with batting cameos that helped India take 63 runs from the last five overs.
Pandey, scoring 31 off 18 balls, and Thakur, with an eight-ball 22, put on an unbeaten 37-run stand for the seventh wicket and the duo managed to get 19 runs off the last over.
Earlier the left-handed Dhawan was dropped on one by Dasun Shanaka at deep square leg off Angelo Mathews and made the most of the spill as he recorded his 10th T20 fifty in just 34 balls. Left-arm wrist spinner Lakshan Sandakan finally got Dhawan and struck twice in his next over to send back Rahul and Shreyas Iyer, for four, trudging back to the pavilion as India slipped to 122-4.
Skipper Virat Kohli, who dropped himself to number six in the batting order, then took the attack to the opposition with a 17-ball 26 before being run out while attempting a second run.
Sri Lanka were never in the chase after losing their top three batsmen for 15 runs and then slipping to 26 for four.
De Silva and Mathews, who made 31, put on 68 for the fifth wicket to raise Sri Lankan hopes but Washington Sundar struck back to break the partnership.
Sundar and Thakur took two wickets each.
Pace spearhead Jasprit Bumrah became India’s highest wicket-taker in the T20 format with 53 scalps after he struck first with the wicket of Danushka Gunathilka for one. AFP