Was ist der Unterschied zwischen Streams und Datagrammen in der Netzwerkprogrammierung?

Was ist der Unterschied zwischen Sockets (Stream) und Sockets (Datagrammen)? Warum übereinander