1

Я работаю со стеком lwip tcp/ip на встроенном устройстве и пытаюсь понять, как все это работает. Я просматривал документацию и код, но меня смущает то, как порты и схемы URI обрабатываются стеком tcp/ip.

Первое, что сбивает с толку, это то, что они оба, кажется, определяют протокол. Это избыточно?

Для lwip, чтобы установить соединение TCP, создается "Блок управления протоколом" (PCB). Это определяется локальным IP-адресом и портом. Кажется, это имеет смысл - эта плата прослушивает указанный порт. Как схема URI влияет на это тогда? Эта PCB получает какую-либо схему URI? Я также не вижу схемы URI, передаваемой функции обратного вызова для приема пакетов.

Как это работает, если я хочу изменить протоколы - например, обновить HTTP-соединение до соединения Websocket? Если начальное рукопожатие выполняется через HTTP: порт 80, то как дальнейшая связь осуществляется через WS: порт X?

В качестве примера, вот подпись функции для связывания печатной платы в lwip (в коде C):

tcp_bind(struct tcp_pcb *pcb, struct ip_addr *ipaddr, u16_t port)

Это связывает PCB с IP-адресом и номером порта. Однако схема URI не указана. Поэтому я бы предположил, что PCB не зависит от схемы URI. Если мы посмотрим на прототип обратного вызова для получения пакетов:

err_t (* accept)(void *arg, struct tcp_pcb *newpcb, err_t err)

Опять же схема URI не появляется. У меня также есть исходный код для реализации HTTP-сервера с использованием lwip. Нигде схема URI не появляется. Итак, как же различные схемы URI обрабатываются стеком IP? Я не могу найти, где это даже передается в качестве аргумента в обратные вызовы для обработки IP-трафика. Я думаю, что я должен пропустить что-то фундаментальное тогда.

Любая помощь приветствуется!

1 ответ1

0

TCP - это общий потоковый протокол для надежной доставки данных по порядку между двумя конечными точками в IP-сети, такой как Интернет.

HTTP - это протокол, который работает поверх TCP. Другими протоколами, которые используют TCP, являются FTP, SSH, SSL и т.д.

Описанные вами функции предназначены для обработки TCP-соединений в целом.

Вы должны прочитать http://www.w3.org/Protocols/rfc2616/rfc2616.html, чтобы узнать протокол HTTP.

Краткий обзор того, как делается HTTP-запрос. Этот пример основан на HTTP 1.0, поскольку он проще.

Когда вы говорите браузеру подключиться к http://superuser.com, это происходит в фоновом режиме:

  1. Браузер выполняет поиск DNS для superuser.com чтобы узнать IP-адрес службы.
  2. Браузер открывает TCP-соединение с сервером для superuser.com
  3. Браузер отправляет GET / HTTP-запрос на сервер.
  4. Сервер отправляет обратно файл, соответствующий расположению / .

Таким образом, серверу здесь не нужно ничего знать о схеме URI. Сервер должен понимать только примитивы протокола HTTP (GET, POST, HEAD и т.д.) И возвращать соответствующие ресурсы клиенту через сокет TCP.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .