As a start, I would suggest
Beej's Guide to Network Programming to get a low level understanding of sockets, protocols and so on (he even has a book!)
> I program c++ on Windows so am I a candidate for only learning winsock?
After you've read Beej, you'll know that winsock is just a thin wrapper (very thin in places) over normal sockets.
> If not, then what should I learn and focus on? If a library, such as boost::asio, why?
Why bother learning anything?
boost::asio gives you an abstraction (so you have less detail to worry about), and is cross-platform (so you have less detail to worry about).
> I desire the current and best programming practice in use by professional programmers today.
Everybody does it differently, whether it's using boost::asio, some other portable library, some locally made abstraction, or just the basic API.
What you use depends on the scope of the problem at hand (and in a professional environment, often constrained by what already exists).
As I've said before, knowing how to program and make design choices is far more important than rote learning of any given API.
So knowing enough about say boost::asio to know when you should use it in a given context is a good thing, even if you can't remember any of the detail (that's what manual pages are for).