# Internet

Antes de seguirmos com opções de comunicação (IPC) para processos em computadores distintos, vamos entender um pouco o contexto da **Internet** e suas formas de comunicação.

### Um pouco de história da Internet

O conceito de internet, como conhecemos, foi criado na década de 60 com o intuito de resolver um problema de interconexão entre computadores em redes distintas.&#x20;

O objetivo era criar infra-estrutura para que a informação trafegasse rapidamente de um ponto remoto a outro no planeta, **de forma descentralizada**.

Durante o desenvolvimento do projeto, para evitar que cada rede tivesse sua própria forma de enviar mensagens, foi preciso delinear convenções e protocolos de comunicação dentro desta rede.&#x20;

Dentre diversos outros padrões e conjuntos de protocolos criados naquela época de *Protocol Wars*, cria-se também o **TCP/IP**, que acaba se tornando a *principal* suite de protocolos para a internet desde então.

### &#x20;TCP/IP

Um dos conjuntos de padrões para a internet que foi concebido e hoje amplamente utilizado é a Suite de *Protocolo de Internet*, ou **Internet Protocol Suite TCP/IP**, que define protocolos de comunicação entre diferentes computadores na rede global.&#x20;

No TCP/IP, são estabelecidas **4 camadas de comunicação**:

* **Application**: é o formato de mensagem que os diferentes programas irão interpretar. Exemplos como FTP, SSH e HTTP aparecem nesta camada.
* **Transport**: nesta camada, são definidas regras de como a informação será transportada. Se será sem conexão, como os datagram sockets, ou com conexão, como os stream sockets, dentre outras regras. Exemplos como TCP e UDP surgem nesta camada.
* **Internet**: cada processo na rede global precisa ter um identificador único, também chamado de *endereço de protocolo de internet*, ou **endereço de IP**. É esta camada que também define o formato da mensagem, se contém header, payload, dentre outros metadados.&#x20;
* **Link**: camada mais voltada para a parte de *roteamento*, especificações de canais de dados, dentre outros protocolos para a parte **física** da comunicação.

<figure><img src="/files/sSYcLgjCJJ6jzb5aT7YA" alt=""><figcaption></figcaption></figure>

Neste guia, para que possamos entender os fundamentos da Web, vamos focar na camada de Transporte e Aplicação, pois a camada de Internet é basicamente a definição do que temos por endereçamento IP e camada de Link refere-se a toda a parte física (WiFi, fibra ótica, rádio, etc).&#x20;

### Camada de Transporte

Uma vez que a informação trafegou pela Internet e chegou ao computador, como a mesma é enviada ao processo destinatário?

#### Sockets

Sabemos que *sockets* são utilizados como IPC dentro do sistema operacional. Com isto, no TCP/IP, uma solução seria **implementar a API de Sockets**, assim conseguiríamos manter a mesma *interface*, facilitando a evolução de sistemas construídos em cima da Internet.&#x20;

É com esta ideia que foi criado o projeto **Berkeley Sockets**, que é uma API que faz parte do *TCP/IP* mas que implementa *UNIX Sockets*. Desta forma, com Berkeley Sockets, conseguimos IPC de forma muito similar à UNIX Sockets.&#x20;

Tipos de sockets no TCP/IP:

* **TCP**: é a utilização de stream sockets no TCP/IP
* **UDP**: é a utilização de datagram sockets no TCP/IP

<figure><img src="/files/i9FlK6sf6rmGBrbTwpsS" alt=""><figcaption></figcaption></figure>

Nas próximas seções, vamos explorar TCP e UDP como formas de comunicação entre processos através de TCP/IP.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://web101.leandronsp.com/internet.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
