Como as portas e os esquemas de URI são tratados por um servidor tcp / ip?

1

Estou trabalhando com a pilha lwip tcp / ip em um dispositivo incorporado e estou tentando entender como tudo isso funciona. Eu tenho procurado através da documentação e código, mas estou confuso com a forma como as portas e os esquemas de URI são manipulados pela pilha tcp / ip.

A primeira coisa confusa é que ambos parecem definir um protocolo. Isso é redundante?

Para o lwip, para configurar uma conexão tcp, cria-se um "bloco de controle de protocolo" (PCB). Isso é definido pelo endereço IP local e por uma porta. Isso parece fazer sentido - este PCB escuta na porta especificada. Como o esquema URI faz isso? Este PCB recebe algum esquema de uri? Eu também não vejo o esquema de URI sendo passado para a função de retorno de chamada para receber pacotes.

Como isso funciona se eu quiser alterar os protocolos - por exemplo, atualizar uma conexão HTTP em uma conexão Websocket? Se o aperto de mãos inicial for feito por HTTP: porta 80, então como são feitas outras comunicações sobre o WS: porta X?

Como exemplo, aqui está a assinatura da função para ligar um PCB no lwip (no código C):

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

Isso vincula o PCB a um endereço IP e um número de porta. No entanto, o esquema de URI não é especificado. Portanto, eu diria que o PCB é agnóstico ao esquema de URI. Se olharmos para o protótipo de retorno de chamada para receber pacotes:

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

Novamente, o esquema de URI não aparece. Eu também tenho código fonte para uma implementação de um servidor HTTP usando lwip. Em nenhum lugar o esquema de URI aparece. Então, como os diferentes esquemas de URI são tratados pela pilha de IP? Eu não posso encontrar onde é passado como um argumento em retornos de chamada para lidar com o tráfego IP. Eu acho que deve estar faltando algo fundamental então.

Qualquer ajuda é apreciada!

    
por mhe 23.04.2014 / 04:59

1 resposta

0

O TCP é um protocolo de fluxo genérico para entrega de dados confiável em ordem entre dois pontos de extremidade em uma rede IP como a Internet.

HTTP é um protocolo que é executado em cima do TCP. Outros protocolos que usam TCP são FTP, SSH, SSL, etc.

As funções que você descreveu são para lidar com conexões TCP em geral.

Você deve ler o link para aprender o protocolo HTTP.

Uma breve visão geral de como uma solicitação HTTP é feita. Este exemplo é baseado no HTTP 1.0, já que é mais simples.

Quando você informa a um navegador para se conectar ao link , isso é o que acontece em segundo plano:

  1. O navegador faz uma pesquisa de DNS para superuser.com para descobrir o endereço IP do serviço.
  2. O navegador abre uma conexão TCP com o servidor para superuser.com
  3. O navegador envia GET / solicitação HTTP para o servidor.
  4. O servidor envia de volta o arquivo correspondente à localização / .

Portanto, o servidor não precisará saber nada sobre o esquema de URI aqui. O servidor precisa apenas entender as primitivas do protocolo HTTP (GET, POST, HEAD etc.) e retornar os recursos correspondentes para o cliente através do soquete TCP.

    
por 23.04.2014 / 07:49