1. Любой поток данных реального времени (в том числе сетевое соединение) содержит буферы ввода-вывода, где данные передерживаются, пока принимающая сторона не будет готова их принять. В общем, при подсоединении выделить память, при отключении вернуть её.
2. Открытие соединения происходит в три этапа: «превед-медвед-готов». Есть такое понятие, как «полуоткрытое соединение»: на инициирующей стороне мы послали «превед», но не получили «медвед». На принимающей — послали «медвед», но не услышали «готов». Количество полуоткрытых соединений общее на всю систему и обычно велико, но тоже может исчерпаться.
3. Любая передача через сеть не мгновенна. Соединение с нашей стороны будет считаться открытым, когда в сеть ушло «готов», так что если пинг 100 мс — то вот спустя 100 мс соединение и будет открыто.
4. Процедура логина (ну и рукопожатие TLS, если таковой используется) задействует сильную криптографию, которая тоже медленна. А в TLS есть и своя тройка «превед-медвед-готов».
5. При закрытии соединения компьютер также пытается послать пакет «я закрываюсь».
6. Анти-DDoS’овские меры, наконец.