Então, qual o próximo passo? Eventualmente você irá querer se comunicar com outros sistemas -
Linux ou não - e o correio não será suficiente.
Felizmente, o Linux suporta um grande número de métodos para comunicação de dados e redes. O que será abordado a seguir é o TCP/IP (Transmission Control Protocol/Internet Protocol), que o Linux possui toda a implementação de forma nativa. Além disso, o Linux suporta comunicação serial (modems) e UUCP (Unix to Unix Copy).
O protocolo TCP/IP se tornou o mais bem sucedido mecanismo para comunicação via rede de computadores no mundo. Com o Linux e uma placa de rede, você pode conectar sua máquina a uma rede local (LAN-Local Area Network) ou à Internet, a rede mundial TCP/IP (desde que com as devidas conexões de rede).
O suporte TCP/IP do Linux tem seus altos e baixos. Afinal de contas, implementar uma pilha completa de protocolos a partir do nada não é algo que alguém faz por diversão da noite para o dia. Por outro lado, o código TCP/IP do Linux se beneficiou enormemente da multidão de beta testers e desenvolvedores que cruzaram seu caminho, e com o tempo, erros e problemas de configuração foram sanados.
A atual implementação do TCP/IP e protocolos relacionados para Linux, suporta praticamente todas as características que você poderia esperar de uma implementação TCP/IP para Unix e uma grande variedade de equipamentos de rede.
De forma a compreender e melhor utilizar o poder do TCP/IP, é necessário se familiarizar com seus princípios. O TCP/IP (Transmission Control Protocol/Internet Protocol) é um conjunto de protocolos que definem como as máquinas devem se comunicar umas com as outras através da rede, bem como internamente para as outras camadas do protocolo. Em uma rede TCP/IP, a cada máquina é associado um endereço IP, o qual é um número de 32-bits que identifica de forma única a máquina. O endereço IP é normalmente representado por quatro números em notação decimal, separados por pontos. Por exemplo: 192.168.100.26.
Um endereço IP é dividido em duas partes: o endereço de rede e o endereço do host. O endereço de rede consiste dos bits mais significativos do endereço IP e o endereço do host dos demais bits. O tamanho desses dois campos depende da rede em questão. Durante nosso curso não abordaremos esse tema.
Processos, sejam na mesma máquina ou em máquinas diferentes, que precisam se comunicar via TCP/IP, normalmente especificam o endereço IP da máquina destino, assim como um endereço de porta. O endereço IP é usado obviamente para enviar os dados para a máquina destino. O endereço de porta é um número de 16-bits que especifica um serviço particular ou aplicação na máquina destino que deve receber os dados.
Por exemplo, o programa telnet permite um usuário em uma máquina iniciar uma sessão de login em outra. Na máquina remota, existe um outro programa, chamado de daemon, nesse caso o telnet daemon ou telnetd, o qual está esperando por conexões em uma porta específica, nesse caso a 23.
O usuário executando o telnet especifica o endereço da máquina onde quer efetuar o login, e o programa tenta abrir uma conexão na porta 23 da máquina destino. Se for bem sucedida, o telnet e telnetd são capazes de se comunicar um com o outro para prover o login remoto para o usuário em questão.
Note que o cliente de telnet tem uma porta própria na máquina local. Este endereço de porta é alocado para o cliente dinamicamente quando este inicia sua execução. Isso porque o telnetd remoto não precisa saber de antemão o número da porta da conexão do cliente de telnet. Quando o cliente inicia a conexão, parte da informação que envia para o telnetd é seu número de porta.
Como dissemos, o TCP/IP é um conjunto de protocolos. Além do TCP que é responsável por prover uma comunicação orientada a conexão confiável entre dois processos, existe o UDP (User Datagram Protocol), que é similar ao TCP, mas que não é orientado a conexão e não confiável. Processos que usam UDP devem implementar suas próprias rotinas de verificação e sincronismo se necessário.
TCP e UDP transmitem e recebem dados em unidades conhecidas como pacotes. Cada pacote contém um pedaço da informação a ser enviada para outra máquina, bem como os cabeçalhos especificando o endereço de destino.
O IP (Internet Protocol) fica abaixo do TCP e UDP na hierarquia de protocolos. É responsável pela transmissão e roteamento dos pacotes TCP e UDP pela rede. De forma a fazer isso, o IP encapsula cada pacote TCP ou UDP dentro de outro pacote (conhecido como datagrama IP), o qual inclui um cabeçalho com as informações de roteamento e destino. O cabeçalho do datagrama IP inclui o endereço IP das máquinas de origem e destino. Notem que o IP não sabe nada sobre endereços de porta, que são responsabilidade do TCP e UDP. Da mesma forma, o TCP e UDP não lidam com endereços IP. Existe uma independência entre os protocolos.
De forma a tornar mais humano a especificação das máquinas na Internet, as máquinas normalmente recebem nomes assim como endereços IP. O serviço de DNS (Domain Name Service) cuida de traduzir os nomes para endereços IP e vice-versa, assim como a propagação dessas informações através da Internet. DNS é uma base de dados enorme, distribuída pelo mundo todo. Cada organização mantém uma pequena parte dessa base, listando suas máquinas.
Comandos que utilizam a rede:
ping - Permite o envio de pacotes de controle na rede a fim de verificar se uma determinada máquina está "na rede".
Exemplos:
$ ping 200.224.10.13
$ ping www.yahoo.com.br
$ ping arccrcl403
telnet - Permite acesso a um computador remoto. É mostrada uma tela de acesso correspondente ao computador local onde deve ser feita a autenticação do usuário para entrar no sistema. Muito útil, mas devem ser tomados cuidados ao disponibilizar este serviço para evitar riscos de segurança.
Parâmetros disponíveis:
- -a = Tenta um login automático, enviando o nome do usuário lido da variável de ambiente USER;
- -d = Ativa o modo de debug;
- -l [usuário] = Faz a conexão usando [usuário] como nome de usuário.
Exemplos:
$ telnet 10.1.13.112
$ telnet arccrcl404
$ telnet arccrcl404 23
finger - Já ilustrado neste documento.
ftp - Permite a transferência de arquivos do computador remoto/local e vice versa. O ftp é o sistema de transmissão de arquivos mais usado na Internet. É requerida a autenticação do usuário para que seja permitida a conexão. Muitos servidores ftp disponibilizam acesso anônimo aos usuários, com acesso restrito. Uma vez conectado a um servidor ftp, você pode usar a maioria dos comandos do Linux para operá-lo.
Abaixo alguns dos comandos mais usados no FTP:
- ls - Lista arquivos do diretório atual;
- cd [diretório] - Entra em um diretório;
- get [arquivo] - Copia um arquivo do servidor ftp para o computador local. O arquivo é gravado, por padrão, no diretório onde o program ftp foi executado;
- send [arquivo] - Envia um arquivo para o diretório atual do servidor FTP.
Exemplo:
$ ftp ftp.br.debian.org
dnsdomainname - Mostra o nome do domínio DNS de seu sistema.
hostname - Mostra o nome de seu computador na rede.
talk - Inicia conversa com outro usuário. Talk é um programa de conversação onde a pessoa vê o que a outra escreve em tempo real.
Exemplos:
$ talk <usuário> <tty>
ou
$ talk <usuário@host>
ssh - Possui, basicamente, a mesma função do telnet (acesso a um computador remoto) mas, com a considerável diferença de fazer uso de conexões seguras. Dessa forma, tudo o que é transmitido por uma conexão ssh, é feito de forma criptografada.
Exemplos:
$ ssh arccrcl410
$ ssh moraes@arccrcl410
$ ssh -l moraes arccrcl410
traceroute - Permite a identificação de cada ponto existente no caminho entre a máquina local e o destino passado como parâmetro.
Exemplos:
$ traceroute www.pucminas.br
$ traceroute 10.1.13.5
Porém além das formas de interação entre as máquinas já mostradas anteriormente, existe a forma mais difundida de comunicação entre usuários de redes TCP/IP, o correio eletrônico, ou simplesmente e-mail. Através do e-mail é possível entrar em contato com qualquer pessoa, a qualquer hora, em qualquer lugar do mundo, bastando para isso que ela tenha acesso a um endereço eletrônico e um servidor de e-mail. Todo endereço eletrônico é composto da seguinte forma:
usuário@servidor.de.email
O Linux possui os programas que servem tanto para enviar quanto para receber e-mails. São os chamados MTAs (Mail Transport Agents) (exemplo: sendmail, postfix, qmail), que são os servidores utilizados para enviar e-mails; e os MUAs (Mail User Agents) (exemplo: mail, pine), que são os clientes utilizados para ler e escrever e-mails.