I come from a mostly Linux network programming background. I've done a small bit of Windows socket programming, from what I've seen the Windows socket APIs are pretty similar to the POSIX socket APIs, and there is some pretty good information on MSDN for porting from POSIX to Windows sockets.
Network programming isn't really difficult conceptually, there are a few areas that you'll need to have an understanding of to be effective: First you'll need to have a basic understanding of networking. You'll need to at the least know about TCP and IPv4, since those are likely to be the default protocols that you'll end up using. Understanding a bit about DNS and ethernet at a conceptual level will probably also be useful, but not strictly required at first. Once you have a basic background (reading a few wikipedia articles or a basic guide to networking will probably be enough to get you started at first) you can start looking at the POSIX socket APIs. These are pretty straightforward once you have the networking basics down, and there are plenty of tutorials out there (Beej's network programming guide was listed by someone else, it's pretty good, and the man pages actually have some pretty useful examples as well). The biggest stumbling block you might run into here is knowing what needs to be in network byte order vs. host byte order, but as a rule of thumb anything that you are writing to a socket should be put into network byte order first, and anything you read from the socket should immediately be converted to host byte order.
Where a lot of people stumble is that just learning the POSIX socket API isn't really enough to do effective network programming. It'll get you far enough to write a simple echo client, but to move beyond that there are a few other things you need to be familiar with. The biggest ones are working with non-blocking file descriptors, signals, working with select/epoll/etc., and getting a handle on the child process workflow. At a high level it's pretty conceptually simple (create->bind->listen->select->fork->accept), but if you're not used to working with file descriptors, select, fork, etc. then those are things you'll need to get up to speed on.
One of the best programs to start with, in my opinion, is an IRC client. It will give you all of the basics you'll need (read/writing messages to a server, concurrent connections, dealing with different server implementations, etc.), the protocol is pretty easy to parse, and there are a lot of servers out there to connect to.