В чем разница между потоками и дейтаграммами в сетевом программировании?

В чем разница между сокетами (потоком) и сокетами (дейтаграммами)? Зачем использовать одно вместо