"User Datagram Protocol" (UDP)

O protocolo IP não pode ser directamente usado pelas aplicações porque não utiliza números de porta. A funcionalidade acrescentada pelo UDP ao IP limita-se à definição de números de porta e "checksum" sobre todo o "datagrama" (incluindo dados) (RFC 768).

O UDP é um protocolo de troca de mensagens não fiável, não garantindo a entrega dos "datagramas", a ordem de entrega nem a eliminação de duplicados. Este tipo de fiabilidade é disponibilizada pelo TCP

O cabeçalho UDP é muito reduzido, é constituido por 4 campos de 16 bits cada:

	- Porta de Origem
	- Porta de Destino
	- Comprimento do "datagrama" (Cabeçalho UDP + Dados)
	- Checksum de todo o "datagrama" (Pseudo-cabeçalho IP + Cabeçalho UDP + Dados)

Os endereços IP de origem e destino encontram-se no cabeçalho do datagrama IP no qual os dados UDP são encapsulados sob o identificador 17.

Números de Porta

A definição de números de porta é fundamental para permitir mais do que um destino em cada máquina, num sistema operativo multi-processo cada processo que utiliza a rede requesita uma porta ("abertura da porta") que lhe fica associada, todos os dados que chegam à máquina com essa porta de destino são encaminhados para esse processo. Tanto o UDP como o TCP implementam números de porta, mas são independentes umas das outras.

O sistema operativo garante que numa dada máquina cada porta apenas é usada por um processo. As portas de número inferior a 1024 são reservadas para serviços especificos e conhecidas por "well known ports". Apresenta-se a seguir um extracto de um ficheiro /etc/services de um sistema UNIX, com as associações "well known port" - serviço:

#
# Network services, Internet style
#
# Note that it is presently the policy of IANA to assign a single well-known
# port number for both TCP and UDP; hence, most entries here have two entries
# even if the protocol doesn't support UDP operations.
# Updated from RFC 1340, ``Assigned Numbers'' (July 1992).  Not all ports
# are included, only the more common ones.
#
#	from: @(#)services	5.8 (Berkeley) 5/9/91
#	$Id: services,v 1.9 1993/11/08 19:49:15 cgd Exp $
#
tcpmux		1/tcp		# TCP port service multiplexer
echo		7/tcp
echo		7/udp
discard		9/tcp		sink null
discard		9/udp		sink null
systat		11/tcp		users
daytime		13/tcp
daytime		13/udp
netstat		15/tcp
qotd		17/tcp		quote
msp		18/tcp		# message send protocol
msp		18/udp		# message send protocol
chargen		19/tcp		ttytst source
chargen		19/udp		ttytst source
ftp		21/tcp
# 22 - unassigned
telnet		23/tcp
# 24 - private
smtp		25/tcp		mail
# 26 - unassigned
time		37/tcp		timserver
time		37/udp		timserver
rlp		39/udp		resource	# resource location
nameserver	42/tcp		name		# IEN 116
whois		43/tcp		nicname
domain		53/tcp		nameserver	# name-domain server
domain		53/udp		nameserver
mtp		57/tcp				# deprecated
bootps		67/tcp		# BOOTP server
bootps		67/udp
bootpc		68/tcp		# BOOTP client
bootpc		68/udp
tftp		69/udp
gopher		70/tcp		# Internet Gopher
gopher		70/udp
rje		77/tcp		netrjs
finger		79/tcp
www		80/tcp		http	# WorldWideWeb HTTP
www		80/udp			# HyperText Transfer Protocol
link		87/tcp		ttylink
kerberos	88/tcp		krb5	# Kerberos v5
kerberos	88/udp
supdup		95/tcp
# 100 - reserved
hostnames	101/tcp		hostname	# usually from sri-nic
iso-tsap	102/tcp		tsap		# part of ISODE.
csnet-ns	105/tcp		cso-ns	# also used by CSO name server
csnet-ns	105/udp		cso-ns
rtelnet		107/tcp		# Remote Telnet
rtelnet		107/udp
pop2		109/tcp		postoffice	# POP version 2
pop2		109/udp
pop3		110/tcp		# POP version 3
pop3		110/udp
sunrpc		111/tcp
sunrpc		111/udp
auth		113/tcp		tap ident authentication
sftp		115/tcp
........................

Os números de porta são o nível mais elevado de uma sequência de mecanismos de multiplexagem que permitem implementações paralelas das várias camadas:

  • No nível de ligação lógica é usado um identificador de protocolo de rede (E-TYPE), para o caso do IP o identificador é 800, de acordo com este identificador os dados são encaminhados para a camada de rede correta
  • Na camada de rede existe um identificador de protocolo, no caso do IP trata-se do campo "type", para o UDP o valor usado é 17, este identificador leva o nível IP a encaminhar os dados para o nível UDP.
  • Finalmente na última camada são definidos números de porta que permitem a coexistencia de multiplas implementações da camada de aplicação.

A figura seguinte ilustra este processo: