It really depends on what you're doing. Both Python and C# have very capable modules for network communication - I'd say you'd be equally well-off in either given no knowledge of what you're doing. The decision between Python and C# will probably come down to whether your application lends itself more to the dynamic typing of Python or the static typing of C#.
As for your second question, I've always found it interesting to look at network traffic using a packet sniffer such as Wireshark. Browse to a website in Firefox and (assuming GZip encoding is disabled in the web-browser or on the server) you'll be able to see how the data is transferred. This works for other protocols as well. Reading the RFCs for various protocols can also give you some insight. For a few examples, IRC (1459), FTP (959), HTTP 1.1 (2616). You can find them at the Internet Engineering Task Force website.
Sorry for the lack of links, the spam protection shot me down for not having enough reputation.