Интересует полный цикл
Тут можно поразному делать:
- pear-to-pear, в этом случае сервер нужен только для того, что бы люди находили друг друга. Ну или можно исхитриться и сервер тогда вообще не нужен. В этом случае клиенты коннектятся друг к другу и шлют сообщения напрямую.
- обычная модель обмена сообщений через общий сервер. Самый простой вариант. Все коннектсятся к одному серверу, который выступает как маршрутизатор сообщений. У каждого сообщения есть идентификатор откуда и куда оно хочет доставиться. Далее думаю алгоритм вам будет понятен.
Когда происходит шифрование
Смотря на каком уровне его делать. Можно на прикладном уровне шифровать самому (это очень сложно и надо почитать много умных книг и желательно в универе отучиться на нужной специальности), а можно довериться TLS системному, тогда все операционная система хэндлит, но конечно не так секьюрно выходит ибо SSL сертификаты можно скомпромитировать.
Книги... поищите тут вопросы по компьютерным сетям, думаю найдете себе список литературы.