% Diplomova prace: pos_buf
% Michal Trs
% Popis problému, specifikace cíle

Cílem této diplomové práce je analyzovat, navrhnout a realizovat obousměrný převod protokolu Packet over SONET na protokol FrameLink. V této kapitole je popsána technologie SONET/SDH a vysvětlena její architektura. Následuje rozbor technologie Packet over SONET (PoS) používané pro přenos paketů síťové vrstvy. Na závěr je uveden stručný popis implementační platformy a specifikace protokolu FrameLink.




\section{SONET/SDH}
SONET (Synchronous Optical NETwork) a SDH (Synchronous Digital Hierarchy) jsou technologie pro synchronní přenos digitalizovaných telefonních hovorů po optických vláknech. SONET je používán v Severní Americe, technologie SDH ve zbytku světa. Základní rychlost technologie SONET je 51,84 Mb/s a je označována jako OC-1.

SDH bylo specifikováno o několik let později normou ITU-T G.707 \cite{itu707}. V té době byla běžná rychlost 155,52 Mb/s (SONET OC-3). Proto je základní rychlost SDH 155,52 Mb/s, která je označována STM-1 (Synchronous Transport Module).

Ostatní rozdíly mezi oběma technologiemi jsou pouze formální (jiné termíny v definicích apod.), což zaručuje kompatibilitu a možnost propojení obou technologií. SONET/SDH podporuje celá řada výrobců (Alcatel, Cisco, Fujitsu, Lucent, Marconi, Nortel a dalších) a neustále se vyvíjí. Přenosové rychlosti se stále zvyšují. V dnešní době je široce rozšířeno OC-48 (2,5 Gb/s) a začíná se používat OC-192 (10 Gb/s). Podporované rychlosti spolu s označením v dané technologii jsou shrnuty v tabulce \ref{tab:sonet_speed}.

\begin{table}[!htp]
   \begin{center}
   \begin{tabular}{|l|l|l|}
      \hline
      Přenosová rychlost & SONET & SDH \\
      \hline \hline
      52 Mb/s & OC-1 & (STM-0) \\ \hline
      156 Mb/s & OC-3 & STM-1 \\ \hline
      467 Mb/s & OC-9 & - \\ \hline
      622 Mb/s & OC-12 & STM-4 \\ \hline
      933 Mb/s & OC-18 & - \\ \hline
      1.2 Gb/s & OC-24 & - \\ \hline
      1.9 Gb/s & OC-36 & - \\ \hline
      2.5 Gb/s & OC-48 & STM-16 \\ \hline
      5 Gb/s & OC-96 & - \\ \hline
      10 Gb/s & OC-192 & STM-64 \\ \hline
      40 Gbps & OC-768 & STM-256 \\ \hline
      160 Gbps & OC-3072 & - \\
      \hline
   \end{tabular}
   \end{center}
   \caption{Podporované rychlosti SONET/SDH}
   \label{tab:sonet_speed}
\end{table}

V diplomové práci je převzata terminologie používaná u sítě SONET, která je rozšířenější. Většina obrázků je však převzata z \cite{itu707}, což může čtenáře mást. Proto jsou v textu (při prvním výskytu) uvedeny vždy oba názvy (SDH a SONET).



\subsection{Architektura}
SONET/SDH představuje fyzickou vrstvu modelu OSI. Používá časový multiplex, kdy jsou skládány pomalejší datové toky do rychlejších. To je zajištěno Round-robin přepínáním N pomalejších toků v pravidelných intervalech do toku N-krát rychlejšího. Přepínáno je po $125 \mu$s, což je časový interval pro přenos jednoho rámce (nezáleží na použité rychlosti). Tato skutečnost je symbolicky znázorněna na obrázku \ref{img:xilinx-sonet_mux}. Datový tok má konstantní charakter na rozdíl od Ethernetu, kde dochází ke krátkodobým přetížením. Základní jednotkou je byte, v \cite{itu707} též označovaný jako oktet.

\begin{figure}[!htp]
\begin{center}
\scalebox{0.5}{\includegraphics{img/xilinx-sonet_mux.pdf}}
\end{center}
\caption{Round-robin přepínání toků (zdroj: Xilinx)}
\label{img:xilinx-sonet_mux}
\end{figure}

Rámec, který je přenášen každých $125 \mu$s, se skládá z hlavičky (SDH označení: SOH - Section Overhead, SONET označení: TOH - transport overhead) a dat (SDH označení: STM-N payload, SONET označení: SPE - synchronous payload envelope). Na obrázku \ref{img:sdh_frame} je znázorněn obecný rámec, kde za N dosadíme příslušné číslo určující rychlost STM (OC/3) a dostaneme velikost konkrétního rámce.

\begin{figure}[!htp]
\begin{center}
\scalebox{1.0}{\includegraphics{img/sdh_stmn_structure.pdf}}
\end{center}
\caption{Struktura obecného SONET/SDH rámce (zdroj: ITU-T)}
\label{img:sdh_frame}
\end{figure}

Rámec je zobrazen jako 2D struktura, protože nakreslit jej jako posloupnost bytů, nevešel by se na řádek. Tato 2D struktura je přenášena po řádcích zleva doprava od shora dolů, tím dochází k prokládání hlavičky a dat. To je podstatný rozdíl oproti Ethernetu, kde je nejprve poslána hlavička a poté data.

\begin{figure}[!htp]
\begin{center}
\scalebox{0.8}{\includegraphics{img/sdh_stm16_soh.pdf}}
\end{center}
\caption{SONET OC-48 TOH / SDH STM-16 SOH (zdroj: ITU-T)}
\label{img:stm16_soh}
\end{figure}



\subsection{Hlavička (TOH)}
Na obrázku \ref{img:stm16_soh} je již konkrétní TOH pro OC-48. Můžeme jej chápat jako 48x TOH základní rychlosti proložených byte po bytu, nebo jako jeden velký TOH s jiným významem bytů. Právě druhá možnost je vyžadována u PoS. Zde je rozdíl v terminologii mezi SONET a SDH. U SONETu se celá hlavička nazývá TOH. První 3 řádky se jmenují Section overhead (SOH), následuje jeden řádek ukazatel na SPE (data) a za ním 5 řádků Line overhead (LOH). U SDH se hlavička označuje Section overhead (SOH), první 3 řádky Regenerator Section Overhead (RSOH), pak následuje ukazatel na SPE a za ním je 5 řádků označovaných jako Multiplex Section Overhead (MSOH). Např. v \cite{rfc2615} jsou uvedeny veškeré rozdíly mezi SONET a SDH. V tabulce \ref{tab:toh_bytes} je seznam a popis jednotlivých položek (1 nebo více bytů) hlavičky.

\begin{table}[!htp]
   \begin{center}
   \begin{tabular}{|l|l|l|l|}
      \hline
      označení octetu & anglický název & význam & hodnota \\
      \hline \hline
      A1, A2 & Framing & začátek rámce & 0xF6, 0x28\\ \hline
      J0 & Regenerator Section Trace & ověření spojení & CRC-7 / 0x01 \\ \hline
      Z0 & Spare & nepoužit & \\ \hline
      B1 & BIP-8 & bitová parita pro sekci & BIP-8 \\ \hline
      E1, E2 & Orderwire & pořadí hlasových kanálů & \\ \hline
      F1 & User channel & rezervováno pro ISP & \\ \hline
      D1-D3 & DCCR & komunikační kanál 192 kb/s & \\ \hline
      B2 & BIP-24xN & bitová parita pro kanál & BIP-Nx24\\ \hline
      K1, K2 (b1-b5) & APS channel & ochrana přepínání sekcí & \\ \hline
      D4-D12 & DCCM & komunikační kanál 576 kb/s & \\ \hline
      S1 (b5-b8) & Synchronization status & synchronizační zpráva & \\ \hline
      M0, M1 & MS-REI & detekce vzdálené chyby & \\
      \hline
   \end{tabular}
   \end{center}
   \caption{Význam bytů v SONET/SDH hlavičce}
   \label{tab:toh_bytes}
\end{table}



\subsection{Data (SPE)}
\label{par:spe}
V SPE mohou být přenášena téměř libovolná data. Pro zařízení na síti je důležité, aby mezi nimi dokázala jednoduše rozlišit. To je zajištěno bytem C2 v Path Overhead (POH), který je součástí SPE. V tabulce \ref{tab:typ_spe_dat} jsou uvedeny hodnoty bytu C2 a jejich význam.

\begin{table}[!htp]
   \begin{center}
   \begin{tabular}{|l|l|}
      \hline
      Hodnota bytu C2 & Data v SPE \\
      \hline \hline
      0x02 & virtuální kontejner (VT) \\ \hline
      0x04 & DS-3 \\ \hline
      0x13 & ATM \\ \hline
      0x16 & PoS (HDLC) \\ \hline
      0xCF & PoS (PPP) \\
      \hline
   \end{tabular}
   \end{center}
   \caption{Typ přenášených dat}
   \label{tab:typ_spe_dat}
\end{table}

V následujícím výčtu krátce popíšu jednotlivé typy přenášených dat.

\begin{itemize}
   \item SONET umožňuje přenos pomalých datových (hlasových) toků v takzvaných virtuálních kontejnerech (Virtual Tributaries). VT mohou být různě velké, podle potřené šířky pásma. Každý VT má svůj POH ve kterém je opět byte C2. Existují 2 způsoby mapování virtuálních kontejnerů: fixní a plovoucí. Více informací najdete v \cite{itu707} str. 118.

   \item DS-3 představuje 672x 64 kb/s ISDN linek, které dávají výsledný datový tok 44,736 Mb/s. Pozorný čtenář si jistě všiml této nerovnosti: 672x 64 kb/s $<$ 44,736 Mb/s. Je způsobena rozcházející se frekvencí hodin v koncových zařízení. Tento trafik je umístěn do SPE-1 rámců, ale není umožněn přístup k pomalejším DS-2 až DS-0 tokům.

   \item ATM je založeno na buňkách fixní velikosti 53B, které nejsou kompatibilní s Ethernet rámci. ATM buňky mohou být efektivně vkládány do SONET rámce, ale při vyšších rychlostech je overhead ATM buněk značně velký (48B data a 5B overhead).

   \item Packet Over SONET poskytuje mechanismy pro přenos paketů přímo uvnitř SONET SPE prostřednictvím HDLC nebo PPP rámců. PPP/HDLC rámce jsou vkládány do spojených virtuálních kontejnerů označovaných VC-4-Xc. Kontejner obsahuje POH (path overhead) a dále již samotná data. Tento kontejner (obr. \ref{img:sdh_vc4c}) přímo odpovídá velikosti SPE do kterého je vložen.
\end{itemize}

\begin{figure}[!htp]
\begin{center}
\scalebox{0.8}{\includegraphics{img/sdh_vc4c.pdf}}
\end{center}
\caption{Virtuální kontejner VC-4-Xc (zdroj: ITU-T)}
\label{img:sdh_vc4c}
\end{figure}

% V následující podkapitole se budu zabývat podrobněji PoS.




\section{Packet Over SONET (PoS)}
\label{par:pos}
V současné době je PoS \cite{x36mti} specifikován v RFC 2615 \cite{rfc2615} (PPP over SONET), který nahradil RFC 1619 \cite{rfc1619}. Point-to-Point Protocol (PPP) představuje standardní metodu pro přenos datagramů různých typů po dvoubodových spojích.

\medskip
RFC 2515 \cite{rfc2615} definuje tyto požadavky:
\begin{itemize}
   \item Velikost virtuálního kontejneru VC stejná jako SPE (High-order Containment)
   \item Zarovnání po bytech (Octet Aligment)
   \item Kódování dat (Payload scrambling)
\end{itemize}

\medskip
Při vysílání je postup následující: IP paket $\to$ PPP rámec $\to$ výpočet kontrolního součtu $\to$ nahrazení bytů 7D a 7E $\to$ zakódování $\to$ vložení do SONET/SDH SPE (Synchronous payload envelope).

\medskip
Na příjmu je postup obdobný: Nalezení začátku SONET/SDH rámce $\to$ Dekódování $\to$ nahrazení dvojice bytů 7D XX, kde XX představuje libovolnou hodnotu $\to$ ověření kontrolního součtu $\to$ PPP rámec $\to$ IP paket

\medskip
Nyní se budu podrobně zabývat všemi kroky, které jsou nutné pro vložení libovolného paketu síťové vrstvy (IP, IPX, ...) do SONET/SDH rámce a jeho zpětnému vyjmutí.



\subsection{Vložení IP (paketu síťové vrstvy) do PPP}
PPP je stavový protokol definovaný v \cite{rfc1661}. Skládá se z těchto komponent: metoda pro zapouzdření paketů síťové vrstvy, protokol LCP (Link control protocol) a NCP (Network Control Protocol).


\subsubsection{Formát PPP rámce}
PPP rámec se skládá z pole \uv{protocol}, \uv{information} a případného zarovnání viz obrázek \ref{img:cisco_ppp_frame}. Pro rozlišení typu dat je určeno 16b číslo protokolu. Přenášené informace mohou mít velikost 0-64 kB. Zarovnání je použito, pokud je vyšším protokolem vyžadováno přenést přesnou, předem domluvenou MRU (Maximum-Receive-Unit) velikost dat.

\begin{figure}[!htp]
\begin{center}
\scalebox{1.0}{\includegraphics{img/cisco_ppp_frame.pdf}}
\end{center}
\caption{PPP rámec (zdroj Cisco)}
\label{img:cisco_ppp_frame}
\end{figure}


\subsubsection{Navázání spojení}
Před tím, než je možné přenášet data (pakety síťové vrstvy), je nutné navázat spojení. Jednotlivé fáze (stavy) navazování jsou patrné na diagramu \ref{img:ppp}. Přechod do další fáze je vyvolán přijetím LCP (Link Control Protocol) paketu, nebo zásahem administrátora.

\begin{figure}[!htp]
\begin{center}
\scalebox{0.8}{\includegraphics{img/ppp_state_diagram.pdf}}
\end{center}
\caption{Stavový diagram protokolu PPP}
\label{img:ppp}
\end{figure}

\medskip
Nyní krátce popíšu jednotlivé fáze protokolu.
\begin{itemize}
   \item Spojení přerušeno (Dead) \\
      Toto je počáteční a zároveň koncový stav automatu. Do stavu Establish se přejde buď po detekování nosné (CD - carrier detection) na úrovni vrstvy L1, nebo zásahem administrátora ze SW.
   \item Navázání spojení (Established) \\
      K navázání spojení je použit protokol LCP (více v RFC 1661 \cite{rfc1661}, strana 26). Po odeslání a následném přijetí Configure-Ack paketu automat přejde do další fáze.
   \item Ověření (Authenticate) \\
      Ověření obou spojů se používá hlavně při bezdrátové komunikaci, nebo obecně tam kde nemůžeme jinak zaručit pravost druhé strany. To ovšem není případ páteřních spojů. Více informací najdete v RFC 1661 v kapitole 3.5.
   \item Přenos paketů síťové vrstvy (Network) \\
      V tomto stavu dochází ke konfiguraci protokolu síťové vrstvy a vlastnímu přenosu dat. Ke konfiguraci je použit protokol NCP.
   \item Ukončení (Terminate) \\
      K ukončení přenosu může dojít z mnoha důvodů (ztráta nosiče, chyba při ověření, nízká kvalita spoje, time-out, zásah administrátora). Opět je použit protokol LCP, konkrétně typ paketu Terminate-Ack.
\end{itemize}



\subsection{Zapouzdření PPP do HDLC rámce}

HDLC protokol je použit k oddělení jednotlivých PPP rámců od sebe \cite{rfc1662}. Dále také zajišťuje ochranu proti chybám na linkové vrstvě, kterou PPP neposkytuje. V následujících třech podkapitolách popíšu formát HDLC rámců, výpočet kontrolního součtu a náhradu bytů 7E a 7D.


\subsubsection{Formát rámce}
Na obrázku \ref{img:cisco_HDLC_frame} je formát HDLC rámce s použitými hodnotami při vložení PPP rámce. Flagy mají hodnotu 0x7E a udávají začátek a konec rámce. Vysílací zařízení generuje tyto značky jako časovou výplň, pokud nejsou připravena žádná data k vysílání. Pole \uv{address} je obvykle nastaveno na 0xFF, protože každý rámec je typu broadcast. Pole \uv{control} má hodnotu 0x03 a značí PPP rámec. Za vloženými daty (PPP rámcem) následuje 16b nebo 32b kontrolní součet (FCS). Pro rychlosti OC-12 a vyšší je defaultně použit 32b kontrolní součet.

\begin{figure}[!htp]
\begin{center}
\scalebox{1.0}{\includegraphics{img/cisco_HDLC_frame.pdf}}
\end{center}
\caption{HDLC rámce (zdroj Cisco)}
\label{img:cisco_HDLC_frame}
\end{figure}


\subsubsection{Výpočet kontrolního součtu}
Pro výpočet kontrolního součtu je použito klasické CRC-32. Podle specifikace je možné také použít CRC-16, ale to není v případě rychlých sítí doporučeno. Kontrolní součet se počítá před náhradou bytů 0x7E a 0x7D z polí address, control a PPP rámce (information).


\subsubsection{Náhrada bytů 7E a 7D}
Jelikož je hodnota 0x7E použita k oddělení HDLC rámců, její výskyt uprostřed přenášených dat by způsobil předčasný konec rámce. Tato skutečnost je řešena náhradou bytů podle tabulky \ref{tab:hdlc_stuff}. Jednoduše řečeno je přidán prefix 0x7D a původní hodnota je xorovaná 0x20.

\begin{table}[!htp]
   \begin{center}
   \begin{tabular}{|l|l|}
      \hline
      byte v datech & Nahrazen za \\
      \hline \hline
      0x7E & 0x7D 0x5E \\ \hline
      0x7D & 0x7D 0x5D \\
      \hline
   \end{tabular}
   \end{center}
   \caption{Náhrada bytů v HDLC}
   \label{tab:hdlc_stuff}
\end{table}



\subsection{Kódování dat}
\label{par:kodovani}
SONET defaultně používá 7b polynom pro kódování hlasu, ten ovšem není dostatečný pro data. Data mohou obsahovat dlouhé sekvence 0 nebo 1 a proto by mohlo docházet ke ztrátám synchronizace. Z tohoto důvodu je přidáno další kódování, které je použito pouze pro data (payload).

SONET hlavička je zakódována polynomem $1+x^{6}+x^{7}$ s výjimkou TOH položek A1/A2 a J0 (viz. tabulka \ref{tab:toh_bytes}).

Pro data (payload) je použit delší polynom $x^{43}+1$, který je samo-synchronizační. Nemusíme před začátkem dekódování znát výchozí stav, ale prvních 43 přenesených bytů bude neplatných.

Byte C2 v POH udává zda je kódování pro payload zapnuto. Pokud ano má hodnotu 0x16 nebo 0xCF. Na následujícím obrázku \ref{img:cisco_payload_scrambling} je situace dobře patrná.

\begin{figure}[!htp]
\begin{center}
\scalebox{1.0}{\includegraphics{img/cisco_payload_scrambler.pdf}}
\end{center}
\caption{Kódování SONET rámce (zdroj Cisco)}
\label{img:cisco_payload_scrambling}
\end{figure}

Tento proud dat je již přímo vložen do SONET SPE.




\section{Implementační platforma}

Rodina karet Combo \cite{liberouter} je vyvíjena aktivitou Liberouter již několik let. Název Combo značí, že se jedná o 2 karty, které se přes konektory spojí v jeden celek.
Mateřská karta se přes konektory spojuje s tzv. interfacovou kartou (IFC). IFC karta existuje v několika verzích, které se od sebe liší síťovým interfacem. Označení MTX značí konektory RJ-45, SFP a SFPRO jsou osazeny optickými konektory.

První generace karet Combo6 je postavená na FPGA Xilinx Virtex 2. Je nasazena v živých sítích společně s aplikací FlowMon na mnoha univerzitách. Bohužel nedosahuje plného gigabitu a proto je v současné době nahrazena kartou Combo6X, která je označována za generaci 1.5. Ta opravuje několik chyb v kartách Combo6 a díky čipům Xilinx Virtex 2 Pro posouvá výkonnostní hranici ke zpracování 4 gigabitových toků současně. Součástí této generace jsou i nové IFC karty, ke kterým patří i Combo-4SFPRO/OC48.

V této době je vyvíjena zcela nová generace karet pod označením Combo v2. Bude obsahovat FPGA čip Xilinx Virtex 5 a moderní PCI Express sběrnici. Spolu s ní budou vyvinuty IFC karty pro zpracování až čtyř 10 Gb/s toků, případně 40 Gb/s toku. Dále budou dostupné karty pro SONET OC-192 a případně OC-768.



\subsection{Combo6x}
Mateřská karta, označovaná Combo6X, je vybavena interfacem PCI pro zasunutí do PC. Skládá se z velkého FPGA (aplikačního) a malého FPGA v roli PCI bridge. Dále obsahuje konektor pro vložení dynamické paměti, několik statických pamětí a paměť CAM. Přes PCI sběrnici je nahráván firmware do aplikačního FPGA a FPGA na interfacové kartě. Pro více informací o této kartě odkazuji na web projektu Liberouter \cite{liberouter}.



\subsection{Combo-4SFPRO/OC48}
Tato karta je na obrázku \ref{img:combo-sfpro_front} a \ref{img:combo-sfpro_rear}.

\begin{figure}[!htp]
\begin{center}
\scalebox{0.35}{\includegraphics{img/combo-4sfpro-front.png}}
\end{center}
\caption{COMBO-4SFPRO/OC48 karta (pohled shora)}
\label{img:combo-sfpro_front}
\end{figure}

\begin{figure}[!htp]
\begin{center}
\scalebox{0.35}{\includegraphics{img/combo-4sfpro-rear.png}}
\end{center}
\caption{COMBO-4SFPRO/OC48 karta (pohled zdola)}
\label{img:combo-sfpro_rear}
\end{figure}

\medskip
Karta obsahuje tyto komponenty:
\begin{itemize}
   \item Virtex II - XC2VP20
   \item 2xSSRAM - 2MB 512K36
   \item 1xEEPROM - 93S66
   \item 4xXFP klece
   \item konektor pro připojení k mateřské kartě
   \item hodinový krystal 155,52 MHz, který je vhodný pro OC-48 \mbox{(2.488 Gb / 16 = 155.52 MHz)}
\end{itemize}



Použité FPGA je \mbox{Xilinx Virtex 2 PRO-X (XC2VPX20)} od firmy Xilinx. Je vyráběno 150nm technologií a jedná se o velice zdařilou architekturu (narozdíl od \mbox{Virtex 4}). Toto FPGA obsahuje 8 vylepšených rychlých sériových linek Rocket IO-X, které umožňují přenos až 10.3125 Gb/s. S rezervou to stačí pro SONET OC-48 (tj. 2,5 Gb/s).

FPGA Xilinx XC2VPX20 se skládá z 22032 logických buněk a dále několika specializovaných bloků. Kromě již zmiňovaných Rocket IO-X rozhraní je to 88 BlockRAM pamětí (celkem \mbox{1584 kb}), 88 18x18 rychlých násobiček, 8 DCM (Digital clock managment) a 2 IBM PowerPC 405 procesory.

Rocket IO-X přímo podporuje tyto komunikační protokoly: \mbox{SONET OC-48}, \mbox{SONET OC-192}, \mbox{PCI Express}, Infiniband, XAUI (10-Gigabit Ethernet), XAUI (10-Gigabit Fibre Channel, \mbox{Aurora} (Xilinx protokol).




\section{FrameLink}
FrameLink (FL) je protokol pro přenos dat ve formě paketů, který byl vyvinut a je používán v projektu Liberouter. FL je inspirován protokolem LocalLink (LL) \cite{locallink} od firmy Xilinx, ale obsahuje několik změn.

\medskip
Mezi hlavní rozdíly proti LL patří:
\begin{itemize}
   \item data jsou vždy zarovnaná, v jednom slově nemůžou být dvě části paketu
   \item SOP\_N a EOP\_N ohraničuji každou část paketu
   \item není explicitní informace ve které části paketu jsme, je to dáno pořadím.
   \item používá se uspořádání bytů little endian
\end{itemize}


Ze změn oproti LL je patrné, že FL je jeho zjednodušenou verzí. To přináší jednodušší implementaci komponent, ale zároveň snižuje propustnost. Mezi jednotlivými pakety vznikají mezery, což je nepříjemné hlavně u velkých datových šířek. Stejně jako LL podporuje FL flow control, tj. datový přenos může pozastavit jak vysílací, tak přijímající strana.

Pro více informací viz Příloha \ref{par:framelink}.

