sábado, 12 de maio de 2012

Comparação Entre o Modelo OSI e TCP/IP

OSI vs TCP/IP 
Os modelos de referência OSI e TCP/IP têm muito em comum. Ambos são baseados no conceito de pilha de protocolos independentes e a funcionalidade das camadas é muito semelhante. Por exemplo, em ambos os modelos, camadas de transporte e as demais acima dela fornecem um serviço de transporte independente de rede de fim a fim, processando pedidos de comunicação, formando o provedor de transporte. Também as camadas acima da de transporte são voltadas para o processamento de pedidos de comunicação. Apesar de terem semelhanças fundamentais, os modelos são muito diferentes. Veremos aqui as principais diferenças entre os dois modelos. É importante notar que estamos comparando os modelos de referência, não as pilhas de protocolo correspondentes. Os protocolos por si mesmos serão discutidos mais tarde. Três conceitos são centrais no modelo OSI: 
1. Serviços 
2. Interfaces 
3. Protocolos 
O modelo OSI faz uma explícita distinção entre estes conceitos básicos. As camadas inferiores fornecem alguns serviços para as superiores. Na definição de serviço, especifica-se o que cada camada faz, não diz como as camadas acima acessam e como ela trabalha. Há Uma interface de camada que diz aos processos acima como acessá-lo, especificando os parâmetros e os retornos esperados, mas não fala sobre o funcionamento interno da camada. Os protocolos pares usados na camada são assunto próprio da camada. Ele pode usar quaisquer protocolos que ele queira, desde que forneça o serviço requerido. Também pode mudá-los sem afetar o software nas camadas mais altas. Estas idéias são muito próximas às modernas idéias de programação orientada a objeto. Cada objeto (camada) tem um conjunto de métodos que podem ser acessados por processos externos ao objeto. A semântica destes métodos define o conjunto de serviços oferecidos pelo objeto. Os parâmetros dos métodos e os resultados da interface do objeto. O código interno do objeto é seu protocolo e não é visível fora deste. O modelo TCP/IP originalmente não faz esta clara distinção entre serviço, interface e protocolo, embora muitos tenham tentado mudá-lo para torná-lo mais parecido com OSI. Por exemplo, os únicos serviços reais oferecidos pela camada de internet são ENVIAR PACOTE IP e RECEBER PACOTE IP. 
Por esta razão, os protocolos OSI são melhor escondidos do que no TCP/IP e tem maior adaptabilidade para mudanças de tecnologia. Esta adaptabilidade é um dos propósitos principais de se ter protocolos por camadas no modelo inicial. 
O modelo de referência OSI foi criado antes da invenção dos protocolos. Desta forma ele não foi feito sobre um conjunto particular de protocolos, o que o torna bem geral. Isto significa que o modelo não foi formado sobre um conjunto particular de protocolos, o que faz ele ser bem geral. Em contraponto, os projetistas não tinham muita experiência e nâo poderiam ter uma boa idéia quanto a funcionalidade das camadas. Por exemplo, originalmente a camada de enlace somente lidava somente com redes ponto a ponto e quando então surgiram as redes teve de ser adicionada uma nova subcamada. Quando as pessoas passaram a construir redes usando o modelo OSI e protocolos existentes, descobriram que eles não atendiam as especificações de serviço requeridas e tiveram de adicionar subcamadas para superar as diferenças. Finalmente, o comitê originalmente esperou que cada país tivesse uma rede, gerenciada pelo governo e usando os protocolos OSI, logo a ideia de interconectividade. Resumidamente, as coisas não aconteceram assim.
Com o TCP/IP aconteceu o contrário: os protocolos vieram primeiro, e o modelo foi apenas uma descrição dos protocolos existentes. Por isso não houve problema com protocolos tendo que se adaptar ao modelo, eles se encaixam perfeitamente. 
O problema é que nem toda pilha de protocolo se encaixa no modelo. Conseqüentemente, não podia ser utilizado para descrever redes que não fossem TCP/IP. 
Falando mais especificamente, há uma diferença óbvia entre os dois modelos que é o número de camadas: OSI tem sete e o TCP/IP tem quatro. Ambas têm camada de rede, de transporte e aplicação, mas as outras são diferentes. Outra diferença está ligada ao tipo conexão da comunicação: comunicação sem conexão(CSC) versus comunicação orientada à conexão(COC). Na camada de rede, OSI suporta ambos e O modelo TCP/IP tem somente um modo. Na camada de transporte, OSI possui somente COC, onde ele influencia (porque o serviço de transporte é visível aos usuários), enquanto que TCP/IP suporta ambos os modos na camada de transporte, dando uma escolha aos usuários. Esta escolha é especialmente importante para protocolos simples de pergunta e resposta.

terça-feira, 1 de maio de 2012

SISTEMAS DE NUMERAÇÃO

Conversões entre Bases 
Vamos analisar agora as regras gerais para converter números entre duas bases quaisquer. 

 Conversões entre as bases 2, 8 e 16 
As conversões mais simples são as que envolvem bases que são potências entre si. Vamos exemplificar com a conversão entre a base 2 e a base 8. Como 23 = 8, separando os bits de um número binário em grupos de tres bits (começando sempre da direita para a esquerda!) e convertendo cada grupo de tres bits para seu equivalente em octal, teremos a representação do número em octal. 
Por exemplo: 101010012 = 10.101.0012 (separando em grupos de 3, sempre começando da direita para a esquerda) Sabemos que 0102 = 28 ; 1012 = 58 ; 0012 = 18 portanto 101010012 = 2518 Se você ainda não sabe de cor, faça a conversão utilizando a regra geral. 
Vamos agora exemplificar com uma conversão entre as bases 2 e 16. Como 24 = 16, basta separarmos em grupos de 4 bits (começando sempre da direita para a esquerda!) e converter. 
Por exemplo: 110101011012 = 110.1010.11012 (separando em grupos de 4 bits, sempre começando da direita para a esquerda) 
 Sabemos que 1102 = 616; 10102 = A16 ; 11012 = D16 ; portanto 110101011012 = 6AD16 
 Vamos agora exercitar a conversão inversa. 
Quanto seria 3F5H (lembrar que o H está designando "hexadecimal") em octal? 
O método mais prático seria converter para binário e em seguida para octal. 3F5H = 11.1111.01012 (convertendo cada dígito hexadecimal em 4 dígitos binários) = = 1.111.110.1012 (agrupando de tres em tres bits) = = 17658 (convertendo cada grupo de tres bits para seu valor equivalente em octal). 

 Conversão de Números em uma base b qualquer para a base 10 
Vamos lembrar a expressão geral já apresentada: Nb = an.bn + .... + a2.b2 + a1.b1 + a0.b0 + a-1.b-1 + a-2.b-2 + .... + a-n.b-n A melhor forma de fazer a conversão é usando essa expressão. 
Tomando como exemplo o número 1011012, vamos calcular seu valor representado na base dez. 
Usando a expressão acima, fazemos: 1011012 = 1x25 + 0x24 + 1x23 + 1x22 + 0x21 + 1x20 = 32 + 0 + 8 + 4 + 0 + 1 = 4510 
 Podemos fazer a conversão de números em qualquer base para a base 10 usando o algoritmo acima. Exemplos: 
a) Converter 4F5H para a base 10 . 
Solução: 
Lembramos que o H significa que a representação é hexadecimal (base 16). 
Sabemos ainda que F16=1510. Então: 4x162 + 15x161 + 5x160 = 4x256 + 15x16 + 5 = 1024 + 240 + 5 = 126910 
 b) Converter 34859 para a base 10. Solução: 3x93 + 4x92 + 8x91 + 5x90 = 3x729 + 4x81 + 8x9 + 5 = 2187 + 324 + 72 + 5 = 258810. 
 c) Converter 7G16 para a base 10. 
Solução: 
Uma base b dispõe dos algarismos entre 0 e (b-1). 
Assim, a base 16 dispõe dos algarismos 0 a F e portanto o símbolo G não pertence à representação hexadecimal. 
 d) Converter 1001,012 para a base 10. Solução: 1x23 + 0x22 + 0x21 + 1x20 + 0x2-1 + 1x2-2 = 8 + 0 + 0 + 1 + 0 + 0,25 = 9,2510 
 e) Converter 34,35 para a base 10. Solução: 3x51 + 4x50 + 3x5-1 = 15 + 4 + 0,6 = 19,610 f) Converter 38,38 para a base 10. Solução: Uma base b dispõe dos algarismos entre 0 e (b-1). 
Assim, a base 8 dispõe dos algarismos 0 a 7 e portanto o algarismo 8 não existe nessa base. 
A representação 38,3 não existe na base 8. 

 Conversão de Números da Base 10 para uma Base b qualquer 
A conversão de números da base dez para uma base qualquer emprega algoritmos que serão o inverso dos acima apresentados. Os algoritmos serão melhor entendidos pelo exemplo que por uma descrição formal. Vamos a seguir apresentar os algoritmos para a parte inteira e para a parte fracionária: Parte Inteira: O número decimal será dividido sucessivas vezes pela base; o resto de cada divisão ocupará sucessivamente as posições de ordem 0, 1, 2 e assim por diante até que o resto da última divisão (que resulta em qüociente zero) ocupe a posição de mais alta ordem. Veja o exemplo da conversão do número 1910 para a base 2:
Experimente fazer a conversão contrária (retornar para a base 10) e ver se o resultado está correto.

Parte Fracionária
Se o número for fracionário, a conversão se fará em duas etapas distintas: primeiro a parte inteira e depois a parte fracionária. Os algoritmos de conversão são diferentes. O algoritmo para a parte fracionária consiste de uma série de multiplicações sucessivas do número fracionário a ser convertido pela base; a parte inteira do resultado da primeira multiplicação será o valor da primeira casa fracionária e a parte fracionária será de novo multiplicada pela base; e assim por diante, até o resultado dar zero ou até encontrarmos o número de casas decimais desejado. Por exemplo, vamos converter 15,6510 para a base 2, com 5 e com 10 algarismos fracionários:

Obs.: Em ambos os casos, a conversão foi interrompida quando encontramos o número de algarismos fracionários solicitadas no enunciado. No entanto, como não encontramos resultado 0 em nenhuma das multiplicações, poderíamos continuar efetuando multiplicações indefinidamente até encontrar (se encontrarmos) resultado zero. No caso de interrupção por chegarmos ao número de dígitos especificado sem encontramos resultado zero, o resultado encontrado é aproximado e essa aproximação será função do número de algarismos que calcularmos. Fazendo a conversão inversa, encontraremos:

Com 5 algarismos fracionários:
Parte inteira: 11112 = 1510
Parte fracionária: 0,101002 = 1x2-1 + 0x2-2 + 1x2-3 + 0x2-4 + 0x2-5 = 0,5 + 0,125 = 0,62510


Com 10 algarismos fracionários:

Parte inteira: 11112 = 1510
Parte fracionária: 0,10100110012 = 1x2-1 + 0x2-2 + 1x2-3 + 0x2-4 + 0x2-5 + 1x2-6 + 1x2-7 + 0x2-8 + 0x2-9 + 1x2-10 = 1/2 + 1/8 + 1/64 + 1/128 + 1/1024 = 0,5 + 0,125 + 0,015625 + 0,0078125 + 0,0009765625 = 0,649414062510


Ou seja, podemos verificar (sem nenhuma surpresa) que, quanto maior número de algarismos forem considerados, melhor será a aproximação.


Conversão de Números entre duas Bases quaisquer
Para converter números de uma base b para uma outra base b' quaisquer (isso é, que não sejam os casos particulares anteriormente estudados), o processo prático utilizado é converter da base b dada para a base 10 e depois da base 10 para a base b' pedida.
Exemplo: Converter 435 para ( )9.
435 = (4 x 5 + 3)10 = 2310 ==> 23/9 = 2 (resto 5) logo 435 = 2310 = 259