Well, I would presume they don't all work the same way. There are different techniques one can use to implement a chat client. Each of these companies might have their own proprietory technologies depending on their scale, user base, finances etc.
2 popular options you can check out are :
XMPP - It's supported by most major chat clients and is used by the likes of Facebook (a customized version of it anyway). asmack is a popular XMPP library for Android which might be useful to you.
A Backend-As-A-Service (BAAS) provider like Parse. This will save you a lot of server side heavy lifting and writing backend code like you would have to do if you were considering something like AWS
If this is a learning project, I would suggest implementing a very simple client and writing both the server and client-side code so that you know how the whole stack works. Hope that helps!