I Server Controls possono essere di 2 tipi:
Controlli server HTML e controlli server web.
I controlli server html sono gli analoghi dei normali controlli html con in più l'attributo runat=server che permette al framework un maggior "controllo" su tali controlli. Tale controllo può infatti essere manipolato con codice lato server.
I controlli web garantiscono invece una flessibilità e una potenza maggiore. Utilizzano il prefisso <asp: comprendono tutti quelli html "normali" (aggiungendo però nuove caratteristiche) e soprattutto forniscono nuovi tipi di controlli.
Sono in sostanza uno dei punti di forza di asp net, e per chi è abituato a programmare ad eventi come in VB, li utilizza subito facilmente.

I controlli utente invece sono controlli personalizzati scritti da sè.
Stanno in file .ascx e contengono codice asp net e html. Di quest'ultimo però non devono contenere i tag body, html e form.
Per essere utilizzati, la pagina aspx deve avere la direttiva Register o Reference. Riprendono ma ampliano notevolemente gli include che c'erano in asp classico e rendono facile e fattibile il riutilizzo del codice (in questo caso controlli personalizzati) in più pagine.

Il codebehind è un modo per separare il codice ASP NET dalla parte di formattazione HTML.
Come sai, in ASP 3 sia le parti <%..%> (cioè il codice asp) che l'html erano mischiati, e non sempre era facile lavovare insieme ai webdesigner per sistemare una stessa pagina. Ora puoi avere solo la parte html nella pagina .aspx e la parte di codice nella pagina .vb (il codebehind) collegata a quella pagina .aspx (e con lo stesso nome della pagina web form).
Nella direttiva <@ Page, la parola SRC ti richiama un file di classe già compilato che servirà all'esecuzione della pagina aspx.
Questa classe è precompilata. Così facendo una stessa parte di codice può essere utilizzata (senza modifiche) per differenti browser o paesi, cambiando solo la parte html. Inoltre avendo il codice non frammisto con html lo puoi facilmente riutilizzare per altri progetti, ed in più, avendolo precompilato, lo puoi fornire come assembly e quindi proteggere il tuo codice impedendone la visualizzazione agli altri.

Ci sarebbe tantissimo ancora da dire, ma credo ogni singolo aspetto di questi 3 ci porterebbe via una pagina!