Интересует объяснение работы websocket на низком уровне.
На сколько мне известно, websocket это lightweight wrapper over tcp.
Но вот не до конца понятно что на происходит на сервере.
Ниже я изложу свое представление/предположение того как это работает. Я не специалист в unix tcp/ip and system programming, поэтому мое изложение скорее всего далеко от истины. Я буду использовать понятные для меня термины.
Термины и сокращения: СП-слушающее приложение
Рассчитываю на то, что специалист в данной области сможет понять что я хочу узнать)
Итак, представим что сервер, скажем Nginx, слушает 80 порт, что подразумевает передачу байтов данных между ним и клиентом. После установления обычного tcp соединения и "переговоров" Upgrade: WebSocket Connection: Upgrade (по сути обмен текстовой информацией между клиентом и сервером) создается ws-соединение.
Вопрос 1
Браузер инициирует новое tcp соединение на тот же 80 порт сервера или бывают случаи что на другой ?
Вопрос 2
Что сервер делает с ws пакетами - проксирует их к СП как есть в обертке, или же обертку раскрывает и передает "чистые/сырые" данные далее ?
Вопрос 3
Как сервер отличает ws от http - по некой сигнатуре - типа по последовательности первых пришедших байт, по которым можно распознать что это именно ws а не http ?
Вопрос 4
Как эти данные передаются в сторону СП - через переменные окружения, или через unix-socket или через tcp стек?
Если используя последние два варианта, то получается что сервер держит внутри системы соединения с СП до тех пор пока "наружное" tcp соединение между клиентом и сервером не буде закрыто?
Вопрос 5
В свою очередь СП это отдельный unix процесс отличный от основного бекенд приложения, которое работает по принципу "спросили - запустился - обработал - сформировал ответ - отправил - завершился" Или же это все то же бекенд приложение только в том случае если с ним установлено ws-соединение, оно не прекращает свою работу?
Большое спасибо за развернутый ответ.
Для меня стало открытием что ws не работает без http, т.е. только поверх.
Я почему-то думал что после переговоров, клиент и сервер переходят на чистый TCP (почти чистый, учитывая что ws обертка легковесная). Вот почему мне было непонятно, как после переговоров веб сервер идентифицирует и проксирует "новоустановленное" (как я думал) TCP соединение.
А все оказывается намного проще )