Essa foi uma pergunta levantada por um dos engenheiros de software da minha organização. Estou interessado na definição mais ampla.
Essa foi uma pergunta levantada por um dos engenheiros de software da minha organização. Estou interessado na definição mais ampla.
Respostas:
Um soquete TCP é uma instância de terminal definida por um endereço IP e uma porta no contexto de uma conexão TCP específica ou do estado de escuta.
Uma porta é um identificador de virtualização que define um terminal em serviço (diferente de um terminal em instância de serviço, também conhecido como identificador de sessão).
Um soquete TCP não é uma conexão , é o ponto final de uma conexão específica.
Pode haver conexões simultâneas com um terminal em serviço , porque uma conexão é identificada pelos terminais locais e remotos , permitindo que o tráfego seja roteado para uma instância de serviço específica.
Só pode haver um soquete de ouvinte para uma determinada combinação de endereço / porta .
Essa foi uma pergunta interessante que me forçou a reexaminar uma série de coisas que eu pensava conhecer de dentro para fora. Você pensaria que um nome como "soquete" seria auto-explicativo: obviamente foi escolhido para evocar imagens do terminal no qual você conecta um cabo de rede, com fortes paralelos funcionais. No entanto, na linguagem da rede, a palavra "soquete" carrega tanta bagagem que é necessário um cuidadoso reexame.
No sentido mais amplo possível, uma porta é um ponto de entrada ou saída. Embora não seja usada em um contexto de rede, a palavra francesa porte significa literalmente porta ou gateway , enfatizando ainda mais o fato de que as portas são terminais de transporte, independentemente de você enviar dados ou grandes contêineres de aço.
Para os fins desta discussão, limitarei a consideração ao contexto das redes TCP-IP. O modelo OSI está muito bem, mas nunca foi completamente implementado, muito menos amplamente implantado em condições de alto tráfego e alta tensão.
A combinação de um endereço IP e uma porta é estritamente conhecida como terminal e às vezes é chamada de soquete. Esse uso se origina no RFC793, a especificação TCP original.
Uma conexão TCP é definida por dois pontos de extremidade, também conhecidos como soquetes .
Um ponto final (soquete) é definido pela combinação de um endereço de rede e um identificador de porta . Observe que o endereço / porta não identifica completamente um soquete (mais sobre isso mais adiante).
O objetivo das portas é diferenciar vários pontos de extremidade em um determinado endereço de rede. Você poderia dizer que uma porta é um terminal virtualizado. Essa virtualização possibilita várias conexões simultâneas em uma única interface de rede.
É o par de soquetes (a 4-tupla que consiste no endereço IP do cliente, número da porta do cliente, endereço IP do servidor e número da porta do servidor) que especifica os dois pontos de extremidade que identificam exclusivamente cada conexão TCP em uma Internet. ( Volume ilustrado TCP-IP 1 , W. Richard Stevens)
Na maioria das linguagens derivadas de C, as conexões TCP são estabelecidas e manipuladas usando métodos em uma instância de uma classe Socket. Embora seja comum operar em um nível mais alto de abstração, geralmente uma instância de uma classe NetworkStream, isso geralmente expõe uma referência a um objeto de soquete. Para o codificador, esse objeto de soquete parece representar a conexão porque a conexão é criada e manipulada usando métodos do objeto de soquete.
Em C #, para estabelecer uma conexão TCP (para um ouvinte existente), primeiro você cria um TcpClient . Se você não especificar um terminal para o construtor TcpClient, ele usará os padrões - de uma maneira ou de outra, o terminal local é definido. Em seguida, você invoca o método Connect na instância que você criou. Este método requer um parâmetro que descreve o outro terminal.
Tudo isso é um pouco confuso e leva você a acreditar que um soquete é uma conexão, que é besteira. Eu estava trabalhando sob essa má compreensão até que Richard Dorman fez a pergunta.
Depois de ler e pensar bastante, agora estou convencido de que faria muito mais sentido ter uma classe TcpConnection com um construtor que usa dois argumentos, LocalEndpoint e RemoteEndpoint . Provavelmente, você poderia suportar um único argumento RemoteEndpoint quando os padrões forem aceitáveis para o terminal local. Isso é ambíguo em computadores com hospedagem múltipla, mas a ambiguidade pode ser resolvida usando a tabela de roteamento, selecionando a interface com a rota mais curta para o terminal remoto.
A clareza também seria aprimorada em outros aspectos. Um soquete não é identificado pela combinação de endereço IP e porta:
[...] TCP desmultiplexa segmentos de entrada usando todos os quatro valores que compreendem os endereços local e externo: endereço IP de destino, número da porta de destino, endereço IP de origem e número da porta de origem. O TCP não pode determinar qual processo obtém um segmento de entrada olhando apenas a porta de destino. Além disso, o único dos [vários] pontos de extremidade em [um determinado número de porta] que receberá solicitações de conexão de entrada é aquele no estado de escuta. (p255, TCP-IP Illustrated Volume 1 , W. Richard Stevens)
Como você pode ver, não é apenas possível, mas também muito provável, que um serviço de rede tenha vários soquetes com o mesmo endereço / porta, mas apenas um soquete de ouvinte em uma combinação específica de endereço / porta. As implementações típicas de bibliotecas apresentam uma classe de soquete, cuja instância é usada para criar e gerenciar uma conexão. Isso é extremamente lamentável, pois causa confusão e levou a uma confusão generalizada dos dois conceitos.
Hagrawal não acredita em mim (veja comentários), então aqui está uma amostra real. Conectei um navegador da web a http://dilbert.com e depois corri netstat -an -p tcp
. As últimas seis linhas da saída contêm dois exemplos do fato de que endereço e porta não são suficientes para identificar exclusivamente um soquete. Existem duas conexões distintas entre 192.168.1.3 (minha estação de trabalho) e 54.252.94.236:80 (o servidor HTTP remoto)
TCP 192.168.1.3:63240 54.252.94.236:80 SYN_SENT
TCP 192.168.1.3:63241 54.252.94.236:80 SYN_SENT
TCP 192.168.1.3:63242 207.38.110.62:80 SYN_SENT
TCP 192.168.1.3:63243 207.38.110.62:80 SYN_SENT
TCP 192.168.1.3:64161 65.54.225.168:443 ESTABLISHED
Como um soquete é o ponto final de uma conexão, existem dois soquetes com a combinação de endereço / porta 207.38.110.62:80
e mais dois com a combinação de endereço / porta 54.252.94.236:80
.
Acho que o mal-entendido de Hagrawal decorre do meu uso cuidadoso da palavra "identifica". Quero dizer "identifica completamente, sem ambiguidade e unicamente". Na amostra acima, existem dois pontos de extremidade com a combinação de endereço / porta 54.252.94.236:80
. Se tudo o que você tem é endereço e porta, você não possui informações suficientes para diferenciar esses soquetes. Não há informações suficientes para identificar um soquete.
O parágrafo dois da seção 2.7 da RFC793 diz
Uma conexão é totalmente especificada pelo par de soquetes nas extremidades. Um soquete local pode participar de muitas conexões com diferentes soquetes externos.
Essa definição de soquete não é útil do ponto de vista de programação, pois não é a mesma coisa que um objeto de soquete , que é o ponto final de uma conexão específica. Para um programador, e a maior parte do público dessa pergunta são programadores, essa é uma diferença funcional vital.
Um soquete consiste em três coisas:
Uma porta é um número entre 1 e 65535, inclusive, que significa uma porta lógica em um dispositivo. Toda conexão entre um cliente e um servidor requer um soquete exclusivo.
Por exemplo:
Um soquete representa uma conexão única entre dois aplicativos de rede. Esses dois aplicativos são executados nominalmente em computadores diferentes, mas os soquetes também podem ser usados para comunicação entre processos em um único computador. Os aplicativos podem criar vários soquetes para se comunicar. Os soquetes são bidirecionais, o que significa que ambos os lados da conexão são capazes de enviar e receber dados. Portanto, um soquete pode ser criado teoricamente em qualquer nível do modelo OSI de 2 em diante. Os programadores geralmente usam soquetes na programação de rede, embora indiretamente. Bibliotecas de programação como o Winsock ocultam muitos detalhes de baixo nível da programação de soquetes. Os soquetes têm sido amplamente utilizados desde o início dos anos 80.
Uma porta representa um ponto final ou "canal" para comunicações em rede. Os números de porta permitem que aplicativos diferentes no mesmo computador utilizem recursos de rede sem interferir entre si. Os números de porta costumam aparecer na programação de rede, principalmente na programação de soquetes. Às vezes, porém, os números de porta são tornados visíveis para o usuário casual. Por exemplo, alguns sites que uma pessoa visita na Internet usam um URL como o seguinte:
http://www.mairie-metz.fr:8080/ Neste exemplo, o número 8080 refere-se ao número da porta usada pelo navegador da Web para conectar-se ao servidor da Web. Normalmente, um site usa a porta número 80 e esse número não precisa ser incluído na URL (embora possa ser).
Na rede IP, os números de porta podem teoricamente variar de 0 a 65535. Porém, os aplicativos de rede mais populares usam números de porta na extremidade inferior do intervalo (como 80 para HTTP).
Nota: O termo porta também se refere a vários outros aspectos da tecnologia de rede. Uma porta pode se referir a um ponto de conexão físico para dispositivos periféricos, como portas seriais, paralelas e USB. O termo porta também se refere a determinados pontos de conexão Ethernet, como os de um hub, comutador ou roteador.
ref http://compnetworking.about.com/od/basicnetworkingconcepts/l/bldef_port.htm
ref http://compnetworking.about.com/od/itinformationtechnology/l/bldef_socket.htm
Com alguma analogia
Embora muita coisa técnica já tenha sido dada acima para soquetes ... Gostaria de adicionar minha resposta, caso alguém ainda não consiga sentir a diferença entre ip, porta e soquetes
Considere um servidor S ,
e digamos que a pessoa X, Y, Z precise de um serviço (digamos, serviço de bate-papo) desse servidor S
então
O endereço IP informa -> quem? é o servidor de bate-papo 'S' que X, Y, Z desejam entrar em contato
ok, você tem "quem é o servidor"
mas suponha que o servidor 'S' também esteja fornecendo outros serviços para outras pessoas, digamos 'S' forneça serviços de armazenamento para a pessoa A, B, C
então
porta diz ---> qual? serviço que você (X, Y, Z) precisa, ou seja, serviço de bate-papo e não esse serviço de armazenamento
ok .., você faz com que o servidor saiba que 'serviço de bate-papo' é o que você deseja e não o armazenamento
mas
você tem três anos e o servidor pode querer identificar todos os três de maneira diferente
aí vem a tomada
agora socket diz -> qual? conexão particular
isto é, digamos,
soquete 1 para a pessoa X
soquete 2 para a pessoa Y
e soquete 3 para a pessoa Z
Espero que ajude alguém que ainda estava confuso :)
Em primeiro lugar, acho que devemos começar com um pouco de compreensão do que constitui obter um pacote de A a B.
Uma definição comum para uma rede é o uso do Modelo OSI que separa uma rede em várias camadas de acordo com a finalidade. Existem alguns importantes que abordaremos aqui:
O TCP contém, entre outras coisas, o conceito de portas . Esses são pontos de extremidade de dados efetivamente diferentes no mesmo endereço IP ao qual um Socket da Internet ( AF_INET
) pode se conectar.
Por acaso, o UDP e outros protocolos da camada de transporte também. Tecnicamente, eles não precisam apresentar portas, mas essas portas fornecem uma maneira para vários aplicativos nas camadas acima usarem o mesmo computador para receber (e de fato fazer) conexões de saída.
O que nos leva à anatomia de uma conexão TCP ou UDP. Cada um possui uma porta e endereço de origem e uma porta e endereço de destino. Isso é feito para que, em qualquer sessão, o aplicativo de destino possa responder e receber da fonte.
Portanto, as portas são essencialmente uma maneira especificada por especificação de permitir várias conexões simultâneas compartilhando o mesmo endereço.
Agora, precisamos dar uma olhada em como você se comunica do ponto de vista do aplicativo para o mundo exterior. Para fazer isso, você precisa perguntar gentilmente ao seu sistema operacional e, como a maioria dos sistemas operacionais oferece suporte à maneira de fazer as coisas nos Berkeley Sockets, vemos que podemos criar soquetes envolvendo portas de um aplicativo como este:
int fd = socket(AF_INET, SOCK_STREAM, 0); // tcp socket
int fd = socket(AF_INET, SOCK_DGRAM, 0); // udp socket
// later we bind...
Ótimo! Então, nas sockaddr
estruturas, especificaremos nossa porta e bam! Tarefa concluída! Bem, quase, exceto:
int fd = socket(AF_UNIX, SOCK_STREAM, 0);
também é possível. Urgh, isso jogou uma chave inglesa nos trabalhos!
Ok, bem, na verdade não tem. Tudo o que precisamos fazer é apresentar algumas definições apropriadas:
/var/run/database.sock
.Voila! Isso arruma as coisas. Então, em nosso esquema, então,
Realmente, uma porta é um subconjunto dos requisitos para formar um soquete de Internet. Infelizmente, acontece que o significado da palavra soquete foi aplicado a várias idéias diferentes. Por isso, aconselho sinceramente que você nomeie seu próximo soquete do projeto, apenas para aumentar a confusão;)
Um soquete = Endereço IP + uma porta (endereço numérico)
Juntos, eles identificam um ponto final para uma conexão de rede em uma máquina. (Acabei de reprovar a rede 101?)
Geralmente, você terá muitas teorias, mas uma das maneiras mais fáceis de diferenciar esses dois conceitos é a seguinte:
Para obter um serviço, você precisa de um número de serviço. Esse número de serviço é chamado de porta. Simples assim.
Por exemplo, o HTTP como um serviço está sendo executado na porta 80.
Agora, muitas pessoas podem solicitar o serviço e uma conexão do cliente-servidor foi estabelecida. Haverá muitas conexões. Cada conexão representa um cliente. Para manter cada conexão, o servidor cria um soquete por conexão para manter seu cliente.
Parece haver muitas respostas que igualam o soquete à conexão entre 2 PCs .. o que eu acho absolutamente incorreto. Um soquete sempre foi o ponto final em 1 PC, que pode ou não estar conectado - certamente todos nós já usamos soquetes listener ou UDP * em algum momento. A parte importante é que é endereçável e ativa. O envio de uma mensagem para 1.1.1.1:1234 provavelmente não funcionará, pois não há soquete definido para esse terminal.
Os soquetes são específicos do protocolo - portanto, a implementação da exclusividade que o TCP / IP e o UDP / IP usa * (endereço ip : porta) é diferente de, por exemplo, IPX (rede, nó e ... ahem, soquete - mas um diferente soquete do que o termo "soquete" geral. Os números de soquete IPX são equivalentes às portas IP). Mas, todos eles oferecem um endpoint endereçável exclusivo.
Desde que o IP se tornou o protocolo dominante, uma porta (em termos de rede) tornou-se sinônoma com um número de porta UDP ou TCP - que é uma parte do endereço do soquete.
O UDP é sem conexão - o que significa que nenhum circuito virtual entre os dois pontos finais jamais foi criado. No entanto, ainda nos referimos aos soquetes UDP como o ponto final. As funções da API deixam claro que ambos são apenas tipos diferentes de soquetes - SOCK_DGRAM
é UDP (apenas enviando uma mensagem) e SOCK_STREAM
TCP (criando um circuito virtual).
Tecnicamente, o cabeçalho IP mantém o endereço IP e o protocolo em cima do IP (UDP ou TCP) mantém o número da porta. Isso torna possível ter outros protocolos (por exemplo, ICMP que não possuem números de porta, mas possuem informações de endereçamento IP).
Breve resposta breve.
Uma porta pode ser descrita como um endereço interno em um host que identifica um programa ou processo.
Um soquete pode ser descrito como uma interface de programação que permite que um programa se comunique com outros programas ou processos, na Internet ou localmente.
São termos de dois domínios diferentes: 'porta' é um conceito da rede TCP / IP, 'soquete' é uma coisa de API (programação). Um 'soquete' é criado (no código), pegando uma porta e um nome de host ou adaptador de rede e combinando-os em uma estrutura de dados que você pode usar para enviar ou receber dados.
Estes são conceitos básicos de rede, por isso vou explicá-los de uma maneira fácil e abrangente para entender em detalhes.
Portanto, um soquete na rede é um dispositivo de comunicação virtual vinculado a um par (ip, porta) = (endereço, serviço).
Nota:
Espero que tire suas dúvidas
Depois de ler as excelentes respostas votadas, descobri que o seguinte ponto precisava de ênfase para mim, um novato na programação em rede:
As conexões TCP-IP são caminhos bidirecionais que conectam um endereço: combinação de portas com outro endereço: combinação de portas. Portanto, sempre que você abre uma conexão da sua máquina local com uma porta em um servidor remoto (por exemplo, www.google.com:80), também associa um novo número de porta na sua máquina à conexão, para permitir que o servidor envie coisas de volta para você (por exemplo, 127.0.0.1:65234). Pode ser útil usar o netstat para verificar as conexões da sua máquina:
> netstat -nWp tcp (on OS X)
Active Internet connections
Proto Recv-Q Send-Q Local Address Foreign Address (state)
tcp4 0 0 192.168.0.6.49871 17.172.232.57.5223 ESTABLISHED
...
123.132.213.231 # IP address
:1234 # port number
123.132.213.231:1234 # socket address
Uma conexão ocorre quando dois soquetes são unidos.
Um soquete é um tipo especial de identificador de arquivo usado por um processo para solicitar serviços de rede do sistema operacional. Um endereço de soquete é o triplo: {protocolo, endereço local, processo local} em que o processo local é identificado por um número de porta.
No conjunto TCP / IP, por exemplo:
{tcp, 193.44.234.3, 12345}
Uma conversa é o elo de comunicação entre dois processos, representando uma associação entre dois. Uma associação é a tupla 5 que especifica completamente os dois processos que compõem uma conexão: {protocolo, endereço local, processo local, endereço externo, processo externo}
No conjunto TCP / IP, por exemplo:
{tcp, 193.44.234.3, 1500, 193.44.234.5, 21}
poderia ser uma associação válida.
Uma meia associação é: {protocolo, endereço local, processo local}
ou
{protocolo, endereço estrangeiro, processo estrangeiro}
que especificam cada metade de uma conexão.
A meia associação também é chamada de soquete ou endereço de transporte. Ou seja, um soquete é um ponto final para a comunicação que pode ser nomeada e endereçada em uma rede. A interface do soquete é uma das várias interfaces de programação de aplicativos (APIs) para os protocolos de comunicação. Projetado para ser uma interface de programação de comunicação genérica, foi introduzido pela primeira vez pelo sistema 4.2BSD UNIX. Embora não tenha sido padronizado, tornou-se de fato um padrão da indústria.
Um soquete é um terminal de comunicação. Um soquete não está diretamente relacionado à família de protocolos TCP / IP, pode ser usado com qualquer protocolo suportado pelo seu sistema. A API do soquete C espera que você primeiro obtenha um objeto de soquete em branco do sistema, que poderá vincular a um endereço de soquete local (para recuperar diretamente o tráfego de entrada para protocolos sem conexão ou para aceitar solicitações de conexão de entrada para protocolos orientados a conexão) ou que você pode conectar-se a um endereço de soquete remoto (para qualquer tipo de protocolo). Você pode até fazer as duas coisas se quiser controlar as duas, o endereço do soquete local ao qual um soquete está associado e o endereço do soquete remoto ao qual está conectado. Para protocolos sem conexão, conectar um soquete é opcional, mas se você não fizer isso, Também será necessário passar o endereço de destino com todos os pacotes que você deseja enviar pelo soquete, de que outra forma o soquete saberá para onde enviar esses dados? A vantagem é que você pode usar um único soquete para enviar pacotes para diferentes endereços de soquete. Depois de configurar o seu soquete e talvez até conectar, considere-o como um tubo de comunicação bidirecional. Você pode usá-lo para passar dados para algum destino e algum destino pode usá-lo para passar dados de volta para você. O que você escreve em um soquete é enviado e o que foi recebido está disponível para leitura. Você pode usá-lo para passar dados para algum destino e algum destino pode usá-lo para passar dados para você. O que você escreve em um soquete é enviado e o que foi recebido está disponível para leitura. Você pode usá-lo para passar dados para algum destino e algum destino pode usá-lo para passar dados para você. O que você escreve em um soquete é enviado e o que foi recebido está disponível para leitura.
Portas, por outro lado, são algo que somente alguns protocolos da pilha de protocolos TCP / IP possuem. Pacotes TCP e UDP têm portas. Uma porta é apenas um número simples. A combinação de porta de origem e porta de destino identifica um canal de comunicação entre dois hosts. Por exemplo, você pode ter um servidor que seja ambos, um servidor HTTP simples e um servidor FTP simples. Se agora chegar um pacote para o endereço desse servidor, como saberia se é um pacote para o servidor HTTP ou FTP? Bem, ele saberá que o servidor HTTP será executado na porta 80 e o servidor FTP na porta 21; portanto, se o pacote chegar com uma porta de destino 80, será para o servidor HTTP e não para o servidor FTP. Além disso, o pacote possui uma porta de origem, pois, sem essa porta, um servidor pode ter apenas uma conexão com um endereço IP de cada vez. A porta de origem possibilita a um servidor distinguir conexões idênticas: todas elas têm a mesma porta de destino, por exemplo, porta 80, o mesmo IP de destino (o IP do servidor) e o mesmo IP de origem, pois todas elas o mesmo cliente, mas como elas têm portas de origem diferentes, o servidor pode distingui-las. E quando o servidor envia respostas, ele o faz à porta da qual a solicitação veio, assim o cliente também pode distinguir respostas diferentes que recebe do mesmo servidor.
A porta foi a parte mais fácil, é apenas um identificador exclusivo para um soquete. Um soquete é algo que os processos podem usar para estabelecer conexões e se comunicar. Tall Jeff tinha uma ótima analogia telefônica que não era perfeita, então decidi corrigi-la:
netstat
tela por algum tempo. Todos os soquetes aceitos de um soquete de escuta compartilham a mesma porta. Portanto, uma porta não é um identificador exclusivo para um soquete.
Um aplicativo consiste em um par de processos que se comunicam pela rede (par cliente-servidor). Esses processos enviam e recebem mensagens para e da rede através de uma interface de software chamada soquete . Considerando a analogia apresentada no livro "Redes de computadores: abordagem de cima para baixo". Há uma casa que deseja se comunicar com outra casa. Aqui, a casa é análoga a um processo e a porta a uma tomada. O processo de envio pressupõe que exista uma infraestrutura do outro lado da porta que transportará os dados para o destino. Quando a mensagem é recebida do outro lado, ela passa pela porta do receptor (tomada) até a casa (processo). Esta ilustração do mesmo livro pode ajudá-lo:
Os soquetes fazem parte da camada de transporte, que fornece comunicação lógica aos aplicativos. Isso significa que, do ponto de vista do aplicativo, os dois hosts estão diretamente conectados entre si, mesmo que haja vários roteadores e / ou switches entre eles. Portanto, um soquete não é uma conexão em si, é o ponto final da conexão. Os protocolos da camada de transporte são implementados apenas em hosts e não em roteadores intermediários.
Portasfornecer meios de endereçamento interno a uma máquina. O objetivo principal é permitir que vários processos enviem e recebam dados pela rede sem interferir em outros processos (seus dados). Todos os soquetes são fornecidos com um número de porta. Quando um segmento chega a um host, a camada de transporte examina o número da porta de destino do segmento. Em seguida, encaminha o segmento para o soquete correspondente. Esse trabalho de entrega de dados em um segmento da camada de transporte para o soquete correto é chamado de desmultiplexação . Os dados do segmento são então encaminhados para o processo anexado ao soquete.
Um soquete é uma estrutura em seu software. É mais ou menos um arquivo; possui operações como leitura e gravação. Não é uma coisa física; é uma maneira do seu software se referir a coisas físicas.
Uma porta é algo semelhante a um dispositivo. Cada host possui uma ou mais redes (essas são físicas); um host tem um endereço em cada rede. Cada endereço pode ter milhares de portas.
Apenas um soquete pode estar usando uma porta em um endereço. O soquete aloca a porta aproximadamente como alocar um dispositivo para E / S do sistema de arquivos. Depois que a porta é alocada, nenhum outro soquete pode se conectar a essa porta. A porta será liberada quando o soquete estiver fechado.
Veja a terminologia TCP / IP .
do Oracle Java Tutorial :
Um soquete é um ponto final de um link de comunicação bidirecional entre dois programas em execução na rede. Um soquete é vinculado a um número de porta para que a camada TCP possa identificar o aplicativo ao qual os dados estão destinados a serem enviados.
A porta e o soquete podem ser comparados à agência bancária.
O número do edifício do "Banco" é análogo ao endereço IP. Um banco possui seções diferentes, como:
Portanto, 1 (departamento de conta poupança), 2 (departamento de empréstimo pessoal), 3 (departamento de crédito à habitação) e 4 (departamento de queixas) são portos.
Agora, digamos que você vá abrir uma conta poupança, vá ao banco (endereço IP), depois vá ao "departamento de conta poupança" (número da porta 1) e encontre um dos funcionários que trabalha no "departamento de conta poupança" " Vamos chamá-lo de SAVINGACCOUNT_EMPLOYEE1 para abrir a conta.
SAVINGACCOUNT_EMPLOYEE1 é o seu descritor de soquete, portanto, pode haver SAVINGACCOUNT_EMPLOYEE1 para SAVINGACCOUNT_EMPLOYEEN. Todos esses são descritores de soquete.
Da mesma forma, outros departamentos terão funcionários trabalhando sob eles e são análogos ao soquete.
Um soquete é um mecanismo de E / S de dados. Uma porta é um conceito contratual de um protocolo de comunicação . Um soquete pode existir sem uma porta. Uma porta pode existir sem um soquete específico (por exemplo, se vários soquetes estiverem ativos na mesma porta, o que pode ser permitido para alguns protocolos).
Uma porta é usada para determinar para qual soquete o receptor deve rotear o pacote, com muitos protocolos, mas isso nem sempre é necessário e a seleção do soquete de recebimento pode ser feita por outros meios - uma porta é inteiramente uma ferramenta usada pelo manipulador de protocolo no o subsistema de rede. por exemplo, se um protocolo não usa uma porta, os pacotes podem ir para todos os soquetes de escuta ou qualquer soquete.
Terminologia TCP / IP relativa, que é o que eu assumo, está implícita na pergunta. Em termos leigos:
Um PORTO é como o número de telefone de uma casa em particular em um código postal específico. O CEP da cidade pode ser considerado o endereço IP da cidade e todas as casas dessa cidade.
Um SOQUETE, por outro lado, é mais como um telefonema estabelecido entre telefones de um par de casas conversando entre si. Essas chamadas podem ser estabelecidas entre casas na mesma cidade ou duas casas em cidades diferentes. É esse caminho temporário estabelecido entre o par de telefones conversando entre si que é o SOCKET.
Em um sentido amplo, soquete - é exatamente isso, um soquete, assim como sua tomada elétrica, a cabo ou de telefone. Um ponto em que "coisas necessárias" (energia, sinal, informação) podem sair e entrar. Esconde muitas coisas detalhadas, o que não é necessário para o uso das "coisas necessárias". Na linguagem do software, ele fornece uma maneira genérica de definir um mecanismo de comunicação entre duas entidades (essas entidades podem ser qualquer coisa - dois aplicativos, dois dispositivos fisicamente separados, espaço de Usuário e Kernel em um SO, etc.)
Uma porta é um discriminador de terminal. Ele diferencia um ponto final de outro. No nível da rede, ele diferencia um aplicativo de outro, para que a pilha de rede possa passar informações ao aplicativo apropriado.
Já foram dadas respostas teóricas a esta pergunta. Eu gostaria de dar um exemplo prático para esta pergunta, que esclarecerá sua compreensão sobre soquete e porta.
Eu achei aqui
Este exemplo orientará você no processo de conexão com um site, como o Wiley. Você abriria o navegador da web (como o Mozilla Firefox) e digite www.wiley.com na barra de endereços. Seu navegador da web usa um servidor DNS (Sistema de Nomes de Domínio) para procurar o nome www.wiley.com e identificar o endereço IP. Para este exemplo, o endereço é 192.0.2.100.
O Firefox faz uma conexão com o endereço 192.0.2.100 e a porta na qual o servidor da camada de aplicativos está operando. O Firefox sabe qual porta esperar, porque é uma porta bem conhecida. A porta conhecida para um servidor web é a porta TCP 80.
O soquete de destino que o Firefox tenta conectar é gravado como socket: port ou, neste exemplo, 192.0.2.100:80. Este é o lado do servidor da conexão, mas o servidor precisa saber para onde enviar a página da web que você deseja visualizar no Mozilla Firefox, para que você também tenha um soquete para o lado do cliente da conexão.
A conexão do cliente é composta pelo seu endereço IP, como 192.168.1.25, e um número de porta dinâmica escolhido aleatoriamente. O soquete associado ao Firefox se parece com 192.168.1.25:49175. Como os servidores da Web operam na porta TCP 80, esses dois soquetes são soquetes TCP, enquanto que se você estivesse se conectando a um servidor operando em uma porta UDP, os soquetes do servidor e do cliente seriam soquetes UDP.
Socket é uma abstração fornecida pelo kernel para aplicativos do usuário para E / S de dados. Um tipo de soquete é definido pelo protocolo de manipulação, comunicação IPC etc. Portanto, se alguém criar um soquete TCP, ele poderá fazer manipulações como ler dados no soquete e gravar dados nele por métodos simples e o protocolo de nível mais baixo, como conversões TCP e o encaminhamento de pacotes para protocolos de rede de nível inferior é feito pela implementação específica do soquete no kernel. A vantagem é que o usuário não precisa se preocupar em lidar com nitigridades específicas do protocolo e deve apenas ler e gravar dados no soquete como um buffer normal. O mesmo acontece no caso do IPC, o usuário apenas lê e grava dados no soquete e o kernel lida com todos os detalhes de nível inferior com base no tipo de soquete criado.
A porta juntamente com o IP é como fornecer um endereço para o soquete, embora não seja necessário, mas ajuda nas comunicações da rede.
Uma única porta pode ter um ou mais soquetes conectados com IPs externos diferentes, como uma tomada elétrica múltipla.
TCP 192.168.100.2:9001 155.94.246.179:39255 ESTABLISHED 1312
TCP 192.168.100.2:9001 171.25.193.9:61832 ESTABLISHED 1312
TCP 192.168.100.2:9001 178.62.199.226:37912 ESTABLISHED 1312
TCP 192.168.100.2:9001 188.193.64.150:40900 ESTABLISHED 1312
TCP 192.168.100.2:9001 198.23.194.149:43970 ESTABLISHED 1312
TCP 192.168.100.2:9001 198.49.73.11:38842 ESTABLISHED 1312
Socket é uma abstração SW do terminal de rede, usado como interface para o aplicativo. Em Java, C # é representado por objeto, no Linux, Unix, é um arquivo.
Port é apenas uma propriedade de um soquete que você especificou se deseja estabelecer uma comunicação. Para receber o pacote de um soquete, é necessário vinculá-lo à porta local específica e à NIC (com endereço IP local) ou a todas as NICs (INADDR_ANY é especificado na chamada de ligação). Para enviar pacotes, você deve especificar a porta e o IP do soquete remoto.
Um soquete é basicamente um ponto de extremidade para comunicação em rede, consistindo em pelo menos um endereço IP e uma porta. No Java / C #, um soquete é uma implementação de nível superior de um lado de uma conexão bidirecional.
Além disso, uma definição na documentação Java .
Porta:
Uma porta pode se referir a um ponto de conexão físico para dispositivos periféricos, como portas seriais, paralelas e USB. O termo porta também se refere a determinados pontos de conexão Ethernet, como os de um hub, switch ou roteador.
Soquete:
Um soquete representa uma conexão única entre dois aplicativos de rede. Esses dois aplicativos são executados nominalmente em computadores diferentes, mas os soquetes também podem ser usados para comunicação entre processos em um único computador. Os aplicativos podem criar vários soquetes para comunicação entre si. Os soquetes são bidirecionais, o que significa que ambos os lados da conexão são capazes de enviar e receber dados.
Uma porta indica um ponto de extremidade de comunicação nos transportes TCP e UDP para o protocolo de rede IP. Um soquete é uma abstração de software para um terminal de comunicação comumente usado em implementações desses protocolos (API de soquete). Uma implementação alternativa é a API XTI / TLI.
Veja também:
Stevens, WR 1998, UNIX Programação de rede: APIs de rede: Sockets e XTI; Volume 1, Prentice Hall.
Stevens, WR, 1994, TCP / IP Illustrated, Volume 1: The Protocols, Addison-Wesley.