Capa de transport

De castillowiki
Saltar a: navegación, buscar

La capa de transport es troba entre la capa d'aplicació i la Capa de xarxa del model TCP/IP. Dins del model de referència OSI, la capa de transport es trobaria entre la capa de sessió i la capa de xarxa.

Funcions de la Capa de Transport

La capa de transport és la part del protocol TCP/IP encarregada de garantir la transmissió de les dades.

La Capa de xarxa transfereix datagrames entre dos ordinadors per la xarxa utilitzant com a identificadors les adreces IP. La capa de transport és l'encarregada d'afegir la noció de port. Amés, la capa de xarxa s'encarrega de enviar el paquet per distints enrutadors, topologíes i tecnologíes de transmisió. La capa de xarxa pot fallar en algun paquet o poden arrivar desordenats. De la recuperació dels paquets i la ordenació s'encarrega la capa de transport.

Dins d'una mateixa computadora hi pot haver més d'una aplicació que estigui accedint simultàniament a la xarxa. Per aquest motiu, quan s'envia un datagrama no en tenim prou amb l'adreça IP de la màquina de destí, necessitem també indicar a quina aplicació estem enviant la informació. Cada aplicació que estigui esperant un missatge utilitzarà un port diferent; estarà a l'espera d'un missatge en un port concret (escoltant un port). S'utilitzarà també un port concret per a l'enviament de missatges.

Els ports tenen una memòria intermitja (buffer, en anglès) situada entre els programes d'aplicació i la xarxa, de tal manera que les aplicacions transmeten la informació als ports, aquí es van emmagatzemant fins que pugui enviar-se per la xarxa. Un cop transmès arribarà al port destí on s'anirà guardant fins que l'aplicació estigui preparada per a rebre-la.

A més, la capa de transport proporciona un mecanisme per intercanviar les dades entre sistemes finals. El servei de transport orientat a connexió assegura que les dades s'entreguin lliures d'errors, en ordre i sense pèrdues ni duplicacions. És més, la capa de transport pot estar involucrada en la optimitzacció de l'ús dels serveis de xarxa. Es a dir; pot proporcionar la qualitat del servei que s'hagi solicitat. Per exemple, l'entitat de sessió pot solicitar una tasa d'error determinada, un retard màxim, una prioritat i un nivell de seguretat donat.

Existeixen dos protocols principals dins d'aquesta capa:

  • TCP (Transfer Control Protocol). Ofereix una transferència fiable i orientada a connexió.
  • UDP (User Datagram Protocol). Ofereix una transferència no fiable i no orientada a connexió.

El nivell de transport és l'encarregat de que les dades transferides entre emissor i receptor estiguin lliures d'errors. També és l'encarregat de controlar el flux de dades.

Nivells OSI i TCP/IP

Model de referència OSI

  • Nivell 4. Nivell de transport

Pila de protocols TCP/IP

  • Nivell 3. Nivell de transport

Els objectius són els mateixos que el nivell d'enllaç però aquest com la comunicació és entre màquines que no estan directament connectades.

NIvelltransport.png

És una capa de transició que connecta les aplicacions i/o usuaris amb la xarxa o el que és el mateix, entre els nivells orientats a la xarxa i els orientats a les aplicacions.

Treballa amb unitats de dades 4-PDU també anomenades TPDU o segments.

Té funcions similars al nivell d'enllaç (salt a salt) però entre dues màquines que no estan connectades directament (extrem a extrem) i s'encarrega de preparar les dades de les aplicacions per a la xarxa i assegurar-se que arribaran correctament al nivell de transport del destinatari.

Protocols: TCP (Transport Control Protocol) i UDP (User Datagram Protocol)

Funcions del nivell de transport

Té funcions similars al nivell d'enllaç (salt a salt) però entre dues màquines que no estan connectades directament (extrem a extrem)

  • Establiment de connexió: és opcional (UDP no ho implementa). Només s'aplica al serveis orientats a connexió
  • Orientat a connexió (Connection-oriented): La capa de xarxa o d'internet (nivell 3 OSI) és una capa que no proveeix de connexió. Protocols com TCP introdueixen el concepte de connexió en la capa de transport. Normalment és més senzill programar aplicacions orientades a connexió. S'estableix un camí virtual a través de qual es durà a terme la comunicació. Les dades s'envien de forma ordenada per aquest camí
  • Reoordenació de paquets: Opcional. Només s'aplica al serveis no orientats a connexió. No s'estableix cap camí i els paquets poden arribar desordenats
  • Ordre de lliurament (Same Order Delivery): La capa de xarxa no garanteix que els paquets arribin en el mateix ordre que han sortit de l'emissor. La capa de transport permet garantir l'ordre. La forma més senzilla és enumerar els paquets i reordenar-los al receptor.
  • Control d'errors: Les capçaleres (headers) del nivell 4 contenen dades redundants que permeten detectar errors en la transmissió Recuperació de caigudes de xarxa, reenviament de paquets, etc.
  • Dades fiables (Reliable data): Els paquets es poden perdre per la xarxa per problemes de congestió, error, interferències, etc. Alguns protocols de transport com TCP poden solucionar aquests problemes mitjançant tècniques com la detecció de paquets corruptes (checksums) i la retransmissió dels errors. Cal fer notar que les transmissions 100% sense errors no són possibles que el que s'intenta és que hi hagin el mínim d'errors no detectats.
  • Control de fluxe (Flow Control): La memòria dels dispositius de xarxa és limitada i sense un control de flux una computadora amb una alta capacitat d'enviament d'informació pot saturar fàcilment una computadora més lenta i amb poca memòria. Actualment això no es gaire problema ja que les memòries són relativament molt més barates que l'ample de banda. Aquest control el pot fer la capa de xarxa però quan no el fa és responsabilitat de la capa de transport.
  • Control de la congestió (Congestion avoidance): Quan els paquets és perden es tornen a retransmetre. En el cas de no tenir un control de congestió que permeti parar d'enviar durant un temps la informació per un node congestionat el control d'errors (reenviament) pot esdevenir un problema sense fi.
  • Orientació a bytes (Byte orientation): En comptes de treballar a nivell de paquets, la capa de tranport permet treballar a nivell de bytes, veiem la comunicació com un stream de bytes. Això facilita la programació per que una connexió de xarxa es pot tractar igual que les comunicacions d'entrada/sortida (fitxers, dispositius, etc.).
  • Ports/Multiplexació de connexions: Els ports són una forma essencial de permetre múltiples serveis en una mateixa localització (Adreça IP). NOTA: Els ports són part de la capa de transport en el model TCP/IP però de la cappa de sessió al model OSI.Permet tenir més d'una connexió oberta a través d'un mateix medi físic. S'utilitzen ports i el concepte de sockets.
  • Qualitat de servei. QoS (Quality of Service): Garanteix la fiabilitat i la qualitat del servei. Per exemple es pot reservar un ampla de banda mínim per a una connexió concreta
  • Primitives de transport: Poques aplicacions han de tractar les xarxes a un nivell inferior que el de transport i aquest nivell ja està implementat en els sistemes operatius. Però moltes han de utlitzar el les primitives per a fer ús del nivell de transport. Per aixó, aquestes han de ser fàcils d'utilitzar. Aquestes primitves són LISTEN, CONNECT, SEND, RECEIVE, DISCONNECT.

Protocol TCP

Connexions TCP

El protocol TCP és orientat a connexió. El següent diagrama mostra el protocol d'establiment d'una connexió:

300px-Tcp-handshake.png

i aquest altre diagrama mostra el procés de terminació d'una connexió:

300px-Fin de conexión TCP.svg.png

Acktcp.gif

  1. El host A que necessita inicialitzar una connexió envia un paquet SYN (Sincronitzar) amb un número de seqüència inicial proposat per al host de destinació B.
  2. Quan el host B rep el missatge SYN, retorna un paquet amb els SYN i ACK en la capçalera TCP (SYN-ACK).
  3. Quan el host A rep el SYN-ACK, envia ACK (reconeixement).
  4. Host B rep ACK i en aquesta etapa s'estableix la connexió.
  • En cas de que el host B no tinga el port disponible, no fà el segon pas, sino que envia un missatge de RST per rebujar la connexió.

Terminació de la connexió.

Quan la transmissió de dades es completa i el host vol acabar la connexió, s'inicia el procés de terminació. A diferència d'establiment de connexió TCP, que utilitza tres vies, la terminació utilitza quatre vies. La connexió s'acaba quan ambdues parts hagin acabat el procediment d'apagada mitjançant l'enviament d'un FIN i rebre un ACK.

  1. El host A, que necessita per acabar la connexió, envia un missatge especial amb el FIN (acabat), que indica que ha acabat d'enviar les dades.
  2. El host B, que rep el segment FIN, no finalitza la connexió sinó que entra en un estat de "tancament passiu" (CLOSE_WAIT) i envia el ACK per al FIN de tornada al host A. Ara el host B entra en estat LAST_ACK. En aquest punt el host B no acceptarà dades del host A, però pot continuar transmetre dades al host A. Si el host B no té dades per transmetre al host A, també acabarà la connexió mitjançant l'enviament d'segment FIN.
  3. Quan el host A rep l'ACK passat des del host B, entra en un estat (TIME_WAIT) i envia un ACK de tornada al host B.
  4. Host B rep l'ACK des del host A i tanca la connexió.

Segments transmission (windowing)

Un cop s'ha establert la comunicació, necessitem entendre com la transmissió de dades és gestionada i mantinguda. En xarxes TCP/IP, la transmissió entre màquines és controlada pel protocol TCP.

Que passa si els datagrames són enviats a més velocitat que la que pot processar el dispositiu? Els dispositius guarden els datagrames en unes memòries anomenades buffers. Els buffers no tenen però un espai il·limitat i si la seva capacitat és excedida aleshores el receptor començara a perdre paquets (DROP). Tots aquests paquets s'han de tornar a transmetre i aquesta és una de les raons per les quals el rendiment/velocitat de la transmissió pot disminuir.

Per solucionar aquest problema el protocol TCP utilitza un protocol de control de flux. El mecanisme de finestra (windowing) s'utilitza per controlar el flux de dades. Quan la connexió és establerta el receptor especifiquen el camp window la mida de la finestra TCP (vegeu capçalera TCP). La mida de la finestra (en bytes) representa la quantitat de dades rebudes que el receptor pot emmagatzemar al buffer. Aquesta mida s'indica al emissor en el paquet ACK. La mida de la finestra controla quin és el màxim d'informació que pot enviar el emissor abans de rebre una confirmació. El emissor envia la quantita d'informació especificada a la mida de la finestra i s'espera a rebre una confirmació abans d'enviar més dades. En les confirmacions es torna a enviar una mida de finestra actualitzada per a utilitzar-la en les següents transmissions.

La mida de la finestra tampoc es pot augmentar indefinidament. Si un sol paquets que s'envia dins d'una finestra ha de ser tornat a transmetre aleshores tota la finestra s'ha de tornar a enviar. En el cas d'un canal que perdi paquets, aicò pot afectar molt el rendiment

La mida de la finestra s'anirà augmentant mentrestant el receptor pugui processar els paquets. Un cop les velocitat dels dos receptors estan a la par la mida de la finestra ja no augmenta i en tot cas si el receptor es satura pot disminuir la mida de la finestra fins i tot fins a especificar una mida de zero. En aquest cas el emisor ha de parar d'enviar informació fins que la finestra torni a ser positiva.

TCP utilitza els algorismes Slow Start i Congestion Avoidance per tal de determinar quants paquets es poden enviar entre el emissor i el receptor o el que també s'anomena congestion window, és a dir la màxima quantitat de dades que es poden enviar abans de rebre un ACK (acknowledgment) per part del receptor. Si no es rep el ACK aleshores el emissor suposa que hi ha congestió a la xarxa i disminueix la velocitat de transmissió de paquets.

Cal tenir en compte que les configuracions per defecte de la finestra TCP poden ser molt poc adequades per a casos específics.


Estats TCP

Els podeu consultar amb

$ netstat --inet -t -a -c  | grep upc.es:www
tcp 1   0 casa-linux.local:48520  raiden.upc.es:www  CLOSE_WAIT 
tcp 0 687 casa-linux.local:48529  raiden.upc.es:www  ESTABLISHED
tcp 0   1 casa-linux.local:48522  raiden.upc.es:www  SYN_SENT   
tcp 0 709 casa-linux.local:48537  raiden.upc.es:www  ESTABLISHED
tcp 0   1 casa-linux.local:48522  raiden.upc.es:www  SYN_SENT   
tcp 1   1 casa-linux.local:48560  raiden.upc.es:www  LAST_ACK    
tcp 0   0 casa-linux.local:48556  raiden.upc.es:www  TIME_WAIT   
tcp 0   0 casa-linux.local:48556  raiden.upc.es:www  TIME_WAIT    
...............................................

El següent diagrama mostra els canvis d'estats segons els serveis OSI:

OSIEstats.png

I al diagrama següent podeu observar quin és l'evolució de l'establiment d'una connexió i els estats relacionats:

OSIEstats1.png
800px-TCP state diagram.png
  • ESTABLISHED: Connexió establerta.
  • SYN_SENT: El socket està intentant establir de forma activa una connexió.
  • SYN_RECV: S'ha rebut una petició de connexió des de la xarxa
  • FIN_WAIT1: El socket està tancat i la connexió s'està apagant.
  • FIN_WAIT2: El socket està tancat i la connexió està esperant l'apagament de la connexió remota.
  • TIME_WAIT: El socket està esperant la recepció de paquets de la xarxa tot i haver-se apagat la connexió.
  • CLOSED: El socket està apagat.
  • CLOSE_WAIT: La connexió remota s'ha apagat i s'està esperant que el socket es tanqui.
  • LAST_ACK: La connexió remota s'ha apagat i el socket està apagat però en espera d'un acknowledgement.
  • LISTEN: El socket està a l'espera de peticions de connexió.
  • CLOSING: Els dos sockets estan tancats però encara no s'han rebut totes les dades.

En les comunicacions sempre hi han errors (de programació, dispositius que es pengen, caigudes de xarxa, etc). Per evitar que els sockets es quedin penjats en una esta fins indeterminadament s'estableixen uns timeouts:

TimeOutsTCPConnections.jpg

Capçalera TCP

TCP Header
Offsets Octet 0 1 2 3
Octet Bit 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
0 0 Source port Destination port
4 32 Sequence number
8 64 Acknowledgment number (if ACK set)
12 96 Data offset Reserved
0 0 0
N
S
C
W
R
E
C
E
U
R
G
A
C
K
P
S
H
R
S
T
S
Y
N
F
I
N
Window Size
16 128 Checksum Urgent pointer (if URG set)
20
...
160
...
Options (if Data Offset > 5, padded at the end with "0" bytes if necessary)
...


  • Source port - bit 0 - 15. Port d'origen.
  • Destination port - bit 16 - 31. Port de destí.
  • Sequence Number - bit 32 - 63. El número de seqüencia són 32 bits dedicats a saber l'ordre dels paquets enviats. S'estableix en l'ACK al principi de la connexió.
  • Acknowledgment Number - bit 64 - 95. Número de confirmació de recepció.
  • Data Offset - bit 96 - 99. Indica la longitud del encapçalament TCP en quantitat de paraules de 32 bits.
  • Reserved - bit 100 - 103. Bits reservats que no s'utilitzen.
  • 3 bits per al ECN. El ECN és una amplicació del TCP per a controlar millor la congestió.
  • URG - bit 106. Se estableix en 1 si està actiu l'apuntador urgent.
  • ACK - bit 107. Si el bit ACK està a 1, farà cas del número de confirmació de recepció.
  • PSH -bit 108 Indica que el paquet s'ha d'enviar inmediatament i no esperar a completar un paquet més gran.
  • RST - bit 109 Per a resetejar la connexió.
  • SYN -bit 110 per a establir la connexió.
  • FIN - bit 111 Per a lliberar una connexió.
  • El control de flux de TCP s'efectua amb una finestra corredera de mida variable. El camp Window size Indica la mida que el receptor espera rebre.
  • Checksum 16 bits a partir del 128 Suma de verificació de que la capçalera està bé.
  • Les opcions serveixen per a coses que el encapçalament no pot indicar i els hosts poden necessitar. Per exemple, la càrrega útil.
  • Les opcions s'han d'omplir de 0 fins a arrivar a un múltiplo de 32 bits.
  • Al final estàn les dades.

Ports

Wikipedia: Ports

  • Un port és una connexió virtual que pot ser utilitzada per les aplicacions per intercanviar dades.
  • Els ports més comuns són els dels protocols TCP i UDP
  • Notació: Decimal (22, 80) o Hexadecimal
  • El fitxer /etc/services manté una llista de ports i els seus serveis associats.
  • Cada port esta associat a un servei per la IANA
  • Els ports per defecte dels serveis es poden canviar
  • Els ports s'identifiquen amb una paraula de 16 bits i poden ser 65535
  • El port 0 no es deu utilitzar. Està reservat per als programadors per a que signifique qualsevol port i el sistema operatiu puga escollirlo del rang de ports efímers.
  • Els ports efímers són utilitzats per a les connexions puntuals de eixida de programes clients. Quant termina la connexió, el port es tanca. [1]
  • Existeix un rang de ports efímers que, en Linux es pot consultar o modificar:
$ cat /proc/sys/net/ipv4/ip_local_port_range 
  • Fins al port 1024 són port reservats per als serveis conneguts de xarxa i sols poden ser oberts per root.

Una llista possible dels ports més habituals


Sockets

Dispositius virtuals de comunicacions bidireccionals.

Hi han tantes famílies de sockets com protocols. Els dos més importants:

  • Unix Domain Sockets
  • Internet Sockets (TCP, UDP i RAW)

Sockets Unix

Unix domain socket (UDS o IPC socket)

  • Són sockets virtuals, similars als sockets d'Internet que s'utilitzen en sistemes operatius POSIX per a la comunicació entre processos (IPC)
  • També anomenats POSIX Local IPC Sockets.

Components

  • Tipus: Datagrama o Stream. Camí absolut del fitxer

Sockets TCP/IP:

Components d'un socket d'Internet

  • Protocol (TCP, UDP, RAW IP)
  • Adreça IP local
  • Número de port local
  • Adreça IP remota
  • Número de port remot

Protocol UDP

UDP o User Datagram Protocol és un protocol de nivell 4 OSI (Nivell 3 TCP/IP) que ofereix serveis no orientats a connexió.

Utilitzat en serveis on la velocitat és important i ens podem permetre perdre part de la informació (aplicacions en temps real com veu IP, videoconferència, jocs online...)

És un dels protocol importants d'Internet

Segment UDP

SegmentUDP.png

TCP vs UDP

Els dos protocols de nivell de transport més utilitzats són TCP i UDP.

  • TCP és més fiable però més lent. S'utilitza en comunicacions on la integritat de les dades és vital (per exemple la transferència de fitxers).
  • UDP és menys fiable però més ràpid (aprox. 40% ). S'utilitza en aplicacions on la velocitat és important i ens podem permetrà la pèrdua d'algunes dades (P. ex. serveis en temps real com la telefonia IP o videoconferència)
TCPvsUDP.png

Network Address Translation (NAT)

NAT

Vegeu també

Enllaços externs

Gran part d'aquesta entrada està feta amb materials de [2]