web-socket

В отличии от сокетов транспортного уровня, которые являются интерфейсом, через которые протоколы прикладного уровня обращаются к сервисам транспортного уровня, web сокет это протокол, который описывает правила взаимодействия между разными хостами на прикладном уровне.

Web сокеты работают через HTTP. Зачем тогда нужен такой протокол «обёртка»? HTTP работает по принципу «запрос - ответ», таким образом сервер не может ничего отправить клиенту, пока он не запросит этого. Web сокеты устанавливают постоянное соединение, по которому оба участника соединения могут в любой момент отправлять данные.

Web socket имеет специальный префикс в URL - ws:// или wss:// (если совместно в SSL TLS)

Работа протокола стоится из двух частей: установка соединения и передача данных.

Установление соединения

1) Клиент отправляет серверу HTTP GET запрос с опцией Upgrade, в которой указывает протокол, на который нужно перейти. Так же в заголове указывается случайно сгенерированный ключ web сокета - 16 байт. Ключ предоставляется в кодировке base 64.

2) Сервер подтверждает установление соединения, посылая HTTP ответ. Код 101 означает смену протокола. В заголовке `Upgrade`, также указывается протокол на который происходит переключение.

После этого между клиентом и сервером устанавливается прямое TCP соединение по котором данные передаются уже без использования протокола HTTP.

Передача данных

Web socket поддерживает фрагментацию кадров.

В web сокетах есть кадры трех типов:

  • кадры, которые передают текстовую информацию представленную в кодировке utf-8;
  • кадры, которые передают данные в двоичном виде;
  • управляющие кадре которые используются для поддержания или для закрытия соединения.