В чем отличия b и strong, i и em?

Вообще говоря, никакой браузер не обязан вебмастеру показывать жирные или курсивные шрифты. Например, у консольного браузера их нет. Это уже элементы верстки, а HTML предназначен не для верстки, а для логической разметки.

<b> и <i> – тэги физического выделения, то есть вы принудительно заставляете выделять текст каким-то видом шрифта. В HTML4 и XHTML эти теги объявлены устаревшими. <strong> и <em> – тэги логического выделения. Каждый браузер может по-своему выделить текст внутри этих тэгов, так, как удобно его пользователю. <em> означает выделение, а <strong> означает усиленное выделение.

Резюме: если вам нужно выделить текст, пользуйтесь <strong> и <em>. Если вам нужно не выделить текст, а физически сделать его жирным или курсивом, пользуйтесь <span> в сочетании с CSS.