Sri Lanka Cricket said Silva was struck during a match in Pallekele.
His scans were clear, but he was flown to a hospital in Colombo for further tests and observation, SLC added.
Silva has played 24 Tests for Sri Lanka, scoring 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 following the death of Australia batsman Phillip Hughes after being struck by a ball in November 2014.
Sunday's match was part of Sri Lanka's preparations for their tour of England next month, with the first of three Tests starting at Headingley on May 19.
Image: Sri Lanka opener Kaushal Silva
Photograph: Phil Walter/Getty Images
Arun Lal reveals fight with 'rare and dangerous' cancer
Mr and Mrs Dhoni and their love for dogs
How KKR's Suryakumar gamble paid off
Resurgent Sunrisers Hyderabad start as favourites against Rising Pune Supergiants
IPL: Marsh receives official warning