поправьте, если ошибаюсь.
tcp - транспортный уровень, передает ip-пакеты между хостами.
http, websocket - прикладной. Это просто соглашение, какого формата должны быть передаваемые внутри ip-пакетов данные.
поэтому открываем-закрываем мы tcp. А что внутри пакетов содержится - хоть http, хоть WS - уже другой вопрос