На каком уровне модели OSI работает протокол WebSocket

Ответ

Протокол WebSocket работает на прикладном уровне (L7) модели OSI, так же как HTTP, FTP или SMTP.

Он функционирует поверх TCP (транспортный уровень, L4), используя его для надежной доставки данных.

Ключевая особенность WebSocket — установление соединения через стандартный HTTP-запрос с заголовком Upgrade: websocket. После успешного "рукопожатия" HTTP-соединение "повышается" до постоянного полнодуплексного TCP-соединения. Это позволяет клиенту и серверу обмениваться данными в обе стороны в реальном времени без необходимости постоянно отправлять новые HTTP-запросы.

Пример сервера на Python и клиента на JavaScript:

Сервер (Python, websockets):

import asyncio
import websockets

async def echo(websocket, path):
    async for message in websocket:
        print(f"< {message}")
        response = f"Эхо: {message}"
        await websocket.send(response)
        print(f"> {response}")

start_server = websockets.serve(echo, "localhost", 8765)

asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()

Клиент (JavaScript, в браузере):

const socket = new WebSocket('ws://localhost:8765');

socket.onopen = function(e) {
  console.log("[open] Соединение установлено");
  socket.send("Привет, WebSocket!");
};

socket.onmessage = function(event) {
  console.log(`[message] Получены данные: ${event.data}`);
};

socket.onclose = function(event) {
  console.log('[close] Соединение закрыто');
};