Silent letters are the ghosts of pronunciations past.
The word knight for example, with its silent k, plus silent gh, is cognate with the German word for servant, Knecht, where every letter is pronounced.
Silent e (e.g., tot v. tote) is a bit more of a complicated story.
In Chaucer’s day, the e was pronounced. A complicated tale (a wink to the mega-nerds among you).
So, in a word like bite (not a real old-English example, but simpler for exposition) the e at the end would have meant that the word was pronounced bi.te, with two syllables. In Germanic, open syllables had long vowels, so bit would be short i, bite would be long. Nowadays, the distinction between long and short vowels in English is actually more than just length because of the Great Vowel Shift.
So, whereas before bite would have been something like beeetuh, the Great Vowel Shift and the eventual elision of the final e makes its modern pronunciation bayt – silent e.