Sri Lanka Cricket said that Silva was struck during a match in Pallekele. His scans were clear, but he was flown to a hospital in the capital Colombo for further tests and observation, the cricket body added.
Silva has played 24 test matches for Sri Lanka and scored 1,404 runs at an average of 31.
"Kaushal was fielding at short leg when he got hit," espncricinfo.com quoted national team manager Charith Senanayake as saying.
According to Senanayake, Sri Lanka vice-captain Dinesh Chandimal "swept right onto the back of Kaushal's head. He did take evasive action, but still the ball hit him."
The website said Silva was wearing a helmet with additional padding, a design introduced for player safety after the death of Australia batsman Phillip Hughes after being struck by a ball on the head in November 2014.
Sunday's match was part of Sri Lanka's preparations for its tour of England next month, with the first of three tests starting at Headingley on May 19.