# CPCS-PDU

Common Part Convergence Sublayer - Protocol Data Unit (CPCS-PDU) è l'unità dati usata dallo strato protocollare AAL5 della tecnologia ATM.
Il compito della CPCS-PDU è quello di trasportare i dati provenienti dagli strati superiori, tipicamente pacchetti IP, ma non solo; infatti, quanto è stato appena detto vale se si usa la tecnica del VC-multiplexing per il trasporto di IP su ATM, però esiste la tecnica alternativa dell'Incapsulamento LLC-SNAP, in cui al pacchetto IP si aggiunge un certo overhead. Quest'ultimo è formato dai 3 byte dell'LLC-Header, dai 3 byte del campo OUI (Organization Unique Identifier) e dai 2 byte del campo PID (Payload Identifier). Comunque, possiamo dire che nel campo CPCS-PDU Payload verranno inseriti i dati provenienti dai protocolli superiori allo strato AAL-5, dopodiché questo protocollo aggiungerà la propria informazione di overhead indicata con il termine di Trailer (8 byte).
La trasmissione del pacchetto viene fatta inviando prima il payload e poi il trailer; perciò, se il trasporto avviene usando più celle ATM, il trailer arriverà a destinazione alla ricezione dell'ultima cella. Inoltre, la possibile frammentazione dei dati comporta la necessità di un meccanismo che permetta di capire quante sono le celle da ricevere prima di poter ricostruire l'unità dati trasmessa. La soluzione del problema prevede l'uso del flag AAU del campo Payload Type nell'intestazione delle celle ATM. Quando questo bit viene posto ad uno (AAU = 1) la cella in questione è l'ultima, mentre se il bit vale zero (AAU = 0) bisognerà continuare ad attendere l'arrivo delle celle successive.
Lo strato AAL (ATM Adaptation Layer) è quello che usa questo tipo di unità dati ed è suddiviso in due sottostrati: SAR (Segmenting and Reassembling Sublayer) e CS (Convergence Sublayer). Perciò, la CPCS-PDU è inserita nella SAR-PDU in modo da coincidere esattamente con essa. Infatti, il sottostrato SAR non introduce nessuna informazione di overhead aggiuntiva, però, la lunghezza di una SAR-PDU deve essere di 48 byte, quindi se la CPCS-PDU è un multiplo di 48 byte si avranno più SAR-PDU.

## La struttura

La struttura di una CPCS-PDU è la seguente:
| | | <----- TRAILER -----> | <----- TRAILER -----> | <----- TRAILER -----> | <----- TRAILER -----> |
| CPCS-PDU Payload | Padding | UU | CPI | Length | CRC |
* CPCS-PDU Payload [lunghezza variabile] - Trasporta i dati generati dai protocolli degli strati superiori ed ha una dimensione non prefissata. Infatti, la CPCS-PDU deve essere un multiplo intero di 48 byte in modo che essa possa facilmente essere inserita nel campo payload delle celle ATM.
* Padding [0-47 byte] - Si usa per riempire il campo dati con informazioni non utili, nel caso in cui non ci siano dati da trasportare, al fine di avere la lunghezza del pacchetto pari ad un multiplo di 48 byte.
* UU [8 bit] - (UU = user-to-user) Trasporta informazioni di utente da estremo ad estremo.
* CPI [8 bit] - (CPI = common part indicator) Viene usato per interpretare i campi rimanenti della CPCS-PDU.
* Length [16 bit] - Indica la lunghezza del campo payload.
* CRC [32 bit] - (CRC = cyclic redundancy check) Campo che trasporta i bit necessari per effettuare il controllo di errore in fase di ricezione e se questo fallisce la CPCS-PDU viene eliminata.