Conceitualmente, penso em uma conexão TCP como tendo dois aspectos.
- A "conexão" - ou seja, um acordo em que os dois hosts "concordam" em se comunicar entre si. vagamente análogo a ligar para o telefone de alguém e, quando eles atendem do outro lado, você tem uma "conexão".
- a transferência de dados
O aspecto da conexão do TCP é bem abordado em documentos na Web, os hosts negociam a conexão por meio de handshake de 3 vias, etc. ar morto"
Minha pergunta é, uma vez que esta conexão é estabelecida, como os dados são iniciados, por exemplo, uma transferência de arquivo? Imagino que se pareça com o remetente descrevendo o que vai enviar, ou seja, "Vou enviar para você .... e você saberá que a transferência foi concluída quando tiver um arquivo de X bytes ou receber um trailer de Eu". Como uma transferência de dados/arquivos TCP é iniciada?
O TCP é um protocolo de transmissão orientado a fluxo; ele só se preocupa em obter os bytes na ordem certa de um host para outro, não se preocupa com o conteúdo desses bytes ou qualquer mensagem que eles possam formar. Depois que uma conexão é estabelecida, qualquer uma das extremidades da conexão pode enviar bytes para a outra.
Para dar significado a uma mensagem, você precisa concordar com um protocolo acima do TCP. É este protocolo que determina quais mensagens devem ser enviadas e como interpretar as mensagens recebidas; isso inclui determinar quando uma mensagem está completa. Por exemplo, em HTTP, se o cabeçalho “Content-Length” estiver presente, o receptor pode usá-lo para descobrir se recebeu todos os dados; se não for, outros métodos são usados (consulte o RFC para obter detalhes), até simplesmente esperar que o servidor feche a conexão (que de alguma forma está usando o TCP para determinar o comprimento da mensagem, embora de uma maneira bastante cara).
Se você deseja enviar mensagens individuais usando um protocolo de transporte orientado a mensagens, pode usar UDP ou SCTP em vez de TCP.