AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / computer / Perguntas / 1438730
Accepted
Pfrex
Pfrex
Asked: 2019-05-20 13:18:49 +0800 CST2019-05-20 13:18:49 +0800 CST 2019-05-20 13:18:49 +0800 CST

Como cair para uma camada osi inferior?

  • 772

Existe uma maneira de iniciar uma conexão de nível superior, ou seja, uma conexão http e, em algum momento, "reduzi-la" para uma camada inferior ou tcp? Basicamente, uma vez que a conexão foi feita com http, eu quero ser capaz de pegar o soquete e usá-lo com meu próprio protocolo personalizado.

http ip
  • 2 2 respostas
  • 83 Views

2 respostas

  • Voted
  1. user1686
    2019-05-20T14:03:38+08:002019-05-20T14:03:38+08:00

    Existem duas respostas, uma para o caso geral e outra para HTTP. E também depende de como você criou a "conexão" HTTP em primeiro lugar.

    A maioria dos sistemas operacionais fornece apenas abstrações (sockets) até a camada TCP/UDP, e tudo o mais acima (ou seja, os protocolos da camada de aplicativo) geralmente é tratado - espere por isso - pelo aplicativo. Portanto, quando você estiver usando, por exemplo, um cliente SSH ou um cliente SMTP ou um cliente IRC, o aplicativo sempre pode "descer" para o fluxo TCP bruto porque é isso que o aplicativo tinha em primeiro lugar. O próprio aplicativo constrói tudo sobre a conexão TCP fornecida pelo sistema operacional.


    O HTTP, sendo tão difundido, é uma espécie de exceção e geralmente possui bibliotecas compartilhadas (como libcurl ou python-requests) e até mesmo abstrações fornecidas pelo sistema operacional (como WinHTTP).

    Bibliotecas como libcurl agem como parte do aplicativo e apenas se baseiam nos mesmos soquetes TCP fornecidos pelo sistema operacional. Alguns deles permitem acesso aos soquetes subjacentes; outros não fazem. Em qualquer caso, eles são opcionais para uso - alguns programas ainda preferem manipular um cliente HTTP sem um bom motivo.

    Mas a outra razão pela qual o HTTP é uma exceção é que o aplicativo normalmente não inicia uma "conexão HTTP" em primeiro lugar. HTTP é um protocolo sem estado; a maioria das bibliotecas de cliente HTTP usa solicitação/resposta como abstração e só abre conexões TCP sob demanda. Várias solicitações podem compartilhar a conexão TCP subjacente ou não. (O protocolo pode ser HTTP/1.1 ou pode ser HTTP/2.)

    Em outras palavras, muitas vezes simplesmente não há mais uma conexão de camada inferior quando você solicita uma.


    Há exceções para isso também. Atualmente, muitos navegadores e sites usam websockets, que começam como uma solicitação HTTP comum, mas depois mudam para uma conexão de fluxo duplex tipo TCP. (No entanto, isso não é necessariamente TCP bruto - os websockets ainda podem usar TLS e podem ter sua própria camada de enquadramento. Acho que os websockets sobre HTTP/2 herdam seu enquadramento.)

    • 0
  2. Best Answer
    Steffen Ullrich
    2019-05-20T20:48:43+08:002019-05-20T20:48:43+08:00

    Basicamente, uma vez que a conexão foi feita com http, eu quero ser capaz de pegar o soquete e usá-lo com meu próprio protocolo personalizado

    Você não "rebaixa" para uma camada OSI inferior neste caso. Em vez disso, você define seu próprio protocolo de nível de aplicativo, que primeiro consiste em algo semelhante ao HTTP, seguido por tudo o que você precisa. As camadas OSI são apenas uma abstração no pensamento (ou seja, lidam com bytes na camada 4 TCP em vez de mensagens estruturadas na camada 7).

    Quanto à implementação de seu próprio protocolo usando bibliotecas HTTP existentes: se isso é possível e como isso é feito depende totalmente da biblioteca HTTP. Alguns mantêm o soquete TCP subjacente por conta própria e alguns podem permitir que o desenvolvedor lide diretamente com ele. Alguns permitem que o desenvolvedor apenas crie uma solicitação HTTP como string e analise a resposta HTTP a partir da string e mantenha o controle do soquete TCP totalmente no desenvolvedor.

    • 0

relate perguntas

  • No PostgreSQL no Linux, editar pg_hba.conf e postgresql.conf e reiniciar o Postgres trava meu cluster na reinicialização (torna-o 'inativo')

  • Cabeçalho do host de entrada dobrado

  • Por que o Ultrasurf não está escondendo meu endereço IP?

  • wget retorna erro 404

  • É possível usar FTP sem sistema de arquivos no cliente?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    O visualizador de fotos do Windows não pode ser executado porque não há memória suficiente?

    • 5 respostas
  • Marko Smith

    Como faço para ativar o WindowsXP agora que o suporte acabou?

    • 6 respostas
  • Marko Smith

    Área de trabalho remota congelando intermitentemente

    • 7 respostas
  • Marko Smith

    Serviço do Windows 10 chamado AarSvc_70f961. O que é e como posso desativá-lo?

    • 2 respostas
  • Marko Smith

    O que significa ter uma máscara de sub-rede /32?

    • 6 respostas
  • Marko Smith

    Ponteiro do mouse movendo-se nas teclas de seta pressionadas no Windows?

    • 1 respostas
  • Marko Smith

    O VirtualBox falha ao iniciar com VERR_NEM_VM_CREATE_FAILED

    • 8 respostas
  • Marko Smith

    Os aplicativos não aparecem nas configurações de privacidade da câmera e do microfone no MacBook

    • 5 respostas
  • Marko Smith

    ssl.SSLCertVerificationError: falha na verificação do certificado [SSL: CERTIFICATE_VERIFY_FAILED]: não foi possível obter o certificado do emissor local (_ssl.c:1056)

    • 4 respostas
  • Marko Smith

    Como posso saber em qual unidade o Windows está instalado?

    • 6 respostas
  • Martin Hope
    Albin Como faço para ativar o WindowsXP agora que o suporte acabou? 2019-11-18 03:50:17 +0800 CST
  • Martin Hope
    fixer1234 O "HTTPS Everywhere" ainda é relevante? 2019-10-27 18:06:25 +0800 CST
  • Martin Hope
    Kagaratsch O Windows 10 exclui muitos arquivos minúsculos muito lentamente. Algo pode ser feito para agilizar? 2019-09-23 06:05:43 +0800 CST
  • Martin Hope
    andre_ss6 Área de trabalho remota congelando intermitentemente 2019-09-11 12:56:40 +0800 CST
  • Martin Hope
    Riley Carney Por que colocar um ponto após o URL remove as informações de login? 2019-08-06 10:59:24 +0800 CST
  • Martin Hope
    zdimension Ponteiro do mouse movendo-se nas teclas de seta pressionadas no Windows? 2019-08-04 06:39:57 +0800 CST
  • Martin Hope
    Inter Sys Como Ctrl+C e Ctrl+V funcionam? 2019-05-15 02:51:21 +0800 CST
  • Martin Hope
    jonsca Todos os meus complementos do Firefox foram desativados repentinamente, como posso reativá-los? 2019-05-04 17:58:52 +0800 CST
  • Martin Hope
    MCK É possível criar um código QR usando texto? 2019-04-02 06:32:14 +0800 CST
  • Martin Hope
    SoniEx2 Altere o nome da ramificação padrão do git init 2019-04-01 06:16:56 +0800 CST

Hot tag

windows-10 linux windows microsoft-excel networking ubuntu worksheet-function bash command-line hard-drive

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve