Lokesh Rahul scored 45 off 32 balls while Shikhar Dhawan added 32 as the duo put on 71 runs for the first wicket.
India reached 144-3 in the 18th over to win with 15 ball to spare. Earlier, Sri Lanka was restricted to 142-9 after the hosts won the toss and opted to field.
Pacer Navdeep Saini took 2-18 in four overs and was named man of the match.
"It was a clinical performance, something we wanted to do as a team. We have gone from strength to strength from the last series," captain Virat Kohli said. "It was a convincing win, which is a good sign for the team. Navdeep is gaining more confidence."
Chasing 144, Rahul and Dhawan gave India a quick start. Rahul took control of the proceedings as he hit six fours. His partner, returning from an injury layoff, took time to get settled.
They put on 71 off only 55 balls when Rahul was dismissed short of a half-century. Shreyas Iyer (34) was promoted to No. 3 and he made full use of the opportunity, scoring 34 off 26 balls.
In between Dhawan was adjudged lbw via DRS review as Sri Lanka etched out a second quick wicket.
But Iyer and Kohli put on 51 runs for the third wicket and brought India close to victory.
Earlier, Saini broke through Sri Lanka's defenses as they failed to capitalize on a solid start.
Openers Danushka Gunathilaka (20) and Avishka Fernando (22) added 38 runs but things fell apart after the duo was dismissed in the space of three overs.
Saini bowled with sharp pace, clocking in excess of 151 kph at one point, and bowled Gunathilaka with a searing yorker.
The spinners got into the act thereafter. Washington Sundar (1-29) and Kuldeep Yadav (2-38) shared three wickets as Sri Lanka was reduced to 82-3 in the 12th over.
The turning point came when Kusal Perera (34) was dismissed two overs later, caught off Yadav.
Lanka's middle and lower order couldn't get going as India exerted pressure in the final half of their innings.
Shardul Thakur (3-23) used his variations well and picked up three wickets in the penultimate over to further strangle their scoring rate.
The third and final match of the series will be played in Pune on January 10, Friday. The first T20 in Guwahati was abandoned on Sunday due to rain.