Sangakkara (69) and Silva (67) both shook off poor form to make fifties after an early collapse left Sri Lanka in trouble on 20 for 3.
England, leading the five-match series 2-1, quickly claimed the upper hand after accurate new ball bursts from James Anderson and Ryan Sidebottom.
Left-armer Sidebottom snared Upul Tharanga (four) at slip and Sanath Jayasuriya (three) was deceived by a slower ball from Anderson and caught at mid-off.
Anderson, who finished with 3 for 33, then claimed the prize scalp of skipper Mahela Jayawardene, caught on the third man boundary without scoring.
Sangakkara and Silva, batting cautiously at the outset on a slow pitch, gradually repaired the damage with a hard-working stand.
But just when the momentum started to swing towards to Sri Lanka, seamer Stuart Broad had Silva caught at third man and Sangakkara on the long leg boundary.
Jehan Mubarak chipped in with 20 but England's bowlers stemmed the flow of runs at the end of the innings.
Sidebottom finished with 3 for 27 from his 10 overs.
Sri Lanka made one enforced change to the side with leg spinner Kaushal Lokuarachchi replacing Farveez Maharoof, who suffered back spasms in the third match in Dambulla.