Socket は IP 通信の最も低レベルのクラス。
つまりラップされてないので HTTP を喋る必要がある。
で、その上に TcpClient があって TCP/IP 通信用のクラス。
更にその上に WebRequest(HttpWebRequest)/WebResponse(HttpWebResponse) があって、
最上位に WebClient がある。
後者になるほど HTTP 扱う上で手軽になるが細かい操作ができなくなる。
.NET 2.0 で WebClient は無闇に拡張されたけど。