Ознакомьтесь с решение SignalR. Там как раз реализован разный тип взаимодействия клиент-сервер в зависимости от доступности того или иного метода установления соединения. Также относительно легко можно управлять подключенными клиентами, оповещать других об изменении их статуса, автоматическое переподключение при потере соединения и т.п.
На его базе очень легко реализовать веб-чат (по крайней мере на C#).
Очень интересна технология WebRTC. Это когда есть возможность устанавливать соединения между клиентами напрямую, например для реализации видео-чата. Правда в этих целях необходимы дополнительные элементы, которые позволят двум клиентам "найти" друг друга в сети.
Теоретически пакеты в сети изначально адресуются по mac адресам, но развивающиеся технологии позволяют управлять адресацией (я имею ввиду различные устройства маршрутизации свичи, хабы...) на основе и IP-адреса.