В чем отличие между двумя классами?
ничем.
сокеты не отправляют, - отправляют данные.
через сокет идет отправка некоторого набора байт.
отправка через HttpWebRequest предполагает, что в начале идет отправка байт, специфичных для http протокола - типа post, get, headers и т.д. - это если упрощенно.
и внутри HttpWebRequest тоже используются сокеты.
Чем отличается подобная отправка сокетов от обычного HttpWebRequest?
Как это чем отличается TCP от HTTP?