fixed mistakes in the first half
This commit is contained in:
+61
-61
@@ -24,24 +24,24 @@
|
||||
\BKM@entry{id=4,open,dest={6B693A746F63},srcline={148}}{5C3337365C3337375C3030304F5C303030625C303030735C303030615C30303068}
|
||||
\BKM@entry{id=5,open,dest={73656374696F6E2E31},srcline={159}}{5C3337365C3337375C303030315C3030305C3034305C3030305C3333325C303030765C3030306F5C30303064}
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {1}Úvod}{8}{section.1}\protected@file@percent }
|
||||
\BKM@entry{id=6,open,dest={73656374696F6E2E32},srcline={213}}{5C3337365C3337375C303030325C3030305C3034305C303030445C303030695C303030735C303030745C303030725C303030695C303030625C303030755C3030306F5C303030765C303030615C3030306E5C3030305C3335315C3030305C3034305C303030735C303030795C303030735C303030745C3030305C3335315C3030306D5C30303079}
|
||||
\BKM@entry{id=7,open,dest={73756273656374696F6E2E322E31},srcline={221}}{5C3337365C3337375C303030325C3030302E5C303030315C3030305C3034305C303030505C3030306F5C3030315C3031355C3030305C3335355C303030745C303030615C3030315C3031355C3030306F5C303030765C3030305C3334315C3030305C3034305C303030735C3030305C3335355C3030315C313435}
|
||||
\BKM@entry{id=6,open,dest={73656374696F6E2E32},srcline={214}}{5C3337365C3337375C303030325C3030305C3034305C303030445C303030695C303030735C303030745C303030725C303030695C303030625C303030755C3030306F5C303030765C303030615C3030306E5C3030305C3335315C3030305C3034305C303030735C303030795C303030735C303030745C3030305C3335315C3030306D5C30303079}
|
||||
\BKM@entry{id=7,open,dest={73756273656374696F6E2E322E31},srcline={222}}{5C3337365C3337375C303030325C3030302E5C303030315C3030305C3034305C303030505C3030306F5C3030315C3031355C3030305C3335355C303030745C303030615C3030315C3031355C3030306F5C303030765C3030305C3334315C3030305C3034305C303030735C3030305C3335355C3030315C313435}
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {2}Distribuované systémy}{9}{section.2}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {subsection}{\numberline {2.1}Počítačová síť}{9}{subsection.2.1}\protected@file@percent }
|
||||
\newlabel{sec:NetworkCommunication}{{2.1}{9}{Počítačová síť}{subsection.2.1}{}}
|
||||
\BKM@entry{id=8,open,dest={73756273756273656374696F6E2E322E312E31},srcline={230}}{5C3337365C3337375C303030325C3030302E5C303030315C3030302E5C303030315C3030305C3034305C3030304B5C3030306F5C3030306D5C303030755C3030306E5C303030695C3030306B5C303030615C303030635C30303065}
|
||||
\BKM@entry{id=9,open,dest={73756273756273656374696F6E2E322E312E32},srcline={243}}{5C3337365C3337375C303030325C3030302E5C303030315C3030302E5C303030325C3030305C3034305C3030304D5C3030306F5C303030645C303030655C3030306C5C303030795C3030305C3034305C303030705C303030725C3030306F5C3030305C3034305C3030306B5C3030306F5C3030306D5C303030755C3030306E5C303030695C3030306B5C303030615C303030635C30303069}
|
||||
\BKM@entry{id=8,open,dest={73756273756273656374696F6E2E322E312E31},srcline={231}}{5C3337365C3337375C303030325C3030302E5C303030315C3030302E5C303030315C3030305C3034305C3030304B5C3030306F5C3030306D5C303030755C3030306E5C303030695C3030306B5C303030615C303030635C30303065}
|
||||
\BKM@entry{id=9,open,dest={73756273756273656374696F6E2E322E312E32},srcline={244}}{5C3337365C3337375C303030325C3030302E5C303030315C3030302E5C303030325C3030305C3034305C3030304D5C3030306F5C303030645C303030655C3030306C5C303030795C3030305C3034305C303030705C303030725C3030306F5C3030305C3034305C3030306B5C3030306F5C3030306D5C303030755C3030306E5C303030695C3030306B5C303030615C303030635C30303069}
|
||||
\@writefile{toc}{\contentsline {subsubsection}{\numberline {2.1.1}Komunikace}{10}{subsubsection.2.1.1}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {subsubsection}{\numberline {2.1.2}Modely pro komunikaci}{10}{subsubsection.2.1.2}\protected@file@percent }
|
||||
\BKM@entry{id=10,open,dest={73756273656374696F6E2E322E32},srcline={264}}{5C3337365C3337375C303030325C3030302E5C303030325C3030305C3034305C303030415C303030725C303030635C303030685C303030695C303030745C303030655C3030306B5C303030745C303030755C303030725C303030795C3030305C3034305C303030735C303030795C303030735C303030745C3030305C3335315C3030306D5C3030315C313537}
|
||||
\BKM@entry{id=11,open,dest={73756273756273656374696F6E2E322E322E31},srcline={271}}{5C3337365C3337375C303030325C3030302E5C303030325C3030302E5C303030315C3030305C3034305C303030535C3030306F5C303030665C303030745C303030775C303030615C303030725C3030306F5C303030765C3030305C3334315C3030305C3034305C303030615C303030725C303030635C303030685C303030695C303030745C303030655C3030306B5C303030745C303030755C303030725C30303061}
|
||||
\BKM@entry{id=10,open,dest={73756273656374696F6E2E322E32},srcline={265}}{5C3337365C3337375C303030325C3030302E5C303030325C3030305C3034305C303030415C303030725C303030635C303030685C303030695C303030745C303030655C3030306B5C303030745C303030755C303030725C303030795C3030305C3034305C303030735C303030795C303030735C303030745C3030305C3335315C3030306D5C3030315C313537}
|
||||
\BKM@entry{id=11,open,dest={73756273756273656374696F6E2E322E322E31},srcline={272}}{5C3337365C3337375C303030325C3030302E5C303030325C3030302E5C303030315C3030305C3034305C303030535C3030306F5C303030665C303030745C303030775C303030615C303030725C3030306F5C303030765C3030305C3334315C3030305C3034305C303030615C303030725C303030635C303030685C303030695C303030745C303030655C3030306B5C303030745C303030755C303030725C30303061}
|
||||
\@writefile{toc}{\contentsline {subsection}{\numberline {2.2}Architektury systémů}{11}{subsection.2.2}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {subsubsection}{\numberline {2.2.1}Softwarová architektura}{11}{subsubsection.2.2.1}\protected@file@percent }
|
||||
\BKM@entry{id=12,open,dest={73756273756273656374696F6E2E322E322E32},srcline={287}}{5C3337365C3337375C303030325C3030302E5C303030325C3030302E5C303030325C3030305C3034305C303030535C303030795C303030735C303030745C3030305C3335315C3030306D5C3030306F5C303030765C3030305C3335315C3030305C3034305C303030615C303030725C303030635C303030685C303030695C303030745C303030655C3030306B5C303030745C303030755C303030725C30303079}
|
||||
\BKM@entry{id=12,open,dest={73756273756273656374696F6E2E322E322E32},srcline={288}}{5C3337365C3337375C303030325C3030302E5C303030325C3030302E5C303030325C3030305C3034305C303030535C303030795C303030735C303030745C3030305C3335315C3030306D5C3030306F5C303030765C3030305C3335315C3030305C3034305C303030615C303030725C303030635C303030685C303030695C303030745C303030655C3030306B5C303030745C303030755C303030725C30303079}
|
||||
\@writefile{toc}{\contentsline {subsubsection}{\numberline {2.2.2}Systémové architektury}{12}{subsubsection.2.2.2}\protected@file@percent }
|
||||
\newlabel{sec:system_architecture}{{2.2.2}{12}{Systémové architektury}{subsubsection.2.2.2}{}}
|
||||
\BKM@entry{id=13,open,dest={73656374696F6E2E33},srcline={302}}{5C3337365C3337375C303030335C3030305C3034305C303030505C303030725C3030306F5C303030745C3030306F5C3030306B5C3030306F5C3030306C5C30303079}
|
||||
\BKM@entry{id=14,open,dest={73756273656374696F6E2E332E31},srcline={318}}{5C3337365C3337375C303030335C3030302E5C303030315C3030305C3034305C303030525C3030306F5C303030645C303030695C3030306E5C303030615C3030305C3034305C303030705C303030725C3030306F5C303030745C3030306F5C3030306B5C3030306F5C3030306C5C3030315C3135375C3030305C3034305C303030545C303030435C303030505C3030302F5C303030495C30303050}
|
||||
\BKM@entry{id=13,open,dest={73656374696F6E2E33},srcline={303}}{5C3337365C3337375C303030335C3030305C3034305C303030505C303030725C3030306F5C303030745C3030306F5C3030306B5C3030306F5C3030306C5C30303079}
|
||||
\BKM@entry{id=14,open,dest={73756273656374696F6E2E332E31},srcline={319}}{5C3337365C3337375C303030335C3030302E5C303030315C3030305C3034305C303030525C3030306F5C303030645C303030695C3030306E5C303030615C3030305C3034305C303030705C303030725C3030306F5C303030745C3030306F5C3030306B5C3030306F5C3030306C5C3030315C3135375C3030305C3034305C303030545C303030435C303030505C3030302F5C303030495C30303050}
|
||||
\@writefile{lof}{\contentsline {figure}{\numberline {1}{\ignorespaces Vrstvená architektura}}{13}{figure.1}\protected@file@percent }
|
||||
\newlabel{fig:layer_architecture}{{1}{13}{Vrstvená architektura}{figure.1}{}}
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {3}Protokoly}{13}{section.3}\protected@file@percent }
|
||||
@@ -50,78 +50,78 @@
|
||||
\abx@aux@segm{0}{0}{computer_networks}
|
||||
\@writefile{lof}{\contentsline {figure}{\numberline {2}{\ignorespaces Komunikace vrstev TCP/IP}}{14}{figure.2}\protected@file@percent }
|
||||
\newlabel{fig:tcpip}{{2}{14}{Komunikace vrstev TCP/IP}{figure.2}{}}
|
||||
\BKM@entry{id=15,open,dest={73756273656374696F6E2E332E32},srcline={357}}{5C3337365C3337375C303030335C3030302E5C303030325C3030305C3034305C303030505C303030725C3030306F5C303030745C3030306F5C3030306B5C3030306F5C3030306C5C303030795C3030305C3034305C303030765C3030305C3034305C303030615C303030705C3030306C5C303030695C3030306B5C303030615C3030315C3031355C3030306E5C3030305C3335355C3030305C3034305C303030765C303030725C303030735C303030745C303030765C3030315C303333}
|
||||
\BKM@entry{id=16,open,dest={73756273756273656374696F6E2E332E322E31},srcline={361}}{5C3337365C3337375C303030335C3030302E5C303030325C3030302E5C303030315C3030305C3034305C303030485C303030545C303030545C30303050}
|
||||
\BKM@entry{id=15,open,dest={73756273656374696F6E2E332E32},srcline={358}}{5C3337365C3337375C303030335C3030302E5C303030325C3030305C3034305C303030505C303030725C3030306F5C303030745C3030306F5C3030306B5C3030306F5C3030306C5C303030795C3030305C3034305C303030765C3030305C3034305C303030615C303030705C3030306C5C303030695C3030306B5C303030615C3030315C3031355C3030306E5C3030305C3335355C3030305C3034305C303030765C303030725C303030735C303030745C303030765C3030315C303333}
|
||||
\BKM@entry{id=16,open,dest={73756273756273656374696F6E2E332E322E31},srcline={362}}{5C3337365C3337375C303030335C3030302E5C303030325C3030302E5C303030315C3030305C3034305C303030485C303030545C303030545C30303050}
|
||||
\@writefile{toc}{\contentsline {subsection}{\numberline {3.2}Protokoly v aplikační vrstvě}{15}{subsection.3.2}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.2.1}HTTP}{15}{subsubsection.3.2.1}\protected@file@percent }
|
||||
\BKM@entry{id=17,open,dest={73756273756273656374696F6E2E332E322E32},srcline={382}}{5C3337365C3337375C303030335C3030302E5C303030325C3030302E5C303030325C3030305C3034305C303030485C303030545C303030545C303030505C3030302F5C30303033}
|
||||
\BKM@entry{id=18,open,dest={73756273656374696F6E2E332E33},srcline={408}}{5C3337365C3337375C303030335C3030302E5C303030335C3030305C3034305C303030505C303030725C3030306F5C303030745C3030306F5C3030306B5C3030306F5C3030306C5C303030795C3030305C3034305C303030765C3030305C3034305C303030745C303030725C303030615C3030306E5C303030735C303030705C3030306F5C303030725C303030745C3030306E5C3030305C3335355C3030305C3034305C303030765C303030725C303030735C303030745C303030765C3030315C303333}
|
||||
\BKM@entry{id=19,open,dest={73756273756273656374696F6E2E332E332E31},srcline={414}}{5C3337365C3337375C303030335C3030302E5C303030335C3030302E5C303030315C3030305C3034305C303030545C303030435C30303050}
|
||||
\BKM@entry{id=17,open,dest={73756273756273656374696F6E2E332E322E32},srcline={383}}{5C3337365C3337375C303030335C3030302E5C303030325C3030302E5C303030325C3030305C3034305C303030485C303030545C303030545C303030505C3030302F5C30303033}
|
||||
\BKM@entry{id=18,open,dest={73756273656374696F6E2E332E33},srcline={409}}{5C3337365C3337375C303030335C3030302E5C303030335C3030305C3034305C303030505C303030725C3030306F5C303030745C3030306F5C3030306B5C3030306F5C3030306C5C303030795C3030305C3034305C303030765C3030305C3034305C303030745C303030725C303030615C3030306E5C303030735C303030705C3030306F5C303030725C303030745C3030306E5C3030305C3335355C3030305C3034305C303030765C303030725C303030735C303030745C303030765C3030315C303333}
|
||||
\BKM@entry{id=19,open,dest={73756273756273656374696F6E2E332E332E31},srcline={415}}{5C3337365C3337375C303030335C3030302E5C303030335C3030302E5C303030315C3030305C3034305C303030545C303030435C30303050}
|
||||
\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.2.2}HTTP/3}{16}{subsubsection.3.2.2}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {subsection}{\numberline {3.3}Protokoly v transportní vrstvě}{16}{subsection.3.3}\protected@file@percent }
|
||||
\@writefile{lof}{\contentsline {figure}{\numberline {3}{\ignorespaces Vizualizace HTTP/2 blokování}}{17}{figure.3}\protected@file@percent }
|
||||
\newlabel{fig:http_blocking}{{3}{17}{Vizualizace HTTP/2 blokování}{figure.3}{}}
|
||||
\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.3.1}TCP}{17}{subsubsection.3.3.1}\protected@file@percent }
|
||||
\BKM@entry{id=20,open,dest={73756273756273656374696F6E2E332E332E32},srcline={428}}{5C3337365C3337375C303030335C3030302E5C303030335C3030302E5C303030325C3030305C3034305C303030555C303030445C30303050}
|
||||
\BKM@entry{id=21,open,dest={73756273756273656374696F6E2E332E332E33},srcline={436}}{5C3337365C3337375C303030335C3030302E5C303030335C3030302E5C303030335C3030305C3034305C303030515C303030555C303030495C30303043}
|
||||
\BKM@entry{id=20,open,dest={73756273756273656374696F6E2E332E332E32},srcline={429}}{5C3337365C3337375C303030335C3030302E5C303030335C3030302E5C303030325C3030305C3034305C303030555C303030445C30303050}
|
||||
\BKM@entry{id=21,open,dest={73756273756273656374696F6E2E332E332E33},srcline={437}}{5C3337365C3337375C303030335C3030302E5C303030335C3030302E5C303030335C3030305C3034305C303030515C303030555C303030495C30303043}
|
||||
\abx@aux@cite{0}{quic}
|
||||
\abx@aux@segm{0}{0}{quic}
|
||||
\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.3.2}UDP}{18}{subsubsection.3.3.2}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.3.3}QUIC}{18}{subsubsection.3.3.3}\protected@file@percent }
|
||||
\@writefile{lof}{\contentsline {figure}{\numberline {4}{\ignorespaces QUIC handshake}}{20}{figure.4}\protected@file@percent }
|
||||
\newlabel{fig:quic_handshake}{{4}{20}{QUIC handshake}{figure.4}{}}
|
||||
\BKM@entry{id=22,open,dest={73656374696F6E2E34},srcline={576}}{5C3337365C3337375C303030345C3030305C3034305C303030485C303030725C30303061}
|
||||
\BKM@entry{id=23,open,dest={73756273656374696F6E2E342E31},srcline={591}}{5C3337365C3337375C303030345C3030302E5C303030315C3030305C3034305C303030455C3030306E5C303030675C303030695C3030306E5C30303065}
|
||||
\BKM@entry{id=22,open,dest={73656374696F6E2E34},srcline={577}}{5C3337365C3337375C303030345C3030305C3034305C303030485C303030725C30303061}
|
||||
\BKM@entry{id=23,open,dest={73756273656374696F6E2E342E31},srcline={592}}{5C3337365C3337375C303030345C3030302E5C303030315C3030305C3034305C303030455C3030306E5C303030675C303030695C3030306E5C30303065}
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {4}Hra}{21}{section.4}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {subsection}{\numberline {4.1}Engine}{21}{subsection.4.1}\protected@file@percent }
|
||||
\BKM@entry{id=24,open,dest={73756273756273656374696F6E2E342E312E31},srcline={625}}{5C3337365C3337375C303030345C3030302E5C303030315C3030302E5C303030315C3030305C3034305C303030465C303030795C3030307A5C303030695C303030635C3030306B5C3030305C3337355C3030305C3034305C303030655C3030306E5C303030675C303030695C3030306E5C30303065}
|
||||
\BKM@entry{id=25,open,dest={73756273756273656374696F6E2E342E312E32},srcline={633}}{5C3337365C3337375C303030345C3030302E5C303030315C3030302E5C303030325C3030305C3034305C303030565C303030795C3030306B5C303030725C303030655C303030735C3030306C5C3030306F5C303030765C3030305C3334315C3030306E5C3030305C333535}
|
||||
\BKM@entry{id=24,open,dest={73756273756273656374696F6E2E342E312E31},srcline={626}}{5C3337365C3337375C303030345C3030302E5C303030315C3030302E5C303030315C3030305C3034305C303030465C303030795C3030307A5C303030695C303030635C3030306B5C3030305C3337355C3030305C3034305C303030655C3030306E5C303030675C303030695C3030306E5C30303065}
|
||||
\BKM@entry{id=25,open,dest={73756273756273656374696F6E2E342E312E32},srcline={634}}{5C3337365C3337375C303030345C3030302E5C303030315C3030302E5C303030325C3030305C3034305C303030565C303030795C3030306B5C303030725C303030655C303030735C3030306C5C3030306F5C303030765C3030305C3334315C3030306E5C3030305C333535}
|
||||
\@writefile{lof}{\contentsline {figure}{\numberline {5}{\ignorespaces Architektura hry pro jednoho hráče}}{22}{figure.5}\protected@file@percent }
|
||||
\newlabel{fig:single_player_game}{{5}{22}{Architektura hry pro jednoho hráče}{figure.5}{}}
|
||||
\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.1.1}Fyzický engine}{22}{subsubsection.4.1.1}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.1.2}Vykreslování}{22}{subsubsection.4.1.2}\protected@file@percent }
|
||||
\BKM@entry{id=26,open,dest={73756273756273656374696F6E2E342E312E33},srcline={641}}{5C3337365C3337375C303030345C3030302E5C303030315C3030302E5C303030335C3030305C3034305C303030455C3030306E5C303030745C303030695C303030745C303030795C3030302D5C303030435C3030306F5C3030306D5C303030705C3030306F5C3030306E5C303030655C3030306E5C303030745C3030302D5C303030535C303030795C303030735C303030745C303030655C3030306D}
|
||||
\BKM@entry{id=26,open,dest={73756273756273656374696F6E2E342E312E33},srcline={642}}{5C3337365C3337375C303030345C3030302E5C303030315C3030302E5C303030335C3030305C3034305C303030455C3030306E5C303030745C303030695C303030745C303030795C3030302D5C303030435C3030306F5C3030306D5C303030705C3030306F5C3030306E5C303030655C3030306E5C303030745C3030302D5C303030535C303030795C303030735C303030745C303030655C3030306D}
|
||||
\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.1.3}Entity-Component-System}{23}{subsubsection.4.1.3}\protected@file@percent }
|
||||
\newlabel{code:entt}{{1}{23}{Příklad použití knihovny Entt}{lstlisting.1}{}}
|
||||
\@writefile{lol}{\contentsline {lstlisting}{\numberline {1}Příklad použití knihovny Entt}{23}{lstlisting.1}\protected@file@percent }
|
||||
\BKM@entry{id=27,open,dest={73756273756273656374696F6E2E342E312E34},srcline={682}}{5C3337365C3337375C303030345C3030302E5C303030315C3030302E5C303030345C3030305C3034305C303030495C3030306D5C303030475C303030755C30303069}
|
||||
\BKM@entry{id=27,open,dest={73756273756273656374696F6E2E342E312E34},srcline={683}}{5C3337365C3337375C303030345C3030302E5C303030315C3030302E5C303030345C3030305C3034305C303030495C3030306D5C303030475C303030755C30303069}
|
||||
\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.1.4}ImGui}{24}{subsubsection.4.1.4}\protected@file@percent }
|
||||
\BKM@entry{id=28,open,dest={73656374696F6E2E35},srcline={701}}{5C3337365C3337375C303030355C3030305C3034305C303030485C303030725C303030615C3030305C3034305C303030765C3030305C3335355C303030635C303030655C3030305C3034305C303030685C303030725C3030305C3334315C3030315C3031355C3030315C313537}
|
||||
\BKM@entry{id=29,open,dest={73756273656374696F6E2E352E31},srcline={722}}{5C3337365C3337375C303030355C3030302E5C303030315C3030305C3034305C303030535C303030655C303030725C303030765C303030655C30303072}
|
||||
\BKM@entry{id=28,open,dest={73656374696F6E2E35},srcline={702}}{5C3337365C3337375C303030355C3030305C3034305C303030485C303030725C303030615C3030305C3034305C303030765C3030305C3335355C303030635C303030655C3030305C3034305C303030685C303030725C3030305C3334315C3030315C3031355C3030315C313537}
|
||||
\BKM@entry{id=29,open,dest={73756273656374696F6E2E352E31},srcline={723}}{5C3337365C3337375C303030355C3030302E5C303030315C3030305C3034305C303030535C303030655C303030725C303030765C303030655C30303072}
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {5}Hra více hráčů}{25}{section.5}\protected@file@percent }
|
||||
\BKM@entry{id=30,open,dest={73756273756273656374696F6E2E352E312E31},srcline={732}}{5C3337365C3337375C303030355C3030302E5C303030315C3030302E5C303030315C3030305C3034305C303030525C303030655C303030675C303030695C303030735C303030745C303030725C3030305C3034305C3030306B5C3030306C5C303030695C303030655C3030306E5C303030745C3030315C313537}
|
||||
\BKM@entry{id=30,open,dest={73756273756273656374696F6E2E352E312E31},srcline={733}}{5C3337365C3337375C303030355C3030302E5C303030315C3030302E5C303030315C3030305C3034305C303030525C303030655C303030675C303030695C303030735C303030745C303030725C3030305C3034305C3030306B5C3030306C5C303030695C303030655C3030306E5C303030745C3030315C313537}
|
||||
\@writefile{lof}{\contentsline {figure}{\numberline {6}{\ignorespaces Architektura hry pro více hráčů}}{26}{figure.6}\protected@file@percent }
|
||||
\newlabel{fig:multi_player_game}{{6}{26}{Architektura hry pro více hráčů}{figure.6}{}}
|
||||
\@writefile{toc}{\contentsline {subsection}{\numberline {5.1}Server}{26}{subsection.5.1}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {subsubsection}{\numberline {5.1.1}Registr klientů}{26}{subsubsection.5.1.1}\protected@file@percent }
|
||||
\BKM@entry{id=31,open,dest={73756273756273656374696F6E2E352E312E32},srcline={738}}{5C3337365C3337375C303030355C3030302E5C303030315C3030302E5C303030325C3030305C3034305C303030535C303030655C303030725C303030765C303030655C303030725C3030305C3034305C303030525C303030655C303030705C3030306C5C303030695C3030306B5C3030305C3334315C303030745C3030306F5C303030725C30303075}
|
||||
\BKM@entry{id=32,open,dest={73756273756273656374696F6E2E352E312E33},srcline={742}}{5C3337365C3337375C303030355C3030302E5C303030315C3030302E5C303030335C3030305C3034305C303030535C303030705C303030725C3030305C3334315C303030765C303030615C3030305C3034305C3030307A5C3030305C3334315C3030306A5C3030306D5C3030315C313537}
|
||||
\BKM@entry{id=33,open,dest={73756273656374696F6E2E352E32},srcline={752}}{5C3337365C3337375C303030355C3030302E5C303030325C3030305C3034305C3030304B5C3030306C5C303030695C303030655C3030306E5C30303074}
|
||||
\BKM@entry{id=34,open,dest={73756273756273656374696F6E2E352E322E31},srcline={756}}{5C3337365C3337375C303030355C3030302E5C303030325C3030302E5C303030315C3030305C3034305C3030304B5C3030306C5C303030695C303030655C3030306E5C303030745C3030305C3034305C303030525C303030655C303030705C3030306C5C303030695C3030306B5C3030305C3334315C303030745C3030306F5C303030725C30303075}
|
||||
\BKM@entry{id=35,open,dest={73756273756273656374696F6E2E352E322E32},srcline={760}}{5C3337365C3337375C303030355C3030302E5C303030325C3030302E5C303030325C3030305C3034305C303030495C3030306E5C303030745C303030655C303030725C303030705C3030306F5C3030306C5C303030615C303030635C30303065}
|
||||
\BKM@entry{id=31,open,dest={73756273756273656374696F6E2E352E312E32},srcline={739}}{5C3337365C3337375C303030355C3030302E5C303030315C3030302E5C303030325C3030305C3034305C303030535C303030655C303030725C303030765C303030655C303030725C3030305C3034305C303030525C303030655C303030705C3030306C5C303030695C3030306B5C3030305C3334315C303030745C3030306F5C303030725C30303075}
|
||||
\BKM@entry{id=32,open,dest={73756273756273656374696F6E2E352E312E33},srcline={743}}{5C3337365C3337375C303030355C3030302E5C303030315C3030302E5C303030335C3030305C3034305C303030535C303030705C303030725C3030305C3334315C303030765C303030615C3030305C3034305C3030307A5C3030305C3334315C3030306A5C3030306D5C3030315C313537}
|
||||
\BKM@entry{id=33,open,dest={73756273656374696F6E2E352E32},srcline={753}}{5C3337365C3337375C303030355C3030302E5C303030325C3030305C3034305C3030304B5C3030306C5C303030695C303030655C3030306E5C30303074}
|
||||
\BKM@entry{id=34,open,dest={73756273756273656374696F6E2E352E322E31},srcline={757}}{5C3337365C3337375C303030355C3030302E5C303030325C3030302E5C303030315C3030305C3034305C3030304B5C3030306C5C303030695C303030655C3030306E5C303030745C3030305C3034305C303030525C303030655C303030705C3030306C5C303030695C3030306B5C3030305C3334315C303030745C3030306F5C303030725C30303075}
|
||||
\BKM@entry{id=35,open,dest={73756273756273656374696F6E2E352E322E32},srcline={761}}{5C3337365C3337375C303030355C3030302E5C303030325C3030302E5C303030325C3030305C3034305C303030495C3030306E5C303030745C303030655C303030725C303030705C3030306F5C3030306C5C303030615C303030635C30303065}
|
||||
\@writefile{toc}{\contentsline {subsubsection}{\numberline {5.1.2}Server Replikátoru}{27}{subsubsection.5.1.2}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {subsubsection}{\numberline {5.1.3}Správa zájmů}{27}{subsubsection.5.1.3}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {subsection}{\numberline {5.2}Klient}{27}{subsection.5.2}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {subsubsection}{\numberline {5.2.1}Klient Replikátoru}{27}{subsubsection.5.2.1}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {subsubsection}{\numberline {5.2.2}Interpolace}{27}{subsubsection.5.2.2}\protected@file@percent }
|
||||
\BKM@entry{id=36,open,dest={73756273756273656374696F6E2E352E322E33},srcline={768}}{5C3337365C3337375C303030355C3030302E5C303030325C3030302E5C303030335C3030305C3034305C303030525C3030306F5C3030306C5C3030306C5C303030625C303030615C303030635C3030306B}
|
||||
\BKM@entry{id=37,open,dest={73756273656374696F6E2E352E33},srcline={778}}{5C3337365C3337375C303030355C3030302E5C303030335C3030305C3034305C303030505C3030306F5C303030735C3030305C3335355C3030306C5C3030305C3334315C3030306E5C3030305C3335355C3030305C3034305C3030307A5C303030705C303030725C3030305C3334315C30303076}
|
||||
\BKM@entry{id=38,open,dest={73756273756273656374696F6E2E352E332E31},srcline={789}}{5C3337365C3337375C303030355C3030302E5C303030335C3030302E5C303030315C3030305C3034305C3030304B5C3030305C3336335C303030645C3030306F5C303030765C3030305C3334315C3030306E5C3030305C3335355C3030305C3034305C3030307A5C303030705C303030725C3030305C3334315C30303076}
|
||||
\BKM@entry{id=36,open,dest={73756273756273656374696F6E2E352E322E33},srcline={769}}{5C3337365C3337375C303030355C3030302E5C303030325C3030302E5C303030335C3030305C3034305C303030525C3030306F5C3030306C5C3030306C5C303030625C303030615C303030635C3030306B}
|
||||
\BKM@entry{id=37,open,dest={73756273656374696F6E2E352E33},srcline={779}}{5C3337365C3337375C303030355C3030302E5C303030335C3030305C3034305C303030505C3030306F5C303030735C3030305C3335355C3030306C5C3030305C3334315C3030306E5C3030305C3335355C3030305C3034305C3030307A5C303030705C303030725C3030305C3334315C30303076}
|
||||
\BKM@entry{id=38,open,dest={73756273756273656374696F6E2E352E332E31},srcline={790}}{5C3337365C3337375C303030355C3030302E5C303030335C3030302E5C303030315C3030305C3034305C3030304B5C3030305C3336335C303030645C3030306F5C303030765C3030305C3334315C3030306E5C3030305C3335355C3030305C3034305C3030307A5C303030705C303030725C3030305C3334315C30303076}
|
||||
\@writefile{toc}{\contentsline {subsubsection}{\numberline {5.2.3}Rollback}{28}{subsubsection.5.2.3}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {subsection}{\numberline {5.3}Posílání zpráv}{28}{subsection.5.3}\protected@file@percent }
|
||||
\BKM@entry{id=39,open,dest={73756273756273656374696F6E2E352E332E32},srcline={797}}{5C3337365C3337375C303030355C3030302E5C303030335C3030302E5C303030325C3030305C3034305C303030495C3030306D5C303030705C3030306C5C303030655C3030306D5C303030655C3030306E5C303030745C303030615C303030635C30303065}
|
||||
\BKM@entry{id=40,open,dest={73756273756273656374696F6E2E352E332E33},srcline={801}}{5C3337365C3337375C303030355C3030302E5C303030335C3030302E5C303030335C3030305C3034305C303030445C303030655C303030745C303030655C3030306B5C303030635C303030655C3030305C3034305C303030615C3030305C3034305C3030306E5C3030305C3334315C303030705C303030725C303030615C303030765C303030615C3030305C3034305C303030635C303030685C303030795C30303062}
|
||||
\BKM@entry{id=41,open,dest={73756273656374696F6E2E352E34},srcline={808}}{5C3337365C3337375C303030355C3030302E5C303030345C3030305C3034305C303030535C303030655C303030725C303030695C303030615C3030306C5C303030695C3030307A5C303030615C303030635C30303065}
|
||||
\BKM@entry{id=39,open,dest={73756273756273656374696F6E2E352E332E32},srcline={798}}{5C3337365C3337375C303030355C3030302E5C303030335C3030302E5C303030325C3030305C3034305C303030495C3030306D5C303030705C3030306C5C303030655C3030306D5C303030655C3030306E5C303030745C303030615C303030635C30303065}
|
||||
\BKM@entry{id=40,open,dest={73756273756273656374696F6E2E352E332E33},srcline={802}}{5C3337365C3337375C303030355C3030302E5C303030335C3030302E5C303030335C3030305C3034305C303030445C303030655C303030745C303030655C3030306B5C303030635C303030655C3030305C3034305C303030615C3030305C3034305C3030306E5C3030305C3334315C303030705C303030725C303030615C303030765C303030615C3030305C3034305C303030635C303030685C303030795C30303062}
|
||||
\BKM@entry{id=41,open,dest={73756273656374696F6E2E352E34},srcline={809}}{5C3337365C3337375C303030355C3030302E5C303030345C3030305C3034305C303030535C303030655C303030725C303030695C303030615C3030306C5C303030695C3030307A5C303030615C303030635C30303065}
|
||||
\@writefile{toc}{\contentsline {subsubsection}{\numberline {5.3.1}Kódování zpráv}{29}{subsubsection.5.3.1}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {subsubsection}{\numberline {5.3.2}Implementace}{29}{subsubsection.5.3.2}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {subsubsection}{\numberline {5.3.3}Detekce a náprava chyb}{29}{subsubsection.5.3.3}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {subsection}{\numberline {5.4}Serializace}{29}{subsection.5.4}\protected@file@percent }
|
||||
\@writefile{lol}{\contentsline {lstlisting}{\numberline {2}cpp}{30}{lstlisting.2}\protected@file@percent }
|
||||
\BKM@entry{id=42,open,dest={73756273656374696F6E2E352E35},srcline={842}}{5C3337365C3337375C303030355C3030302E5C303030355C3030305C3034305C303030505C303030725C3030306F5C303030745C3030306F5C3030306B5C3030306F5C3030306C5C3030305C3034305C303030515C303030555C303030495C303030435C30303072}
|
||||
\BKM@entry{id=43,open,dest={73756273756273656374696F6E2E352E352E31},srcline={855}}{5C3337365C3337375C303030355C3030302E5C303030355C3030302E5C303030315C3030305C3034305C303030525C3030305C3334315C3030306D5C303030635C30303065}
|
||||
\BKM@entry{id=42,open,dest={73756273656374696F6E2E352E35},srcline={843}}{5C3337365C3337375C303030355C3030302E5C303030355C3030305C3034305C303030505C303030725C3030306F5C303030745C3030306F5C3030306B5C3030306F5C3030306C5C3030305C3034305C303030515C303030555C303030495C303030435C30303072}
|
||||
\BKM@entry{id=43,open,dest={73756273756273656374696F6E2E352E352E31},srcline={856}}{5C3337365C3337375C303030355C3030302E5C303030355C3030302E5C303030315C3030305C3034305C303030525C3030305C3334315C3030306D5C303030635C30303065}
|
||||
\@writefile{toc}{\contentsline {subsection}{\numberline {5.5}Protokol QUICr}{31}{subsection.5.5}\protected@file@percent }
|
||||
\BKM@entry{id=44,open,dest={73756273756273656374696F6E2E352E352E32},srcline={868}}{5C3337365C3337375C303030355C3030302E5C303030355C3030302E5C303030325C3030305C3034305C303030485C303030615C3030306E5C303030645C303030735C303030685C303030615C3030306B5C30303065}
|
||||
\BKM@entry{id=45,open,dest={73756273756273656374696F6E2E352E352E33},srcline={902}}{5C3337365C3337375C303030355C3030302E5C303030355C3030302E5C303030335C3030305C3034305C303030535C303030705C3030306F5C3030306C5C303030655C303030685C3030306C5C303030695C303030765C3030306F5C303030735C30303074}
|
||||
\BKM@entry{id=44,open,dest={73756273756273656374696F6E2E352E352E32},srcline={869}}{5C3337365C3337375C303030355C3030302E5C303030355C3030302E5C303030325C3030305C3034305C303030485C303030615C3030306E5C303030645C303030735C303030685C303030615C3030306B5C30303065}
|
||||
\BKM@entry{id=45,open,dest={73756273756273656374696F6E2E352E352E33},srcline={903}}{5C3337365C3337375C303030355C3030302E5C303030355C3030302E5C303030335C3030305C3034305C303030535C303030705C3030306F5C3030306C5C303030655C303030685C3030306C5C303030695C303030765C3030306F5C303030735C30303074}
|
||||
\@writefile{toc}{\contentsline {subsubsection}{\numberline {5.5.1}Rámce}{32}{subsubsection.5.5.1}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {subsubsection}{\numberline {5.5.2}Handshake}{32}{subsubsection.5.5.2}\protected@file@percent }
|
||||
\newlabel{sec:quicr_handshake}{{5.5.2}{32}{Handshake}{subsubsection.5.5.2}{}}
|
||||
@@ -129,11 +129,11 @@
|
||||
\newlabel{sec:quicr_reliability}{{5.5.3}{32}{Spolehlivost}{subsubsection.5.5.3}{}}
|
||||
\@writefile{lof}{\contentsline {figure}{\numberline {7}{\ignorespaces Stavový stroj QUICr handshake}}{33}{figure.7}\protected@file@percent }
|
||||
\newlabel{fig:quicr_handshake}{{7}{33}{Stavový stroj QUICr handshake}{figure.7}{}}
|
||||
\BKM@entry{id=46,open,dest={73756273756273656374696F6E2E352E352E34},srcline={924}}{5C3337365C3337375C303030355C3030302E5C303030355C3030302E5C303030345C3030305C3034305C303030455C3030306E5C3030306B5C3030306F5C303030645C3030305C3335315C30303072}
|
||||
\BKM@entry{id=47,open,dest={73756273756273656374696F6E2E352E352E35},srcline={932}}{5C3337365C3337375C303030355C3030302E5C303030355C3030302E5C303030355C3030305C3034305C303030545C303030655C303030735C303030745C3030306F5C303030765C3030305C3334315C3030306E5C3030305C333535}
|
||||
\BKM@entry{id=46,open,dest={73756273756273656374696F6E2E352E352E34},srcline={925}}{5C3337365C3337375C303030355C3030302E5C303030355C3030302E5C303030345C3030305C3034305C303030455C3030306E5C3030306B5C3030306F5C303030645C3030305C3335315C30303072}
|
||||
\BKM@entry{id=47,open,dest={73756273756273656374696F6E2E352E352E35},srcline={933}}{5C3337365C3337375C303030355C3030302E5C303030355C3030302E5C303030355C3030305C3034305C303030545C303030655C303030735C303030745C3030306F5C303030765C3030305C3334315C3030306E5C3030305C333535}
|
||||
\@writefile{toc}{\contentsline {subsubsection}{\numberline {5.5.4}Enkodér}{34}{subsubsection.5.5.4}\protected@file@percent }
|
||||
\BKM@entry{id=48,open,dest={73756273656374696F6E2E352E36},srcline={973}}{5C3337365C3337375C303030355C3030302E5C303030365C3030305C3034305C303030485C3030306F5C303030725C303030695C3030307A5C3030306F5C3030306E5C303030745C3030305C3334315C3030306C5C3030306E5C3030305C3335355C3030305C3034305C3030315C3134315C3030306B5C3030305C3334315C3030306C5C3030306F5C303030765C3030305C3334315C3030306E5C3030305C333535}
|
||||
\BKM@entry{id=49,open,dest={73756273656374696F6E2E352E37},srcline={993}}{5C3337365C3337375C303030355C3030302E5C303030375C3030305C3034305C303030565C3030305C3337355C303030735C3030306C5C303030655C303030645C3030306E5C3030305C3334315C3030305C3034305C303030685C303030725C30303061}
|
||||
\BKM@entry{id=48,open,dest={73756273656374696F6E2E352E36},srcline={974}}{5C3337365C3337375C303030355C3030302E5C303030365C3030305C3034305C303030485C3030306F5C303030725C303030695C3030307A5C3030306F5C3030306E5C303030745C3030305C3334315C3030306C5C3030306E5C3030305C3335355C3030305C3034305C3030315C3134315C3030306B5C3030305C3334315C3030306C5C3030306F5C303030765C3030305C3334315C3030306E5C3030305C333535}
|
||||
\BKM@entry{id=49,open,dest={73756273656374696F6E2E352E37},srcline={994}}{5C3337365C3337375C303030355C3030302E5C303030375C3030305C3034305C303030565C3030305C3337355C303030735C3030306C5C303030655C303030645C3030306E5C3030305C3334315C3030305C3034305C303030685C303030725C30303061}
|
||||
\@writefile{toc}{\contentsline {subsubsection}{\numberline {5.5.5}Testování}{35}{subsubsection.5.5.5}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {subsection}{\numberline {5.6}Horizontální škálování}{35}{subsection.5.6}\protected@file@percent }
|
||||
\newlabel{fig:zone_cluster_architecture}{{5.6}{36}{Horizontální škálování}{subsection.5.6}{}}
|
||||
@@ -143,18 +143,18 @@
|
||||
\@writefile{lof}{\contentsline {figure}{\numberline {9}{\ignorespaces Uživatelské rozhraní v lobby}}{37}{figure.9}\protected@file@percent }
|
||||
\newlabel{fig:ui_showcase}{{5.7}{37}{Výsledná hra}{figure.9}{}}
|
||||
\@writefile{lof}{\contentsline {figure}{\numberline {10}{\ignorespaces Uživatelské rozhraní v klientovi}}{37}{figure.10}\protected@file@percent }
|
||||
\BKM@entry{id=50,open,dest={73656374696F6E2E36},srcline={1017}}{5C3337365C3337375C303030365C3030305C3034305C3030304D5C3030315C3033335C3030315C3133315C3030315C3033335C3030306E5C3030305C333535}
|
||||
\BKM@entry{id=51,open,dest={73756273656374696F6E2E362E31},srcline={1021}}{5C3337365C3337375C303030365C3030302E5C303030315C3030305C3034305C3030304D5C303030655C303030745C303030725C303030695C3030306B5C30303079}
|
||||
\BKM@entry{id=52,open,dest={73756273756273656374696F6E2E362E312E31},srcline={1029}}{5C3337365C3337375C303030365C3030302E5C303030315C3030302E5C303030315C3030305C3034305C303030505C3030306F5C303030735C303030745C303030675C303030725C303030655C303030535C303030515C3030304C}
|
||||
\BKM@entry{id=53,open,dest={73756273756273656374696F6E2E362E312E32},srcline={1033}}{5C3337365C3337375C303030365C3030302E5C303030315C3030302E5C303030325C3030305C3034305C303030545C303030695C3030306D5C303030655C303030735C303030635C303030615C3030306C5C303030655C303030445C30303042}
|
||||
\BKM@entry{id=54,open,dest={73756273756273656374696F6E2E362E312E33},srcline={1037}}{5C3337365C3337375C303030365C3030302E5C303030315C3030302E5C303030335C3030305C3034305C303030475C303030725C303030615C303030665C303030615C3030306E5C30303061}
|
||||
\BKM@entry{id=50,open,dest={73656374696F6E2E36},srcline={1018}}{5C3337365C3337375C303030365C3030305C3034305C3030304D5C3030315C3033335C3030315C3133315C3030315C3033335C3030306E5C3030305C333535}
|
||||
\BKM@entry{id=51,open,dest={73756273656374696F6E2E362E31},srcline={1022}}{5C3337365C3337375C303030365C3030302E5C303030315C3030305C3034305C3030304D5C303030655C303030745C303030725C303030695C3030306B5C30303079}
|
||||
\BKM@entry{id=52,open,dest={73756273756273656374696F6E2E362E312E31},srcline={1030}}{5C3337365C3337375C303030365C3030302E5C303030315C3030302E5C303030315C3030305C3034305C303030505C3030306F5C303030735C303030745C303030675C303030725C303030655C303030535C303030515C3030304C}
|
||||
\BKM@entry{id=53,open,dest={73756273756273656374696F6E2E362E312E32},srcline={1034}}{5C3337365C3337375C303030365C3030302E5C303030315C3030302E5C303030325C3030305C3034305C303030545C303030695C3030306D5C303030655C303030735C303030635C303030615C3030306C5C303030655C303030445C30303042}
|
||||
\BKM@entry{id=54,open,dest={73756273756273656374696F6E2E362E312E33},srcline={1038}}{5C3337365C3337375C303030365C3030302E5C303030315C3030302E5C303030335C3030305C3034305C303030475C303030725C303030615C303030665C303030615C3030306E5C30303061}
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {6}Měřění}{38}{section.6}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {subsection}{\numberline {6.1}Metriky}{38}{subsection.6.1}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {subsubsection}{\numberline {6.1.1}PostgreSQL}{38}{subsubsection.6.1.1}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {subsubsection}{\numberline {6.1.2}TimescaleDB}{38}{subsubsection.6.1.2}\protected@file@percent }
|
||||
\BKM@entry{id=55,open,dest={73756273756273656374696F6E2E362E312E34},srcline={1049}}{5C3337365C3337375C303030365C3030302E5C303030315C3030302E5C303030345C3030305C3034305C303030545C303030725C303030615C303030635C30303079}
|
||||
\BKM@entry{id=56,open,dest={73756273756273656374696F6E2E362E312E35},srcline={1079}}{5C3337365C3337375C303030365C3030302E5C303030315C3030302E5C303030355C3030305C3034305C3030304B5C3030306C5C303030695C303030655C3030306E5C303030745C303030735C3030306B5C3030305C3334315C3030305C3034305C303030615C303030705C3030306C5C303030695C3030306B5C303030615C303030635C30303065}
|
||||
\BKM@entry{id=57,open,dest={73756273656374696F6E2E362E32},srcline={1083}}{5C3337365C3337375C303030365C3030302E5C303030325C3030305C3034305C303030515C303030555C303030495C303030435C30303072}
|
||||
\BKM@entry{id=55,open,dest={73756273756273656374696F6E2E362E312E34},srcline={1050}}{5C3337365C3337375C303030365C3030302E5C303030315C3030302E5C303030345C3030305C3034305C303030545C303030725C303030615C303030635C30303079}
|
||||
\BKM@entry{id=56,open,dest={73756273756273656374696F6E2E362E312E35},srcline={1080}}{5C3337365C3337375C303030365C3030302E5C303030315C3030302E5C303030355C3030305C3034305C3030304B5C3030306C5C303030695C303030655C3030306E5C303030745C303030735C3030306B5C3030305C3334315C3030305C3034305C303030615C303030705C3030306C5C303030695C3030306B5C303030615C303030635C30303065}
|
||||
\BKM@entry{id=57,open,dest={73756273656374696F6E2E362E32},srcline={1084}}{5C3337365C3337375C303030365C3030302E5C303030325C3030305C3034305C303030515C303030555C303030495C303030435C30303072}
|
||||
\@writefile{lof}{\contentsline {figure}{\numberline {11}{\ignorespaces Příklad Grafana dashboardu}}{39}{figure.11}\protected@file@percent }
|
||||
\newlabel{fig:grafana}{{11}{39}{Příklad Grafana dashboardu}{figure.11}{}}
|
||||
\@writefile{toc}{\contentsline {subsubsection}{\numberline {6.1.3}Grafana}{39}{subsubsection.6.1.3}\protected@file@percent }
|
||||
@@ -169,7 +169,7 @@
|
||||
\newlabel{fig:latencycomparison}{{13}{41}{Porovnání odezvy TCP a QUICr}{figure.13}{}}
|
||||
\@writefile{lof}{\contentsline {figure}{\numberline {14}{\ignorespaces Porovnání integrace TCP a QUICr}}{41}{figure.14}\protected@file@percent }
|
||||
\newlabel{fig:integrationcomparison}{{14}{41}{Porovnání integrace TCP a QUICr}{figure.14}{}}
|
||||
\BKM@entry{id=58,open,dest={73756273656374696F6E2E362E33},srcline={1130}}{5C3337365C3337375C303030365C3030302E5C303030335C3030305C3034305C3030304F5C303030705C303030745C303030695C3030306D5C303030615C3030306C5C303030695C3030307A5C303030615C303030635C303030655C3030305C3034305C303030725C303030655C303030705C3030306C5C303030695C3030306B5C3030305C3334315C303030745C3030306F5C303030725C30303075}
|
||||
\BKM@entry{id=58,open,dest={73756273656374696F6E2E362E33},srcline={1131}}{5C3337365C3337375C303030365C3030302E5C303030335C3030305C3034305C3030304F5C303030705C303030745C303030695C3030306D5C303030615C3030306C5C303030695C3030307A5C303030615C303030635C303030655C3030305C3034305C303030725C303030655C303030705C3030306C5C303030695C3030306B5C3030305C3334315C303030745C3030306F5C303030725C30303075}
|
||||
\@writefile{lof}{\contentsline {figure}{\numberline {15}{\ignorespaces 301 připojených hráčů}}{42}{figure.15}\protected@file@percent }
|
||||
\newlabel{fig:playerbenchmark}{{15}{42}{301 připojených hráčů}{figure.15}{}}
|
||||
\newlabel{fig:tracyreplicator}{{6.3}{42}{Optimalizace replikátoru}{subsection.6.3}{}}
|
||||
@@ -179,35 +179,35 @@
|
||||
\@writefile{lof}{\contentsline {figure}{\numberline {17}{\ignorespaces Analýza optimalizace replikátoru pro ECS}}{43}{figure.17}\protected@file@percent }
|
||||
\newlabel{fig:ecs_optimization_tracy_02}{{6.3}{43}{Optimalizace replikátoru}{figure.17}{}}
|
||||
\@writefile{lof}{\contentsline {figure}{\numberline {18}{\ignorespaces Analýza optimalizace replikátoru pro ECS}}{43}{figure.18}\protected@file@percent }
|
||||
\BKM@entry{id=59,open,dest={73756273656374696F6E2E362E34},srcline={1185}}{5C3337365C3337375C303030365C3030302E5C303030345C3030305C3034305C3030304F5C303030705C303030745C303030695C3030306D5C303030615C3030306C5C303030695C3030307A5C303030615C303030635C303030655C3030305C3034305C3030306D5C303030615C3030306E5C303030615C3030315C3137365C303030655C303030725C303030615C3030305C3034305C3030307A5C3030305C3334315C3030306A5C3030306D5C3030315C313537}
|
||||
\BKM@entry{id=59,open,dest={73756273656374696F6E2E362E34},srcline={1186}}{5C3337365C3337375C303030365C3030302E5C303030345C3030305C3034305C3030304F5C303030705C303030745C303030695C3030306D5C303030615C3030306C5C303030695C3030307A5C303030615C303030635C303030655C3030305C3034305C3030306D5C303030615C3030306E5C303030615C3030315C3137365C303030655C303030725C303030615C3030305C3034305C3030307A5C3030305C3334315C3030306A5C3030306D5C3030315C313537}
|
||||
\@writefile{lot}{\contentsline {table}{\numberline {1}{\ignorespaces Porovnání serializátorů}}{44}{table.1}\protected@file@percent }
|
||||
\newlabel{t:serialization_comparison}{{1}{44}{Porovnání serializátorů}{table.1}{}}
|
||||
\@writefile{toc}{\contentsline {subsection}{\numberline {6.4}Optimalizace manažera zájmů}{44}{subsection.6.4}\protected@file@percent }
|
||||
\BKM@entry{id=60,open,dest={73756273656374696F6E2E362E35},srcline={1213}}{5C3337365C3337375C303030365C3030302E5C303030355C3030305C3034305C303030505C303030655C303030655C303030725C3030302D5C303030745C3030306F5C3030302D5C303030705C303030655C303030655C30303072}
|
||||
\BKM@entry{id=60,open,dest={73756273656374696F6E2E362E35},srcline={1214}}{5C3337365C3337375C303030365C3030302E5C303030355C3030305C3034305C303030505C303030655C303030655C303030725C3030302D5C303030745C3030306F5C3030302D5C303030705C303030655C303030655C30303072}
|
||||
\@writefile{lot}{\contentsline {table}{\numberline {2}{\ignorespaces Porovnání algoritmů}}{45}{table.2}\protected@file@percent }
|
||||
\newlabel{table:range_query_comparison}{{2}{45}{Porovnání algoritmů}{table.2}{}}
|
||||
\@writefile{toc}{\contentsline {subsection}{\numberline {6.5}Peer-to-peer}{45}{subsection.6.5}\protected@file@percent }
|
||||
\@writefile{lof}{\contentsline {figure}{\numberline {19}{\ignorespaces Porovnání TCP a QUICr v peer-to-peer}}{46}{figure.19}\protected@file@percent }
|
||||
\newlabel{fig:peer_to_peer}{{19}{46}{Porovnání TCP a QUICr v peer-to-peer}{figure.19}{}}
|
||||
\BKM@entry{id=61,open,dest={73656374696F6E2A2E33},srcline={1252}}{5C3337365C3337375C3030305A5C3030305C3334315C303030765C3030315C3033335C30303072}
|
||||
\BKM@entry{id=61,open,dest={73656374696F6E2A2E33},srcline={1253}}{5C3337365C3337375C3030305A5C3030305C3334315C303030765C3030315C3033335C30303072}
|
||||
\abx@aux@cite{0}{quic}
|
||||
\abx@aux@segm{0}{0}{quic}
|
||||
\@writefile{toc}{\contentsline {section}{Z\'av\v er}{47}{section*.3}\protected@file@percent }
|
||||
\babel@aux{czech}{}
|
||||
\babel@aux{czech}{}
|
||||
\BKM@entry{id=62,open,dest={73656374696F6E2A2E35},srcline={1261}}{5C3337365C3337375C303030435C3030306F5C3030306E5C303030635C3030306C5C303030755C303030735C303030695C3030306F5C3030306E5C30303073}
|
||||
\BKM@entry{id=62,open,dest={73656374696F6E2A2E35},srcline={1262}}{5C3337365C3337375C303030435C3030306F5C3030306E5C303030635C3030306C5C303030755C303030735C303030695C3030306F5C3030306E5C30303073}
|
||||
\@writefile{toc}{\contentsline {section}{Conclusions}{48}{section*.5}\protected@file@percent }
|
||||
\babel@aux{english}{}
|
||||
\babel@aux{czech}{}
|
||||
\BKM@entry{id=63,open,dest={617070656E6469782E41},srcline={1268}}{5C3337365C3337375C303030415C3030305C3034305C303030505C303030725C303030765C3030306E5C3030305C3335355C3030305C3034305C303030705C3030315C3133315C3030305C3335355C3030306C5C3030306F5C303030685C30303061}
|
||||
\BKM@entry{id=64,open,dest={617070656E6469782E42},srcline={1271}}{5C3337365C3337375C303030425C3030305C3034305C303030445C303030725C303030755C303030685C3030305C3334315C3030305C3034305C303030705C3030315C3133315C3030305C3335355C3030306C5C3030306F5C303030685C30303061}
|
||||
\BKM@entry{id=65,open,dest={617070656E6469782E43},srcline={1276}}{5C3337365C3337375C303030435C3030305C3034305C3030304F5C303030625C303030735C303030615C303030685C3030305C3034305C303030655C3030306C5C303030655C3030306B5C303030745C303030725C3030306F5C3030306E5C303030695C303030635C3030306B5C3030305C3337355C303030635C303030685C3030305C3034305C303030645C303030615C30303074}
|
||||
\BKM@entry{id=63,open,dest={617070656E6469782E41},srcline={1269}}{5C3337365C3337375C303030415C3030305C3034305C303030505C303030725C303030765C3030306E5C3030305C3335355C3030305C3034305C303030705C3030315C3133315C3030305C3335355C3030306C5C3030306F5C303030685C30303061}
|
||||
\BKM@entry{id=64,open,dest={617070656E6469782E42},srcline={1272}}{5C3337365C3337375C303030425C3030305C3034305C303030445C303030725C303030755C303030685C3030305C3334315C3030305C3034305C303030705C3030315C3133315C3030305C3335355C3030306C5C3030306F5C303030685C30303061}
|
||||
\BKM@entry{id=65,open,dest={617070656E6469782E43},srcline={1277}}{5C3337365C3337375C303030435C3030305C3034305C3030304F5C303030625C303030735C303030615C303030685C3030305C3034305C303030655C3030306C5C303030655C3030306B5C303030745C303030725C3030306F5C3030306E5C303030695C303030635C3030306B5C3030305C3337355C303030635C303030685C3030305C3034305C303030645C303030615C30303074}
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {A}První příloha}{49}{appendix.A}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {B}Druhá příloha}{49}{appendix.B}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {C}Obsah elektronických dat}{49}{appendix.C}\protected@file@percent }
|
||||
\newlabel{sec:ObsahData}{{C}{49}{Obsah elektronických dat}{appendix.C}{}}
|
||||
\abx@aux@nociteall
|
||||
\BKM@entry{id=66,open,dest={73656374696F6E2A2E37},srcline={1353}}{5C3337365C3337375C3030304C5C303030695C303030745C303030655C303030725C303030615C303030745C303030755C303030725C30303061}
|
||||
\BKM@entry{id=66,open,dest={73656374696F6E2A2E37},srcline={1354}}{5C3337365C3337375C3030304C5C303030695C303030745C303030655C303030725C303030615C303030745C303030755C303030725C30303061}
|
||||
\@writefile{toc}{\contentsline {section}{Literatura}{51}{section*.7}\protected@file@percent }
|
||||
\babel@aux{english}{}
|
||||
\babel@aux{czech}{}
|
||||
|
||||
+11
-11
@@ -1,18 +1,18 @@
|
||||
# Fdb version 4
|
||||
["biber kidiplom"] 1777641420.71466 "kidiplom.bcf" "kidiplom.bbl" "kidiplom" 1785793932.94091 2
|
||||
"kidiplom.bcf" 1785793932.79358 100697 0d278831f58b22e288d3858fcb2c1fe5 "pdflatex"
|
||||
["biber kidiplom"] 1777641420.71466 "kidiplom.bcf" "kidiplom.bbl" "kidiplom" 1785873458.8564 2
|
||||
"kidiplom.bcf" 1785873458.70234 100697 0d278831f58b22e288d3858fcb2c1fe5 "pdflatex"
|
||||
(generated)
|
||||
"kidiplom.bbl"
|
||||
"kidiplom.blg"
|
||||
(rewritten before read)
|
||||
["makeindex kidiplom.idx"] 1777641420.69393 "kidiplom.idx" "kidiplom.ind" "kidiplom" 1785793932.93505 0
|
||||
"kidiplom.idx" 1785793930.62853 0 d41d8cd98f00b204e9800998ecf8427e "pdflatex"
|
||||
["makeindex kidiplom.idx"] 1777641420.69393 "kidiplom.idx" "kidiplom.ind" "kidiplom" 1785873458.85161 0
|
||||
"kidiplom.idx" 1785873456.43831 0 d41d8cd98f00b204e9800998ecf8427e "pdflatex"
|
||||
(generated)
|
||||
"kidiplom.ilg"
|
||||
"kidiplom.ind"
|
||||
(rewritten before read)
|
||||
["pdflatex"] 1785793930.12058 "/home/martin/projects/kidiplom/kidiplom.tex" "kidiplom.pdf" "kidiplom" 1785793932.93535 2
|
||||
"/home/martin/projects/kidiplom/kidiplom.tex" 1785793930.03852 129666 3ee6e0b72139f852cab4441648d108a3 ""
|
||||
["pdflatex"] 1785873455.47714 "/home/martin/projects/kidiplom/kidiplom.tex" "kidiplom.pdf" "kidiplom" 1785873458.85184 2
|
||||
"/home/martin/projects/kidiplom/kidiplom.tex" 1785873455.29029 129638 c58f042e3489e766c0b8250bfdd4b881 ""
|
||||
"/usr/share/texmf-dist/fonts/enc/dvips/base/8r.enc" 1775415801 4850 80dc9bab7f31fb78a000ccfed0e27cab ""
|
||||
"/usr/share/texmf-dist/fonts/enc/dvips/lm/lm-ec.enc" 1775415801 2375 baa924870cfb487815765f9094cf3728 ""
|
||||
"/usr/share/texmf-dist/fonts/enc/dvips/lm/lm-mathit.enc" 1775415801 2405 5dcf2c1b967ee25cc46c58cd52244aed ""
|
||||
@@ -271,15 +271,15 @@
|
||||
"iso-numeric.cbx" 1681557593 73 45828f8df9dead5135d2c8a727f5b601 ""
|
||||
"iso.bbx" 1681557593 13233 9f9e9c852fe772bfe1efaacc6b415eb7 ""
|
||||
"kibase.sty" 1681557593 23853 021ae8236751950ac5e18f6a5bcf1da7 ""
|
||||
"kidiplom.aux" 1785793932.77358 33845 f5fc6754c85f9a7160bc196940e9a547 "pdflatex"
|
||||
"kidiplom.aux" 1785873458.68234 33845 19588fd7bde7407d19fbd41d8c9fb7b0 "pdflatex"
|
||||
"kidiplom.bbl" 1785780010.56994 7686 c3cba72138b16e01160647867a8d8f99 "biber kidiplom"
|
||||
"kidiplom.cls" 1681557593 18598 7684b2d13ac67d7b017c4eea1e12fa0c ""
|
||||
"kidiplom.glsdefs" 1777655247.6059 525 791a05cd0a9f8650067804d8f5ff3f41 ""
|
||||
"kidiplom.ind" 1785767496.11494 0 d41d8cd98f00b204e9800998ecf8427e "makeindex kidiplom.idx"
|
||||
"kidiplom.lot" 1785793932.79621 387 1ac32e7367846a270a0209a5b69d3838 "pdflatex"
|
||||
"kidiplom.run.xml" 1785793932.79621 2535 4e001a965ee2f4de88dc6271855a61ea "pdflatex"
|
||||
"kidiplom.tex" 1785793930.03852 129666 3ee6e0b72139f852cab4441648d108a3 ""
|
||||
"kidiplom.toc" 1785793932.79621 5374 8623b4d73b23c78b6a1b36c883daab52 "pdflatex"
|
||||
"kidiplom.lot" 1785873458.70607 387 1ac32e7367846a270a0209a5b69d3838 "pdflatex"
|
||||
"kidiplom.run.xml" 1785873458.70607 2535 4e001a965ee2f4de88dc6271855a61ea "pdflatex"
|
||||
"kidiplom.tex" 1785873455.29029 129638 c58f042e3489e766c0b8250bfdd4b881 ""
|
||||
"kidiplom.toc" 1785873458.70607 5374 8623b4d73b23c78b6a1b36c883daab52 "pdflatex"
|
||||
(generated)
|
||||
"kidiplom.acn"
|
||||
"kidiplom.aux"
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
% makeindex style file created by the glossaries package
|
||||
% for document 'kidiplom' on 2026-8-3
|
||||
% for document 'kidiplom' on 2026-8-4
|
||||
actual '?'
|
||||
encap '|'
|
||||
level '!'
|
||||
|
||||
+42
-42
@@ -1,4 +1,4 @@
|
||||
This is pdfTeX, Version 3.141592653-2.6-1.40.29 (TeX Live 2026/Arch Linux) (preloaded format=pdflatex 2026.6.8) 3 AUG 2026 23:52
|
||||
This is pdfTeX, Version 3.141592653-2.6-1.40.29 (TeX Live 2026/Arch Linux) (preloaded format=pdflatex 2026.6.8) 4 AUG 2026 21:57
|
||||
entering extended mode
|
||||
restricted \write18 enabled.
|
||||
%&-line parsing enabled.
|
||||
@@ -1494,12 +1494,12 @@ Overfull \hbox (1.38725pt too wide) in paragraph at lines 148--148
|
||||
|
||||
] [9]
|
||||
LaTeX Font Info: Trying to load font information for T1+pcr on input line 23
|
||||
5.
|
||||
6.
|
||||
|
||||
(/usr/share/texmf-dist/tex/latex/psnfss/t1pcr.fd
|
||||
File: t1pcr.fd 2001/06/04 font definitions for T1/pcr.
|
||||
) [10{/usr/share/texmf-dist/fonts/enc/dvips/base/8r.enc}]
|
||||
Overfull \hbox (0.28238pt too wide) in paragraph at lines 252--256
|
||||
Overfull \hbox (0.28238pt too wide) in paragraph at lines 253--257
|
||||
[]\T1/lmr/m/n/12 Druhým p°í-stu-pem je po-sí-lání zpráv. V tomto p°í-stupu po-s
|
||||
í-lají pro-cesy zprávy
|
||||
[]
|
||||
@@ -1511,47 +1511,47 @@ m-rm.enc}] [12]
|
||||
File: graphics/layer_architecture.pdf Graphic file (type pdf)
|
||||
<use graphics/layer_architecture.pdf>
|
||||
Package pdftex.def Info: graphics/layer_architecture.pdf used on input line 31
|
||||
1.
|
||||
2.
|
||||
(pdftex.def) Requested size: 409.50119pt x 209.52332pt.
|
||||
[13 <./graphics/layer_architecture.pdf>]
|
||||
<graphics/TcpIp.png, id=229, 805.0075pt x 512.91624pt>
|
||||
File: graphics/TcpIp.png Graphic file (type png)
|
||||
<use graphics/TcpIp.png>
|
||||
Package pdftex.def Info: graphics/TcpIp.png used on input line 332.
|
||||
Package pdftex.def Info: graphics/TcpIp.png used on input line 333.
|
||||
(pdftex.def) Requested size: 409.50119pt x 260.91075pt.
|
||||
[14 <./graphics/TcpIp.png>] [15]
|
||||
<graphics/http2.pdf, id=245, 275.10779pt x 225.7233pt>
|
||||
File: graphics/http2.pdf Graphic file (type pdf)
|
||||
<use graphics/http2.pdf>
|
||||
Package pdftex.def Info: graphics/http2.pdf used on input line 389.
|
||||
Package pdftex.def Info: graphics/http2.pdf used on input line 390.
|
||||
(pdftex.def) Requested size: 196.5588pt x 161.2807pt.
|
||||
<graphics/http3.pdf, id=246, 349.305pt x 262.0992pt>
|
||||
File: graphics/http3.pdf Graphic file (type pdf)
|
||||
<use graphics/http3.pdf>
|
||||
Package pdftex.def Info: graphics/http3.pdf used on input line 395.
|
||||
Package pdftex.def Info: graphics/http3.pdf used on input line 396.
|
||||
(pdftex.def) Requested size: 196.5588pt x 147.48642pt.
|
||||
[16] [17 <./graphics/http2.pdf> <./graphics/http3.pdf>] [18]
|
||||
[19]
|
||||
<graphics/quic_handshake.pdf, id=304, 243.79079pt x 327.14218pt>
|
||||
File: graphics/quic_handshake.pdf Graphic file (type pdf)
|
||||
<use graphics/quic_handshake.pdf>
|
||||
Package pdftex.def Info: graphics/quic_handshake.pdf used on input line 466.
|
||||
Package pdftex.def Info: graphics/quic_handshake.pdf used on input line 467.
|
||||
(pdftex.def) Requested size: 204.7506pt x 274.7626pt.
|
||||
[20 <./graphics/quic_handshake.pdf>] [21]
|
||||
LaTeX Font Info: External font `lmex10' loaded for size
|
||||
(Font) <10> on input line 615.
|
||||
(Font) <10> on input line 616.
|
||||
LaTeX Font Info: External font `lmex10' loaded for size
|
||||
(Font) <7> on input line 615.
|
||||
(Font) <7> on input line 616.
|
||||
LaTeX Font Info: External font `lmex10' loaded for size
|
||||
(Font) <5> on input line 615.
|
||||
(Font) <5> on input line 616.
|
||||
|
||||
Underfull \hbox (badness 10000) in paragraph at lines 615--615
|
||||
Underfull \hbox (badness 10000) in paragraph at lines 616--616
|
||||
[][][]\T1/lmr/m/n/10 ƒlánek od Riot Ga-mes uka-zuje, jak d·-le-ºitá je ode-zva
|
||||
u kom-pe-te-tiv-
|
||||
[]
|
||||
|
||||
|
||||
Underfull \hbox (badness 10000) in paragraph at lines 615--615
|
||||
Underfull \hbox (badness 10000) in paragraph at lines 616--616
|
||||
\T1/lmr/m/n/10 ních her. U pro-fe-si-o-nál-ních hr᣷ je po-znat i roz-díl mezi
|
||||
120Hz a 240Hz.
|
||||
[]
|
||||
@@ -1559,28 +1559,28 @@ Underfull \hbox (badness 10000) in paragraph at lines 615--615
|
||||
<graphics/single_player_game.pdf, id=324, 334.3692pt x 171.76169pt>
|
||||
File: graphics/single_player_game.pdf Graphic file (type pdf)
|
||||
<use graphics/single_player_game.pdf>
|
||||
Package pdftex.def Info: graphics/single_player_game.pdf used on input line 61
|
||||
9.
|
||||
Package pdftex.def Info: graphics/single_player_game.pdf used on input line 62
|
||||
0.
|
||||
(pdftex.def) Requested size: 204.7506pt x 105.1807pt.
|
||||
|
||||
Overfull \hbox (9.23495pt too wide) in paragraph at lines 629--630
|
||||
Overfull \hbox (9.23495pt too wide) in paragraph at lines 630--631
|
||||
\T1/lmr/m/n/12 en-gine po-sune stav en-tit (zrych-lení a po-zice). V²e jsme oba
|
||||
-lili do []
|
||||
[]
|
||||
|
||||
[22 <./graphics/single_player_game.pdf>]
|
||||
Package hyperref Info: bookmark level for unknown lstlisting defaults to 0 on i
|
||||
nput line 650.
|
||||
nput line 651.
|
||||
[23] [24]
|
||||
<graphics/multi_player_game.pdf, id=368, 385.44pt x 457.71pt>
|
||||
File: graphics/multi_player_game.pdf Graphic file (type pdf)
|
||||
<use graphics/multi_player_game.pdf>
|
||||
Package pdftex.def Info: graphics/multi_player_game.pdf used on input line 715
|
||||
Package pdftex.def Info: graphics/multi_player_game.pdf used on input line 716
|
||||
.
|
||||
(pdftex.def) Requested size: 204.7506pt x 243.13689pt.
|
||||
[25] [26 <./graphics/multi_player_game.pdf>]
|
||||
! Undefined control sequence.
|
||||
l.754 ...World}, která reprezentuje stav a \inlcp
|
||||
l.755 ...World}, která reprezentuje stav a \inlcp
|
||||
{ClientWorldController}, k...
|
||||
The control sequence at the end of the top line
|
||||
of your error message was never \def'ed. If you have
|
||||
@@ -1589,12 +1589,12 @@ spelling (e.g., `I\hbox'). Otherwise just continue,
|
||||
and I'll forget about whatever was undefined.
|
||||
|
||||
[27] [28]
|
||||
Overfull \hbox (8.12425pt too wide) in paragraph at lines 799--800
|
||||
Overfull \hbox (8.12425pt too wide) in paragraph at lines 800--801
|
||||
\T1/lmr/m/n/12 Vytvo°ili jsme t°ídu [][][][], která má na roz-hraní me-tody []
|
||||
[]
|
||||
|
||||
|
||||
Overfull \hbox (20.39532pt too wide) in paragraph at lines 799--800
|
||||
Overfull \hbox (20.39532pt too wide) in paragraph at lines 800--801
|
||||
[][][][][][][][][]\T1/lmr/m/n/12 , [][][][] a [][][][]. První me-toda na-staví
|
||||
pro kon-cový bod []
|
||||
[]
|
||||
@@ -1602,22 +1602,22 @@ pro kon-cov
|
||||
[29]
|
||||
|
||||
LaTeX Warning: Reference `code:entity_spawn_message' on page 30 undefined on in
|
||||
put line 816.
|
||||
put line 817.
|
||||
|
||||
[30] [31]
|
||||
<graphics/quicr_handshake.pdf, id=424, 337.26pt x 246.9225pt>
|
||||
File: graphics/quicr_handshake.pdf Graphic file (type pdf)
|
||||
<use graphics/quicr_handshake.pdf>
|
||||
Package pdftex.def Info: graphics/quicr_handshake.pdf used on input line 896.
|
||||
Package pdftex.def Info: graphics/quicr_handshake.pdf used on input line 897.
|
||||
(pdftex.def) Requested size: 409.50119pt x 299.82079pt.
|
||||
[32] [33 <./graphics/quicr_handshake.pdf>]
|
||||
Overfull \hbox (3.49525pt too wide) in paragraph at lines 906--907
|
||||
Overfull \hbox (3.49525pt too wide) in paragraph at lines 907--908
|
||||
[]\T1/lmr/m/n/12 Spolehlivost °e²í kom-po-nenta [][][][], která si udr-ºuje fro
|
||||
ntu rámc·,
|
||||
[]
|
||||
|
||||
[34]
|
||||
Overfull \hbox (6.44025pt too wide) in paragraph at lines 977--978
|
||||
Overfull \hbox (6.44025pt too wide) in paragraph at lines 978--979
|
||||
[][][][][][][][][][][][][] \T1/lmr/m/n/12 a [][][][][][][][][][][][][][][][]. K
|
||||
aºdý
|
||||
[]
|
||||
@@ -1626,30 +1626,30 @@ a
|
||||
File: graphics/zone_server_architecture.pdf Graphic file (type pdf)
|
||||
<use graphics/zone_server_architecture.pdf>
|
||||
Package pdftex.def Info: graphics/zone_server_architecture.pdf used on input l
|
||||
ine 985.
|
||||
ine 986.
|
||||
(pdftex.def) Requested size: 409.50119pt x 269.24106pt.
|
||||
[35]
|
||||
<graphics/lobby_ui.png, id=454, 1929.2075pt x 1209.51875pt>
|
||||
File: graphics/lobby_ui.png Graphic file (type png)
|
||||
<use graphics/lobby_ui.png>
|
||||
Package pdftex.def Info: graphics/lobby_ui.png used on input line 1003.
|
||||
Package pdftex.def Info: graphics/lobby_ui.png used on input line 1004.
|
||||
(pdftex.def) Requested size: 409.50119pt x 256.73788pt.
|
||||
<graphics/ui_showcase.png, id=455, 2566.58875pt x 1412.27625pt>
|
||||
File: graphics/ui_showcase.png Graphic file (type png)
|
||||
<use graphics/ui_showcase.png>
|
||||
Package pdftex.def Info: graphics/ui_showcase.png used on input line 1010.
|
||||
Package pdftex.def Info: graphics/ui_showcase.png used on input line 1011.
|
||||
(pdftex.def) Requested size: 409.50119pt x 225.32233pt.
|
||||
[36 <./graphics/zone_server_architecture.pdf>] [37 <./graphics/lobby_ui.png> <
|
||||
./graphics/ui_showcase.png>] [38]
|
||||
<graphics/grafana.png, id=490, 2813.51125pt x 913.4125pt>
|
||||
File: graphics/grafana.png Graphic file (type png)
|
||||
<use graphics/grafana.png>
|
||||
Package pdftex.def Info: graphics/grafana.png used on input line 1043.
|
||||
Package pdftex.def Info: graphics/grafana.png used on input line 1044.
|
||||
(pdftex.def) Requested size: 409.50119pt x 132.9362pt.
|
||||
<graphics/300playerstrace.png, id=492, 1348.03625pt x 397.485pt>
|
||||
File: graphics/300playerstrace.png Graphic file (type png)
|
||||
<use graphics/300playerstrace.png>
|
||||
Package pdftex.def Info: graphics/300playerstrace.png used on input line 1057.
|
||||
Package pdftex.def Info: graphics/300playerstrace.png used on input line 1058.
|
||||
|
||||
(pdftex.def) Requested size: 409.50119pt x 120.74449pt.
|
||||
[39 <./graphics/grafana.png>]
|
||||
@@ -1657,25 +1657,25 @@ Package pdftex.def Info: graphics/300playerstrace.png used on input line 1057.
|
||||
File: graphics/latencycomparison.pdf Graphic file (type pdf)
|
||||
<use graphics/latencycomparison.pdf>
|
||||
Package pdftex.def Info: graphics/latencycomparison.pdf used on input line 110
|
||||
1.
|
||||
2.
|
||||
(pdftex.def) Requested size: 327.60219pt x 245.71564pt.
|
||||
<graphics/integrationcomparison.pdf, id=503, 462.52798pt x 346.89601pt>
|
||||
File: graphics/integrationcomparison.pdf Graphic file (type pdf)
|
||||
<use graphics/integrationcomparison.pdf>
|
||||
Package pdftex.def Info: graphics/integrationcomparison.pdf used on input line
|
||||
1111.
|
||||
1112.
|
||||
(pdftex.def) Requested size: 327.60219pt x 245.71564pt.
|
||||
[40 <./graphics/300playerstrace.png>] [41 <./graphics/latencycomparison.pdf> <
|
||||
./graphics/integrationcomparison.pdf>]
|
||||
<graphics/playerbenchmark.png, id=609, 1926.19624pt x 1221.56375pt>
|
||||
File: graphics/playerbenchmark.png Graphic file (type png)
|
||||
<use graphics/playerbenchmark.png>
|
||||
Package pdftex.def Info: graphics/playerbenchmark.png used on input line 1123.
|
||||
Package pdftex.def Info: graphics/playerbenchmark.png used on input line 1124.
|
||||
|
||||
(pdftex.def) Requested size: 204.7506pt x 129.84302pt.
|
||||
File: graphics/300playerstrace.png Graphic file (type png)
|
||||
<use graphics/300playerstrace.png>
|
||||
Package pdftex.def Info: graphics/300playerstrace.png used on input line 1134.
|
||||
Package pdftex.def Info: graphics/300playerstrace.png used on input line 1135.
|
||||
|
||||
(pdftex.def) Requested size: 409.50119pt x 120.74449pt.
|
||||
[42 <./graphics/playerbenchmark.png>]
|
||||
@@ -1683,27 +1683,27 @@ Package pdftex.def Info: graphics/300playerstrace.png used on input line 1134.
|
||||
File: graphics/ecs_optimization_tracy_01.png Graphic file (type png)
|
||||
<use graphics/ecs_optimization_tracy_01.png>
|
||||
Package pdftex.def Info: graphics/ecs_optimization_tracy_01.png used on input
|
||||
line 1149.
|
||||
line 1150.
|
||||
(pdftex.def) Requested size: 409.50119pt x 113.38686pt.
|
||||
<graphics/ecs_optimization_tracy_02.png, id=621, 1196.47pt x 583.17876pt>
|
||||
File: graphics/ecs_optimization_tracy_02.png Graphic file (type png)
|
||||
<use graphics/ecs_optimization_tracy_02.png>
|
||||
Package pdftex.def Info: graphics/ecs_optimization_tracy_02.png used on input
|
||||
line 1156.
|
||||
line 1157.
|
||||
(pdftex.def) Requested size: 409.50119pt x 199.59514pt.
|
||||
[43 <./graphics/ecs_optimization_tracy_01.png> <./graphics/ecs_optimization_tr
|
||||
acy_02.png>]
|
||||
Underfull \hbox (badness 10000) in paragraph at lines 1195--1195
|
||||
Underfull \hbox (badness 10000) in paragraph at lines 1196--1196
|
||||
[]|\T1/lmr/m/n/12 Název
|
||||
[]
|
||||
|
||||
|
||||
Underfull \hbox (badness 10000) in paragraph at lines 1199--1199
|
||||
Underfull \hbox (badness 10000) in paragraph at lines 1200--1200
|
||||
[]|\T1/lmr/m/n/12 Fixní
|
||||
[]
|
||||
|
||||
|
||||
Underfull \hbox (badness 10000) in paragraph at lines 1201--1201
|
||||
Underfull \hbox (badness 10000) in paragraph at lines 1202--1202
|
||||
[]|\T1/lmr/m/n/12 Hashovací
|
||||
[]
|
||||
|
||||
@@ -1711,7 +1711,7 @@ Underfull \hbox (badness 10000) in paragraph at lines 1201--1201
|
||||
<graphics/peer_to_peer.pdf, id=643, 433.62pt x 361.35pt>
|
||||
File: graphics/peer_to_peer.pdf Graphic file (type pdf)
|
||||
<use graphics/peer_to_peer.pdf>
|
||||
Package pdftex.def Info: graphics/peer_to_peer.pdf used on input line 1229.
|
||||
Package pdftex.def Info: graphics/peer_to_peer.pdf used on input line 1230.
|
||||
(pdftex.def) Requested size: 204.7506pt x 170.6285pt.
|
||||
[46 <./graphics/peer_to_peer.pdf>] [47
|
||||
|
||||
@@ -1719,7 +1719,7 @@ Package pdftex.def Info: graphics/peer_to_peer.pdf used on input line 1229.
|
||||
|
||||
]
|
||||
LaTeX Font Info: Trying to load font information for TS1+lmr on input line 1
|
||||
317.
|
||||
318.
|
||||
|
||||
(/usr/share/texmf-dist/tex/latex/lm/ts1lmr.fd
|
||||
File: ts1lmr.fd 2015/05/01 v1.6.1 Font defs for Latin Modern
|
||||
@@ -1796,7 +1796,7 @@ pe1/public/lm/lmri12.pfb></usr/share/texmf-dist/fonts/type1/public/lm/lmri8.pfb
|
||||
></usr/share/texmf-dist/fonts/type1/public/lm/lmsy10.pfb></usr/share/texmf-dist
|
||||
/fonts/type1/urw/courier/ucrb8a.pfb></usr/share/texmf-dist/fonts/type1/urw/cour
|
||||
ier/ucrr8a.pfb>
|
||||
Output written on kidiplom.pdf (51 pages, 1167703 bytes).
|
||||
Output written on kidiplom.pdf (51 pages, 1167714 bytes).
|
||||
PDF statistics:
|
||||
1028 PDF objects out of 1200 (max. 8388607)
|
||||
776 compressed objects within 8 object streams
|
||||
|
||||
Binary file not shown.
Binary file not shown.
+59
-56
@@ -115,8 +115,8 @@
|
||||
\newcommand{\inlcpp}[1]{\kiinlinecode{cpp}{!}{#1}}
|
||||
|
||||
%% Klíčová slova práce, včetně anglických. Oddělená (obvykle) středníkem.
|
||||
\keywords{styl textu; závěrečná práce; dokumentace; ukázkový text}
|
||||
\keywords[english]{text style; thesis; documentation; sample text}
|
||||
\keywords{distribuované systémy, C++, QUIC, optimalizace, videohra, herní engine}
|
||||
\keywords[english]{distributed systems, C++, QUIC, optimalizations, video game, game engine}
|
||||
|
||||
%% Volitelná specifikace příloh textu práce, i anglicky. Výchozí je
|
||||
%% 'elektronická data v systému katedry informatiky / electronic data
|
||||
@@ -158,17 +158,18 @@
|
||||
|
||||
\section{Úvod}
|
||||
|
||||
Hry pro více hráčů jsou stále populárnější. Například na internetovém tržišti her Steam 9 z 10 nejhranějších her podporuje hru více hráčů a 6 z nich dokonce ani nepodporuje hru pro jednoho hráče. Kvůli stále rostoucí popularitě online her vznikly sporty v počítačových hrách, tzv. \uv{e-sporty}, ve kterých se utkávají profesionální týmy proti sobě v kompetetivních hrách pro více hráčů. Kompetetivní hry jsou často rozděleny do zápasů a na jejich konci se provede evaluace hráčova skóre.
|
||||
Hry pro více hráčů jsou stále populárnější. Například na internetovém tržišti her Steam 9 z 10 nejhranějších her podporuje hru více hráčů a 6 z nich dokonce ani nepodporuje hru pro jednoho hráče. Kvůli rostoucí popularitě online her vznikly sporty v počítačových hrách, tzv. \uv{e-sporty}, ve kterých se utkávají profesionální týmy proti sobě v kompetetivních hrách pro více hráčů. Kompetetivní hry jsou často rozděleny do zápasů a na jejich konci se provede evaluace hráčova skóre.
|
||||
|
||||
Dalším typem jsou masivní multiplayerové online hry, tzv. MMO, které zvládnou online světy pro tisíce hráčů. Používají trochu jiné principy a optimalizace, aby systém fungoval optimálně. Kompetetivní hry se soustředí na minimální odezvu a masivní online hry na zvládání co nejvíce hráčů současně pro co nejživější svět.
|
||||
Dalším typem jsou masivní multiplayerové online hry, tzv. MMO, které zvládnou
|
||||
online světy pro tisíce hráčů. Používají poněkud odlišné principy a optimalizace, aby systém fungoval optimálně. Kompetetivní hry se soustředí na minimální odezvu a masivní online hry na zvládání co nejvíce hráčů současně pro co nejživější svět.
|
||||
|
||||
V práci se zaměřujeme právě na metody optimalizace datového přenosu v síťových systémech pro hry více hráčů. Charakteristiky jsme analyzovali a implementovali různá řešení. Na konci představíme naše testovací scénáře pro měření optimality těchto technik. Zároveň popíšeme, jaké nástroje jsme k měření použili a jak.
|
||||
V práci se zaměřujeme právě na metody optimalizace datového přenosu v síťových systémech pro hry více hráčů. Charakteristiky zanalyzujeme a implementujeme různá řešení. V závěru práce představíme naše testovací scénáře pro měření optimality těchto technik. Zároveň popíšeme nástroje k měření a jejich způsob použití.
|
||||
|
||||
Nejprve v další kapitole popíšeme distribuované systémy obecně: jak probíhá komunikace mezi dvěma procesy na dvou různých počítačích. Tyto procesy budeme skládat do distribuovaného systému. Uvedeme různé modely a atributy, které může komunikace nebo distribuovaný systém mít.
|
||||
Nejprve v následující kapitole popíšeme distribuované systémy obecně: jak probíhá komunikace mezi dvěma procesy na dvou různých počítačích. Tyto procesy budeme skládat do distribuovaného systému. Uvedeme různé modely a atributy, které může komunikace nebo distribuovaný systém mít.
|
||||
|
||||
V následujících kapitolách popisujeme samotnou hru. Představíme náš vlastní herní engine, který jsme vytvořili. Engine je navržen jako modulární monolit. Zároveň s ním budeme popisovat architekturu samotné hry. Začneme hrou pro jednoho hráče a návrh rozšíříme o hru více hráčů tak, aby byl přehledný a snadno se s kódem pracovalo.
|
||||
V navazujících kapitolách popisujeme samotnou hru. Představíme náš vlastní herní engine, který jsme vytvořili. Engine je navržen jako modulární monolit. Zároveň s ním popíšeme architekturu samotné hry. Začneme hrou pro jednoho hráče a návrh rozšíříme o hru více hráčů tak, aby byl přehledný a snadno se s kódem pracovalo.
|
||||
|
||||
Pro demonstraci různých technik jsme vytvořili hru. Jedná se o jednoduchou hru ve 3D prostoru, kde každý hráč má svou postavu, se kterou může pohybovat. Tu stavíme na vlastním herním enginu tak, abychom různé algoritmy měli pod kontrolou. Například jsme vytvořili vlastní protokol pro obousměrné posílání spolehlivých i nespolehlivých zpráv zvaný QUICr. Celý engine jsme navrhovali jako modulární monolit a snažíme se organizovat jednotlivé řešení problémů do modulů. Díky tomu je návrh intuitivní a snadno rozšiřitelný.
|
||||
Pro demonstraci různých technik jsme vytvořili hru. Jedná se o jednoduchou hru ve 3D prostoru, kde každý hráč má svou postavu, se kterou může pohybovat. Tu stavíme na vlastním herním enginu tak, abychom měli pod kontrolou různé algoritmy. Například jsme vytvořili vlastní protokol pro obousměrné posílání spolehlivých i nespolehlivých zpráv zvaný QUICr. Celý engine jsme navrhovali jako modulární monolit a snažíme se organizovat jednotlivé řešení problémů do modulů. Díky tomu je návrh intuitivní a snadno rozšiřitelný.
|
||||
|
||||
V poslední kapitole představíme měření, které jsme provedli a jejich výsledky. Ukážeme důležité metriky a uvidíme, že u vysokých frekvencí zpráv bylo třeba optimalizovat nejen datový přenos, ale i samotné kódování zpráv.
|
||||
|
||||
@@ -212,41 +213,41 @@ V poslední kapitole představíme měření, které jsme provedli a jejich výs
|
||||
|
||||
\section{Distribuované systémy}
|
||||
|
||||
V této kapitole představíme distribuované systémy. Nejprve si zadefinujeme, co distribuovaný systém je. Podíváme se, čím jsou specifické a jaké vlastnosti mohou mít. Následně se podíváme hlouběji jak takové systémy fungují. Distribuované systémy jsou často složité, proto představíme různé architektonické vzory, které i později při implementaci vlastního distribuovaného systému využijeme. Ty pomáhají s udržitelností systému.
|
||||
V této kapitole představíme distribuované systémy. Nejprve si zadefinujeme, co distribuovaný systém je. Podíváme se, čím jsou specifické a jaké vlastnosti mohou mít. Následně hlouběji vysvětlíme jak takové systémy fungují. Distribuované systémy jsou často složité, proto představíme různé architektonické vzory, které i později při implementaci vlastního distribuovaného systému využijeme. Ty pomáhají s udržitelností systému.
|
||||
|
||||
Začneme pojmem, co je vlastně počítačový systém. Ten se skládá ze služeb, každá implementovaná jako kolekce procesů, které dohromady plní společný úkol. Moderní systémy jsou ale čím dál větší a úkoly, které musí plnit, jsou složitější. To vedlo ke vzniku síťových systémů, ve kterých jsou procesy rozmístěné přes více počítačů a komunikují spolu posíláním zpráv. Výhod je hned několik. Část systému může být umístěna na počítači blíž uživateli pro snížení odezvy. Když jeden proces selže, může být jiný, který plní stejnou službu a může systém udržet v provozu. Konkrétní skupinou jsou distribuované systémy, které mají mnoho procesů rozmístěných přes více počítačů, které aktivně spolupracují a jeví se jako jeden celek.
|
||||
Začneme pojmem počítačový systém. Ten se skládá ze služeb, každá implementovaná jako kolekce procesů, které dohromady plní společný úkol. Moderní systémy jsou ale čím dál větší a úkoly, které musí plnit, jsou složitější. To vedlo ke vzniku síťových systémů, ve kterých jsou procesy rozmístěné přes více počítačů a komunikují spolu posíláním zpráv. Výhod je hned několik. Část systému může být umístěna na počítači blíž uživateli pro snížení odezvy. Pokud jeden proces selže, může existovat jiný, který plní stejnou službu a může systém udržet v provozu. Konkrétní skupinou jsou distribuované systémy, které se skládají z mnoha procesů rozmístěných na více počítačích. Tyto procesy spolu aktivně spolupracují a navenek se jeví jako jeden celek.
|
||||
|
||||
Příkladem distribuovaného systému je World Wide Web, zkráceně WWW. Jedná se o informační systém, který umožňuje prohlížet, ukládat a odkazovat dokumenty umístěné na internetu. Dokumenty mohou být například webové stránky, obrázky nebo videa a jsou uloženy na webových serverech. Odkazy na ně jsou ve formátu URL. Distribuovanost systému umožňuje snadné rozšíření, protože každý může snadno přidat svůj server se svými dokumenty, které se tak stanou dostupné v systému. To zároveň rozloží zátěž přes více počítačů a systém tak zvládá miliardy požadavků denně. Zároveň se celý systém jeví jako jeden celek, který z URL adresy vyhledá server a vrátí dokument.
|
||||
Příkladem distribuovaného systému je World Wide Web, zkráceně WWW. Jedná se o informační systém, který umožňuje prohlížet, ukládat a odkazovat na dokumenty umístěné na internetu. Dokumenty mohou být například webové stránky, obrázky nebo videa a jsou uloženy na webových serverech. Odkazy na ně jsou ve formátu URL. Distribuovanost systému umožňuje snadné rozšíření, protože každý může jednoduše přidat vlastní server s dokumenty, které se tak stanou dostupné v systému. To zároveň rozloží zátěž přes více počítačů a systém tak zvládá miliardy požadavků denně. Současně se celý systém jeví jako jeden celek, který z URL adresy vyhledá server a vrátí dokument.
|
||||
|
||||
\subsection{Počítačová síť} \label{sec:NetworkCommunication}
|
||||
|
||||
Distribované systémy stojí na počítačových sítích. Ty umožňují komunikaci mezi dvěma procesy na dvou různých počítačích. Počítačová síť je skupina propojených počítačů, které si mezi sebou přenášejí data. Definujeme několik typů sítí, které se liší velikostí a provedením. Například lokální sítě (LAN) propojují až tisíce počítačů, které jsou geograficky blízko, například v rámci jedné budovy. Rozsáhlé sítě (WAN) propojují miliony různých zařízení po celém světě. Příkladem je rozsáhlá síť Internet.
|
||||
Distribuované systémy stojí na počítačových sítích. Ty umožňují komunikaci mezi dvěma procesy na dvou různých počítačích. Počítačová síť je skupina propojených počítačů, které si mezi sebou přenášejí data. Definujeme několik typů sítí, které se liší velikostí a provedením. Například lokální sítě (LAN) propojují až tisíce počítačů, které jsou geograficky blízko, typicky v rámci jedné budovy. Rozsáhlé sítě (WAN) propojují miliony různých zařízení po celém světě. Příkladem je rozsáhlá síť Internet.
|
||||
|
||||
Počítačovou síť si lze představit jako graf, ve kterém počítače představují
|
||||
vrcholy a fyzická média mezi nimi jsou hrany. Vrcholy dále dělíme na \uv{koncové body} a \uv{propojovací prvky}. Díky propojovacím prvkům je možné poslat zprávu přes více vrcholů na cílový počítač. Příkladem takových prvků jsou přepínače, rozbočovače a opakovače. Tyto prvky mají za úkol třídit poslané zprávy a doručit je správnému koncovému bodu. Fungují tak podobně jako třídící centra pošty. Sítím, které využívají tyto prvky, se říká \uv{přepínané sítě}. Stejně jako u pošty, musejí mít koncové body přiřazenou unikátní \uv{síťovou adresu}. Koncové body jsou například stolní počítače, mobilní telefony a jiná zařízení, na kterých běží komunikující procesy.
|
||||
|
||||
Dva počítače, přímo propojené fyzickým médiem, komunikují posíláním n-tic bytů zvané \uv{rámce}. V přepínaných sítích mají rámce konkrétní formát, který pomáhá při hledání cesty v grafu, neboli \uv{směrování}. Takový formátovaný rámec se nazývá \uv{paket}. Skládá se z hlavičky, kde jsou informace ke směrování, jako síťovou adresu, a těla, kde je samotná zpráva.
|
||||
Dva počítače, přímo propojené fyzickým médiem, komunikují posíláním n-tic bytů zvané \uv{rámce}. V přepínaných sítích mají rámce konkrétní formát, který pomáhá při hledání cesty v grafu, neboli \uv{směrování}. Takový formátovaný rámec se nazývá \uv{paket}. Skládá se z hlavičky, kde jsou informace ke směrování, jako je například síťová adresa, a těla, kde se nachází samotná zpráva.
|
||||
|
||||
\subsubsection{Komunikace}
|
||||
|
||||
% az tady říkáme, že síťový systém nemá sdílenou pamět???
|
||||
V této části popíšeme, jak samotná komunikace posíláním zpráv funguje. Představíme, jaké nástroje a vzory používáme. Konkrétně nás bude zajímat, jak můžeme komunikaci co nejvíce skrýt. Dále zmíníme vlastnosti, které může komunikace mít.
|
||||
V této části popíšeme, jak samotná komunikace posíláním zpráv funguje. Představíme, jaké nástroje a vzory používáme. Konkrétně nás bude zajímat, jak můžeme komunikaci co nejvíce skrýt. Dále zmíníme vlastnosti komunikace.
|
||||
|
||||
Ke skrytí komunikace v distribuovaných systémech používáme komponenty, kterým se říká \uv{middleware}. Ty leží mezi aplikací a operačním systémem a poskytuje komunikační služby. Není závislá na žádné konkrétní aplikaci. Příkladem je distribuovaná služba DNS, která podle doménového jména vyhledá síťovou adresu, jako například adrese \texttt{www.seznam.cz} přiřadila dne 3. sprna 2026 síťovou IP adresu \texttt{77.75.77.222}.
|
||||
|
||||
Komunikace může mít různé vlasnosti. Například email je typický příklad \uv{persistentní} komunikace. Po odeslání si persistentní middleware zprávu uloží do té doby, dokud ji příjemce nepřijme. To znamená, že proces příjemce nemusí běžět v době, kdy odesílatel odesílá. Na druhou stranu máme \uv{transientní} komunikaci, kdy zpráva je uložena jen po dobu, kdy běží proces odesílatele a příjemce. To znamená, že pokud příjemce není dostupný, zprávu nikdy nepřijme.
|
||||
Komunikace může mít různé vlasnosti. Například email je typický příklad \uv{persistentní} komunikace. Po odeslání si persistentní middleware zprávu uloží do té doby, dokud ji příjemce nepřijme. To znamená, že proces příjemce nemusí běžět v době, kdy odesílatel odesílá. Na druhou stranu máme \uv{transientní} komunikaci, kdy je zpráva uložena jen po dobu, kdy běží proces odesílatele a příjemce. To znamená, že pokud příjemce není dostupný, zprávu nikdy nepřijme.
|
||||
|
||||
Dále může být komunikace \uv{synchronní} nebo \uv{asynchronní}. Asynchronní znamená, že odesílatel pokračuje v běhu okamžitě po odeslání zprávy. Ta se dočasně uloží v middleware do doby, než se odešle. Na druhou stranu při synchronní komunikaci volající proces zastaví, dokud neobdrží odpověď z cílového procesu. Obecně tedy definujeme tři momenty, kdy může nastat synchronizace (proces odesílatele pokračuje v práci). Zaprvé hned poté, co middleware převzal zprávu a zodpovědnost za její doručení. Zadruhé v moment, kdy byla zpráva doručena druhému procesu. Zatřetí až v moment, kdy druhá strana zpracovala požadavek a dostali jsme odpověď.
|
||||
Asynchronní komunikace znamená, že odesílatel po odeslání zprávy nemusí čekat na odpověď příjemce. Zpráva se dočasně uloží v middleware do doby, než se odešle. Na druhou stranu při synchronní komunikaci volající proces zastaví, dokud neobdrží odpověď z cílového procesu. Obecně definujeme tři různé momenty, ve kterých může proces odesílatele pokračovat v běhu. Zaprvé hned poté, co middleware převzal zprávu a zodpovědnost za její doručení. Zadruhé v moment, kdy byla zpráva doručena druhému procesu. Zatřetí až v moment, kdy druhá strana zpracovala požadavek a dostali jsme odpověď.
|
||||
|
||||
% TODO: Přidat referenčně vázanost?
|
||||
|
||||
\subsubsection{Modely pro komunikaci}
|
||||
|
||||
Představíme dva konkrétní způsoby, jakými se na komunikaci dívat. Nejedná se o konkrétní implementace, ale pouze modely, které můžeme při vývoji middleware použít. Zároveň si řekneme, jaké vlastnosti výsledná komunikace může mít.
|
||||
Představíme dva konkrétní pohledy na komunikaci. Nejedná se o konkrétní implementace, ale pouze modely, které můžeme při vývoji middleware použít. Zároveň si řekneme, jaké vlastnosti výsledná komunikace může mít.
|
||||
|
||||
Prvním přístupem je Remote Procedure Call, který procesu umožňuje zavolat lokální proceduru s implementací na jiném počítači. Tím kompletně skrývá, že objekt, který jsme zavolali, je na jiném počítači. Když proces A zavolá proceduru na počítači B, proces A se pozastaví a začne se vykonávat nový proces na počítači B. Ten spouští zavolanou metodu. Jakmile metoda vrátí, pošle se výsledek zpět na počítač s procesem A, který poté i s výsledkem pokračuje. Tento model je synchronní a transientní. Cílem je, aby volání vypadalo jako by implementace byla lokální a skrýt tak komunikaci mezi počítači.
|
||||
Prvním přístupem je Remote Procedure Call, který procesu umožňuje zavolat lokální proceduru s implementací na jiném počítači. Tím kompletně skrývá, že objekt, který jsme zavolali, je na jiném počítači. Pokud proces A zavolá proceduru na počítači B, proces A se pozastaví a začne se vykonávat nový proces na počítači B. Ten spouští zavolanou metodu. Jakmile metoda vrátí výsledek, pošle ho proces zpět na počítač s procesem A, který poté i s výsledkem pokračuje. Tento model je synchronní a transientní. Cílem je, aby volání vypadalo jako lokální implementace a skryla tak komunikaci mezi počítači.
|
||||
|
||||
Jedná se o intuitivní řešení, ale přináší pár problémů. Dva počítače mají různý adresní prostor, proto je třeba vyřešit, jak bude procedura využívat ukazatele do svého adresního prostoru, nebo jestli tuto vlastnost zakáže.
|
||||
Jedná se o intuitivní řešení, ale přináší několik problémů. Dva počítače mají různý adresní prostor, proto je třeba vyřešit, jak bude procedura využívat ukazatele do svého adresního prostoru, nebo jestli tuto vlastnost zakáže.
|
||||
|
||||
% TODO: Možná pomaleji zmínit logické cíle
|
||||
Druhým přístupem je posílání zpráv. V tomto přístupu posílají procesy zprávy na
|
||||
@@ -264,33 +265,33 @@ Opět je potřeba, aby se dva koncové body shodli na významu bitů jednotlivý
|
||||
\subsection{Architektury systémů}
|
||||
|
||||
% TODO: Divně zmiňuji příklady
|
||||
V praktické části představujeme náš ukázkový síťový systém, který umožňuje hru pro více hráčů. V návrhu jsme využívali známé vzory, které představíme. Návrh systému rozdělíme na dvě části: softwarovou a systémovou architekturu. V softwarové architektuře řešíme komponenty a konektory mezi nimi. Druhá část architektury, která řeší role jednotlivých služeb, se nazývá \uv{systémová architektura}. Mezi příklady patří peer-to-peer nebo klient-server.
|
||||
V praktické části představujeme náš ukázkový síťový systém, který umožňuje hru pro více hráčů. V návrhu využijeme známé vzory, které podrobněji představíme. Návrh systému rozdělíme na dvě části: softwarovou a systémovou architekturu. V softwarové architektuře se zabýváme komponentami a konektory mezi nimi. Druhá část architektury, která řeší role jednotlivých služeb, se nazývá \uv{systémová architektura}. Mezi příklady patří peer-to-peer nebo klient-server.
|
||||
|
||||
Pro ilustraci rozdílu představíme známý příklad třívrstvé softwarové architektury: databázová, výpočetní a frontendová vrstva. Systémová architektura poté definuje, že databáze jako služba pro výpočetní vrstvu má roli serveru. Naopak služba pro replikaci ve skupině databázových serverů využívající model peer-to-peer má roli jak serveru, tak klienta. Typy si rozebereme podrobněji v této kapitole.
|
||||
Pro ilustraci rozdílu představíme známý příklad třívrstvé softwarové architektury: databázová, výpočetní a frontendová vrstva. Systémová architektura dále definuje databázi jako službu, která vůči výpočetní vrstvě plní roli serveru. Naopak služba pro replikaci ve skupině databázových serverů využívající model peer-to-peer má roli jak serveru, tak klienta. Typy si rozebereme podrobněji v této podkapitole.
|
||||
|
||||
\subsubsection{Softwarová architektura}
|
||||
|
||||
Nejprve se zaměříme na softwarovou architekturu. V ní řešíme komponenty a konektory mezi nimi. Představíme tři známé vzory: vrstvená architektura, architektura orientovaná na služby a publish-subscribe architektura.
|
||||
Nejprve se zaměříme na softwarovou architekturu. Zde řešíme komponenty a konektory mezi nimi. Představíme tři známé vzory: vrstvená architektura, architektura orientovaná na služby a publish-subscribe architektura.
|
||||
|
||||
Pokud komponenty organizujeme do vrstev, kde komponenta ve vrstvě $N$ může volat rozhraní vrstvy $N-1$, říkáme tomu \uv{vrstvená architektura}. Příkladem je vrstva operačního systému, nad kterým je vrstva uživatelského prostoru. Vrstva $N-1$ nemá možnost volat rozhraní vrstvy $N$. Díky tomu lze na sebe vrstvy snadno skládat.
|
||||
|
||||
|
||||
Občas je možné, aby nižší vrstva volala vyšší, ale mělo by se dít přes rozhraní definované nižší vrstvou, které vyšší vrstva pouze implementuje. Tomuto principu se říká \uv{obrácení závislostí}. Udržíme tak závislost $N$ na $N-1$ a $N-1$ zůstane nezávislá. Příkladem je operační systém, který oznamuje událost aplikaci. Aplikace proto registruje funkci, která se v případě události zavolá. Rozhraní funkce ale určuje vrstva pod ní: operační systém.
|
||||
Občas je možné, aby nižší vrstva volala vyšší. Takové volání by však mělo probíhat prostřednictvím rozhraní definovaného nižší vrstvou, které vyšší vrstva pouze implementuje. Tomuto principu se říká \uv{obrácení závislostí}. Udržíme tak závislost $N$ na $N-1$ a $N-1$ zůstane nezávislá. Příkladem je operační systém, který oznamuje událost aplikaci. Aplikace proto registruje funkci, která se v případě události zavolá. Rozhraní funkce ale určuje vrstva pod ní: operační systém.
|
||||
|
||||
Nevýhodou vrstvené architektury je silná provázanost mezi vrstvami. Možnost je software organizovat do nezávislých entit, kde každá zapouzdřuje službu. Ty pak mezi sebou mohou volně komunikovat. Takovým entitám se říká: služba, objekt nebo mikroslužba. Na komponenty se můžeme dívat jako na objekty a konektory mezi nimi jsou volání metod neboli posílání zpráv. Tento přístup je relevantní pro distribuované systémy, protože instance objektů mohou být rozmístěny na více počítačích. K tomu lze použít například RPC, které jsme zmínili.
|
||||
|
||||
V případě služeb musí služba znát adresu nebo jméno jiné služby, kterou chce využívat. Někdy říkáme, že služby jsou \uv{referenčně vázané}. Tuto závislost lze odstranit pomocí publish-subscribe architektury. V ní každá služba publikuje \uv{události} do \uv{témat}. Služby mohou témata odebírat, a to znamená, že budou dostávat všechny události, které jsou publikované do daného tématu. Tuto službu distribuce události a správy témat zajišťuje \uv{broker}, který má všem známou adresu. Odesílatel události neví, kdo na jeho událost zareaguje a jak.
|
||||
|
||||
Tento princip lze využít u systémů pro hry více hráčů pro komunikační kanály. Klient hráče chce například napsat do lokálního kanálu města, ve kterém se v herním světě nachází. Komponenta pro chatovou službu tuto zprávu zařadí do správného kanálu a rozešle klientům, kteří tento kanál také odebírají.
|
||||
Tento princip lze využít u systémů pro hry více hráčů pro komunikační kanály. Klient hráče chce například napsat do lokálního kanálu města, ve kterém se v herním světě nachází. Komponenta pro chatovou službu tuto zprávu zařadí do správného kanálu a rozešle ji klientům, kteří tento kanál také odebírají.
|
||||
|
||||
|
||||
\subsubsection{Systémové architektury} \label{sec:system_architecture}
|
||||
|
||||
Pro systémové architektury představíme a později využijeme dva modely: asymetrickou klient-server a symetrickou peer-to-peer.
|
||||
Pro systémové architektury představíme a později využijeme dva modely: asymetrickou klient-server a symetrickou peer-to-peer architekturu.
|
||||
|
||||
Asymetrickou architekturou, kde je komponenta buď server, nebo klient, se nazývá \uv{klient-server}. Pouze klienti mohou serverům posílat dotazy a dostávat od nich odpovědi. Vztah je tedy asymetrický. Příkladem jsou webové servery a webové prohlížeče, které fungují jako klienti. Tento model se hodí například pro autoritativní server, který určuje stav hry a pouze jej replikuje klientům. Usnadňuje synchronizaci jednotlivých klientů a zvyšuje efektivitu, protože se účastníci nemusí shodovat, ale pouze přijmou pravdu ze serveru.
|
||||
Asymetrickou architekturou, kde je komponenta buď server nebo klient, se nazývá \uv{klient-server}. Pouze klienti mohou serverům posílat dotazy a dostávat od nich odpovědi. Vztah je tedy asymetrický. Příkladem jsou webové servery a webové prohlížeče, které fungují jako klienti. Tento model se hodí například pro autoritativní server, který určuje stav hry a pouze jej replikuje klientům. Usnadňuje synchronizaci jednotlivých klientů a zvyšuje efektivitu, protože se účastníci nemusí shodovat, ale pouze přijmou pravdu ze serveru.
|
||||
|
||||
Symetrická architektura, kdy obě strany jsou si rovny, se nazývá \uv{peer-to-peer}. Znamená to, že obě strany mohou posílat požadavky a zprávy na druhou stranu. Tento přístup je užitečný, pokud dva procesy mají stejnou roli a jedná se tedy pouze o repliku té stejné služby. To je potřeba, pokud je zátěž na systém až moc velká a jeden počítač ji nezvládne. Například můžeme mít více počítačů na kterých běží herní server stejné instance hry. Herní svět můžeme rozdělit na zóny a každý proces dostane svou zónu. Žádná zona není nadřazená jiné, proto spolu mohou procesy komunikovat modelem peer-to-peer a předávat si tak události, které v zónách nastali. Například sousední zóny může zajímat, že se hráč blíží k okraji a za chvíli přejde do jiné zóny. Následně může původní zóna hráče \uv{předat} druhému procesu.
|
||||
Symetrická architektura, kdy jsou obě strany rovny, se nazývá \uv{peer-to-peer}. Znamená to, že obě strany mohou posílat požadavky a zprávy na druhou stranu. Tento přístup je užitečný, pokud dva procesy mají stejnou roli a jedná se tedy pouze o repliku té stejné služby. To je potřeba, pokud je zátěž na systém příliš velká a jeden počítač ji nezvládne. Například můžeme mít více počítačů, na kterých běží herní server stejné instance hry. Herní svět můžeme rozdělit na zóny a každý proces dostane svou zónu. Žádná zona není nadřazená jiné, proto spolu mohou procesy komunikovat modelem peer-to-peer a předávat si tak události, které v zónách nastaly. Například sousední zóny může zajímat, že se hráč blíží k okraji a za chvíli přejde do jiné zóny. Následně může původní zóna hráče \uv{předat} druhému procesu.
|
||||
|
||||
|
||||
|
||||
@@ -302,9 +303,9 @@ Symetrická architektura, kdy obě strany jsou si rovny, se nazývá \uv{peer-to
|
||||
\section{Protokoly}
|
||||
|
||||
% Weird
|
||||
V této části podrobně popíšeme, jak se komunikace realizuje. Aby si dva počítače rozumněli, musejí se shodnout na významu jednotlivých bytů rámců, které si posílají. To definuje \uv{komunikační protokol}: soubor pravidel pro výměnu informací mezi počítači. Představíme několik už existujících protokolů a jejich vlasnosti. V praktické části jsme vypracovali vlastní protokol optimalizovaný pro distribuované systémy her více hráčů.
|
||||
V této kapitole podrobně popíšeme, jak se komunikace realizuje. Aby si dva počítače rozumněly, musejí se shodnout na významu jednotlivých bytů rámců, které si posílají. To definuje \uv{komunikační protokol} - soubor pravidel pro výměnu informací mezi počítači. Představíme několik už existujících protokolů a jejich vlasnosti. V praktické části jsme vypracovali vlastní protokol optimalizovaný pro distribuované systémy her více hráčů.
|
||||
|
||||
Každý protokol poskytuje komunikační služby. Tyto služby rozdělujeme na dvě skupiny: ty co před komunikací navážou spojení a ty co ne. V prvním případě musejí obě strany přijmout a navázat spojení a potencionálně se domluvit na jeho dalších parametrech. Jakmile jejich komunikace skončí, spojení se ukončí. Příkladem takové služby je telefoní linka. V druhém případě může odeslat zprávu kdykoliv a bez předchozího upozornění druhé strany. Příkladem takové komunikace je posílání emailu.
|
||||
Každý protokol poskytuje komunikační služby. Tyto služby rozdělujeme na dvě skupiny: služby, které před zahájením komunikace navazují spojení, a služby, které spojení nenavazují. V prvním případě musejí obě strany přijmout a navázat spojení a potencionálně se domluvit na jeho dalších parametrech. Jakmile jejich komunikace skončí, spojení se ukončí. Příkladem takové služby je telefonní linka. V druhém případě může odeslat zprávu kdykoliv a bez předchozího upozornění druhé strany. Příkladem takové komunikace je posílání emailu.
|
||||
|
||||
\begin{figure}
|
||||
\begin{center}
|
||||
@@ -317,13 +318,13 @@ Každý protokol poskytuje komunikační služby. Tyto služby rozdělujeme na d
|
||||
|
||||
\subsection{Rodina protokolů TCP/IP}
|
||||
|
||||
Rodina protokolů pro komunikaci v síti Internet se nazývá TCP/IP. Jedná se o více komunikačních protokolů, organizovaných do vrstev. Tuto architekturu vidíme na obrázku \ref{fig:layer_architecture}. Každá vrstva má svůj konkrétní význam a jinou zodpovědnost. Tuto zodpovědnost pak plní služba, která v dané vrstvě je. V jedné službě vidíme dva koncové body na dvou počítačích. Oba poskytují rozhraní pro svou instanci. To, že jsou instance fyzicky oddělené je skryté právě za komunikační službu. Vrstva $N$ zapisuje a čte z vrsvy $N-1$ a neřeší, jak si dva koncové body v $N-1$ zapsané informace předají, aby je druhá strana mohla číst. Způsob, jakým si koncové body ve vrstvě předávají informace, je právě protokol.
|
||||
Rodina protokolů pro komunikaci v síti Internet se nazývá TCP/IP. Jedná se o více komunikačních protokolů, organizovaných do vrstev. Tuto architekturu vidíme na obrázku \ref{fig:layer_architecture}. Každá vrstva má svůj konkrétní význam a jinou zodpovědnost. Tuto zodpovědnost pak plní služba v dané vrstvě. V jedné službě vidíme dva koncové body na dvou počítačích. Oba poskytují rozhraní pro svou instanci. To, že jsou instance fyzicky oddělené, je skryté právě za komunikační službou. Vrstva $N$ zapisuje a čte z vrsvy $N-1$ a neřeší, jak si dva koncové body ve vrstvě $N-1$ zapsané informace předají, aby je druhá strana mohla číst. Způsob, jakým si koncové body ve vrstvě předávají informace, je právě protokol.
|
||||
|
||||
Rodina protokolů se řídí principem \uv{end-to-end}, který říká, že body mezi odesílatelem a příjemcem, jako směrovače a přepínače, by měli být co nejjednodušší. Spolehlivost a navázání spojení musejí implementovat až dva koncové body. Případné ztráty paketu musí odesílatel zjistit a ztracené pakety odeslat znovu.
|
||||
Rodina protokolů TCP/IP se řídí principem \uv{end-to-end}, který říká, že body mezi odesílatelem a příjemcem, jako směrovače a přepínače, by měly být co nejjednodušší. Spolehlivost a navázání spojení musejí implementovat až dva koncové body. Případné ztráty paketu musí odesílatel zjistit a ztracené pakety odeslat znovu.
|
||||
|
||||
Ztráta paketu nastává, když je některý z přepínačů na cestě mezi odesílatelem a příjemcem, zahlcený. Přepínač si přijaté pakety ukládá do fixně velké fronty, ze které také postupně odebírá a snaží se najít další vhodný uzel, kam každý paket poslat. Pro případ přehlcení fronty má přepínač definovanou politiku\cite{computer_networks}. Běžná je politika \uv{tail-drop}, která nově příchozí paket, který se nevejde do fronty, zahodí. V tento moment se paket ztrácí.
|
||||
Ztráta paketu nastává, když je některý z přepínačů na cestě mezi odesílatelem a příjemcem, zahlcený. Přepínač si přijaté pakety ukládá do fixně velké fronty, ze které poté postupně odebírá a snaží se najít další vhodný uzel, kam daný paket poslat. Pro případ přehlcení fronty má přepínač definovanou politiku\cite{computer_networks}. Běžně se používá politika \uv{tail-drop}, při níž je nově příchozí paket, který se nevejde do fronty, zahozen. V tento moment se paket ztrácí.
|
||||
|
||||
Název rodiny protokolů se skládá ze dvou důležitých protokolů: IP (Internet Protocol) a TCP (Transmission Control Protocol). IP umožňuje komunikaci libovolných dvou uzlů počítačů v propojených sítích. Definuje formát adresy koncových bodů a směrování. Protokol nenavazuje spojení ani nezaručuje doručení. TCP zajišťuje spolehlivý obousměrný přenos dat mezi procesy na dvou počítačích (ne nutně různých).
|
||||
Název rodiny protokolů se skládá ze dvou důležitých protokolů: IP (Internet Protocol) a TCP (Transmission Control Protocol). IP umožňuje komunikaci libovolné dvojice uzlů počítačů v propojených sítích. Definuje formát adresy koncových bodů a směrování. Protokol nenavazuje spojení ani nezaručuje doručení. TCP zajišťuje spolehlivý obousměrný přenos dat mezi procesy na dvou počítačích (ne nutně různých).
|
||||
|
||||
% Spolehlivost zaručuje tak, že příjemce pro každý přijatý paket odešle potvrzující zprávu, že paket přijal. To protokol implementuje na koncových bodech frontou paketů, které bod potřebuje odeslat. Zároveň si udržuje okno těch, které jsou odeslané, ale ještě nepotvrzené. Pokud není potvrzeno až příliš mnoho paketů, tak rozsah okna zmenší.
|
||||
|
||||
@@ -335,17 +336,17 @@ Název rodiny protokolů se skládá ze dvou důležitých protokolů: IP (Inter
|
||||
\label{fig:tcpip}
|
||||
\end{figure}
|
||||
|
||||
Popíšeme vrstvy, ze kterých se rodina TCP/IP skládá. Konkrétně jsou čtyři: aplikační, transportní, síťová a síťové rozhraní. Každá vrstva obsahuje množinu protokolů a pro různé situace můžeme protokoly ve vrstvách kombinovat. Na obrázku \ref{fig:tcpip} vidíme, jak mezi sebou jednotlivé vrstvy komunikují. Aplikace na počítači $A$ zapíše do transportní vrstvy, kterou počítač $D$ ze stejné vrsvy přečte. Vrstva zná pouze vrstvu pod sebou. Plnou čarou vidíme datový tok zprávy, jak putuje přes jednotlivé vrstvy. Šrafovaná čára reprezentuje protokol. Počítače B a C jsou propojovací body. Všimněme si, že se nepoužívají transportní nebo aplikační vrstvy, pouze si rozbalí IP paket a zjistí, kam mají pakety posílat dál. Vrstva síťového rozhraní pracuje s různými médii, jak také vidíme na obrázku.
|
||||
Popíšeme vrstvy, ze kterých se rodina TCP/IP skládá. Konkrétně jsou čtyři: aplikační, transportní, síťová a síťové rozhraní. Každá vrstva obsahuje množinu protokolů a pro různé situace můžeme protokoly ve vrstvách kombinovat. Na obrázku \ref{fig:tcpip} vidíme, jak mezi sebou jednotlivé vrstvy komunikují. Aplikace na počítači $A$ zapíše zprávu do transportní vrstvy, kterou počítač $D$ ze stejné vrsvy přečte. Vrstva zná pouze vrstvu pod sebou. Plnou čarou vidíme datový tok zprávy, jak putuje přes jednotlivé vrstvy. Přerušovaná čára reprezentuje protokol. Počítače B a C jsou propojovací body. Všimněme si, že se nepoužívají transportní nebo aplikační vrstvy, pouze si rozbalí IP paket a zjistí, kam mají pakety posílat dál. Vrstva síťového rozhraní pracuje s různými médii, jak také vidíme na obrázku.
|
||||
|
||||
\begin{description}
|
||||
\item[{Aplikační}] \hfill \\
|
||||
Nejvyšší je \uv{aplikační} vrstva, ve které jsou protokoly přímo pro aplikace. Příkladem protokolů jsou FTP pro přenos souborů, SMTP pro emailovou komunikaci, HTTP pro přenos hypertextových dokumentů nebo gRPC pro implementaci RPC. Tato vrstva je rozbalena až na koncovém bodu, protože neobsahuje žádné podstatné informace pro směrování. To je vidět i na obrázku \ref{fig:tcpip}.
|
||||
První nejvyšší je \uv{aplikační} vrstva, ve které se nachází protokoly přímo pro aplikace. Příkladem protokolů jsou FTP pro přenos souborů, SMTP pro emailovou komunikaci, HTTP pro přenos hypertextových dokumentů nebo gRPC pro implementaci RPC. Tato vrstva je rozbalena až na koncovém bodu, protože neobsahuje žádné podstatné informace pro směrování. To je vidět i na obrázku \ref{fig:tcpip}.
|
||||
|
||||
\item[{Transportní}] \hfill \\
|
||||
Druhá vrstva je \uv{transportní}. Tato vrstva, stejně jako aplikační, je rozbalena až na koncových bodech. Stará se o to, jaké pakety přišli, v jakém pořadí a jestli nejsou poškozené. Příkladem protokolů jsou TCP, UDP nebo QUIC.
|
||||
Druhá vrstva je \uv{transportní}. Tato vrstva, stejně jako aplikační, je rozbalena až na koncových bodech. Stará se o to, jaké pakety přišly, v jakém pořadí a jestli nejsou poškozené. Příkladem protokolů jsou TCP, UDP nebo QUIC.
|
||||
|
||||
\item[{Síťová}] \hfill \\
|
||||
Pro adresaci slouží síťová vrstva. Ta směruje a předává jednotlivé datagramy. Příkladem protokolů jsou IP, ARP, RARP nebo IPSEC. Je nutné, aby stejně jako vrstva síťového rozhraní, byla implementována ve všech vrcholech na cestě mezi dvěma počítači, které chtějí komunikovat přes internet.
|
||||
Pro adresaci slouží \uv{síťová} vrstva. Ta směruje a předává jednotlivé datagramy. Příkladem protokolů jsou IP, ARP, RARP nebo IPSEC. Je nutné, aby stejně jako vrstva síťového rozhraní, byla implementována ve všech vrcholech na cestě mezi dvěma počítači, které chtějí komunikovat přes internet.
|
||||
|
||||
\item[{Síťové rozhraní}] \hfill \\
|
||||
Nejnižší vrstva, která se stará o přenos přes fyzické médium. Pro různé fyzické média existují různé protokoly. Příkladem jsou Ethernet, Token ring a další.
|
||||
@@ -373,15 +374,15 @@ Nejvyšší v rodině protokolů TCP/IP je aplikační vrstva s protokoly jako H
|
||||
% - Odpovědi musí chodit ve stejném pořadí, jako přišli požadavky
|
||||
% - Zde může docházet k blokování
|
||||
|
||||
Velmi používaný protokol v systému World Wide Web je HTTP, neboli Hyper Text Transfer Protokol. Především slouží pro přenos hypertextových dokumentů, jako například HTML. Původně byl navržen pro komunikaci mezi prohlížečem, neboli klientským agentem, a webovým serverem. Dnes se využívá i pro API dotazy. Protokol je klient-server, to znamená, že jedna strana je klient a druhá server. Pouze klient může na server posílat dotazy a server posílá zpátky odpověď. Server nemůže poslat dotaz na klienta. I když už jsou způsoby, jak může server posílat alespoň události.
|
||||
Velmi používaný protokol v systému World Wide Web je HTTP, neboli Hyper Text Transfer Protokol. Slouží především pro přenos hypertextových dokumentů, jako například HTML. Původně byl navržen pro komunikaci mezi prohlížečem, neboli klientským agentem, a webovým serverem. Dnes se využívá i pro API dotazy. Protokol je klient-server, to znamená, že jedna strana je klient a druhá server. Pouze klient může na server posílat dotazy a server posílá zpátky odpověď. Server nemůže poslat dotaz na klienta. I když už jsou způsoby, jak může server posílat alespoň události.
|
||||
|
||||
Protokol je textový a snadno čitelný člověkem. Navíc je rozšiřitelný pomocí hlaviček. Protokol je bezestavový. To znamená, že server mezi dvěma dotazy nemá žádnou vazbu. Podporuje ale relace, kdy v dotazu můžeme serveru sdělit identifikátor kontextu, který chceme použít. Server si musí tyto kontexty ukládat. Je request-reply. V první verzi, HTTP/1, bylo třeba otevřít nové TCP připojení pro všechny. Ve verzi HTTP/2 je podpora pro multiplexní dotazování. To znamená, že jedno navázané spojení lze využít na více dotazů. To může ušetřit čas, protože se tak vyhneme navazování spojení. Funguje to tak, že přes jedno spojení lze odeslat více dotazů a odpovědi musejí chodit ve stejném pořadí. Už zde je vidět možný problém, který se nazývá \uv{head-of-line} blokování. Znamená to, že pokud první dotaz trvá dlouho a přitom je nepodstatný, a druhý dotaz je krátký a podstatný, může první dotaz blokovat ten druhý. Klienti by se měli snažit nejprve odeslat jednoduché dotazy a ty zdlouhavější až potom.
|
||||
Protokol je textový a snadno čitelný člověkem. Navíc je rozšířitelný pomocí hlaviček. Protokol je bezestavový. To znamená, že server mezi dvěma dotazy nemá žádnou vazbu. Podporuje ale relace, kdy v dotazu můžeme serveru sdělit identifikátor kontextu, který chceme použít. Server si musí tyto kontexty ukládat. Je request-reply. V první verzi, HTTP/1, bylo třeba otevřít nové TCP připojení pro všechny. Ve verzi HTTP/2 je podpora pro multiplexní dotazování. To znamená, že jedno navázané spojení lze využít na více dotazů. To může ušetřit čas, protože se tak vyhneme navazování spojení. Funguje tak, že přes jedno spojení lze odeslat více dotazů a odpovědi musejí chodit ve stejném pořadí. Už zde je vidět možný problém, který se nazývá \uv{head-of-line} blokování. Znamená to, že pokud první dotaz trvá dlouho a přitom je nepodstatný, a druhý dotaz krátký a podstatný, může první dotaz blokovat ten druhý. Klienti by se měli snažit nejprve odeslat jednoduché dotazy a teprve poté ty zdlouhavější.
|
||||
|
||||
|
||||
|
||||
\subsubsection{HTTP/3}
|
||||
|
||||
Zajímavou novinkou je HTTP/3, která je založena na protokolu QUIC, který je založen na UDP namísto TCP. Podporuje více \uv{multiplexových} proudů už na transportní vrstvě. To znamená, že agent klienta může v jednom HTTP/3 stahovat najednou vícero dokumentů nezávisle. Pro jednu stránku je třeba stáhnout CSS, JS i HTML dokumenty. V HTTP/2 se všechny stahují jedním proudem střídavě, což způsobuje tzv. head-of-line blokování. Na obrázku \ref{fig:http_blocking} vidíme porovnání TCP v HTTP/2 a QUIC v HTTP/3. V prvním případě stahujeme dva dokumenty: $A$ z částí $A1$ a $A2$ a $B$ z částí $B1$ a $B2$. Když server odesílá v pořadí $A1$, $B1$, $A2$ a $B2$, a $B1$ se nedoručí, tak i když už se stihli doručit $A2$ a $B2$, tak je nemůžeme začít zpracovávat, protože protokol čeká na B1. Na druhou stranu protokol QUIC může mít pro každý dokument vlastní frontu a tím blokování kompletně eliminovat.
|
||||
Zajímavou novinkou je HTTP/3, která je založena na protokolu QUIC, který je založen na UDP namísto TCP. Podporuje více \uv{multiplexových} proudů už na transportní vrstvě. To znamená, že agent klienta může v jednom HTTP/3 stahovat najednou vícero dokumentů nezávisle. Pro jednu stránku je třeba stáhnout CSS, JS i HTML dokumenty. V HTTP/2 se všechny stahují jedním proudem střídavě, což způsobuje \uv{head-of-line} blokování. Na obrázku \ref{fig:http_blocking} vidíme porovnání TCP v HTTP/2 a QUIC v HTTP/3. V prvním případě stahujeme dva dokumenty: dokument $A$ složen z částí $A1$ a $A2$ a dokument $B$ složen z částí $B1$ a $B2$. Pokud server odesílá části v pořadí $A1$, $B1$, $A2$ a $B2$, a část $B1$ se nedoručí, nelze začít zpracovávat ani části $A2$ a $B2$, přestože byly doručeny. Protokol totiž čeká na doručení části $B1$. Nezná závislosti mezi částmi a předpokládá tedy úplné seřazení tak, jak byly odeslány. Na druhou stranu protokol QUIC může mít pro každý dokument vlastní frontu a tím blokování kompletně eliminovat.
|
||||
|
||||
\begin{figure}
|
||||
\begin{minipage}{0.48\textwidth}
|
||||
@@ -413,21 +414,23 @@ Nejčastějším protokolem je TCP, který naváže spojení a zaručuje spolehl
|
||||
|
||||
\subsubsection{TCP}
|
||||
|
||||
Nejběžnější protokol je TCP. Při použití mezi sebou dva koncové body vytvoří spojení s obousměrným proudem bytů. Protokol garantuje spolehlivé doručení dat v pořadí, ve kterém byly odeslány. Zároveň řeší zahlcení sítě udržováním okna paketů, které jsou v oběhu a redukuje jeho velikost v případě, že je síť přehlcená. To pozná tak, že si pakety čísluje a příjemce musí za každý odeslat potvrzení, že paket přijal. Pokud odesílatel toto potvrzení do časového limitu od odeslání nedostane, odešle paket znovu. Pokud nedostává potvrzení pro až moc velkou část okna, může toto okno zmenšit. Tím sníží i zatížení sítě.
|
||||
Nejběžnější protokol je TCP. Při použití mezi sebou dva koncové body vytvoří spojení s obousměrným proudem bytů. Protokol garantuje spolehlivé doručení dat v pořadí, ve kterém byly odeslány. Zároveň řeší zahlcení sítě udržováním okna paketů, které jsou v oběhu a redukuje jeho velikost v případě, že je síť přehlcená. To pozná tak, že pakety čísluje a příjemce musí za každý paket odeslat potvrzení, že paket přijal. Pokud odesílatel toto potvrzení do časového limitu od odeslání nedostane, odešle paket znovu. Pokud nedostává potvrzení pro příliš velkou část okna, může toto okno zmenšit. Tím sníží i zatížení sítě.
|
||||
|
||||
Pro navázání spojení a následnou komunikaci musejí oba procesy vytvořit koncový bod. Velmi často používané rozhraní je přes \uv{soket}. Jedná se o objekt, který se chová jako soubor. Odesílatel do něj zapisuje data, která chce odeslat a příjemce je z něj může přečíst. Na jednom počítači může být otevřeno více soketů a jsou identifikované \uv{portem}. Ten slouží pro směrování paketů správnému soketu, ze kterého příjemce čte. Pro navázání musí jedna strana spojení iniciovat a druhá ho musí přijmout.
|
||||
Pro navázání spojení a následnou komunikaci musejí oba procesy vytvořit koncový bod. Velmi často používané rozhraní je přes \uv{soket}. Jedná se o objekt, který se chová jako soubor. Odesílatel do něj zapisuje data, která chce odeslat a příjemce je z něj může přečíst. Na jednom počítači může být otevřeno více soketů a jsou identifikované \uv{portem}. Ten slouží pro směrování paketů správnému soketu, ze kterého příjemce čte. Pro navázání spojení musí jedna strana spojení iniciovat a druhá jej musí přijmout.
|
||||
|
||||
Popíšeme si, jak TCP zajišťuje spolehlivost pomocí odesílání potvrzení o přijetí. Pokaždé, co příjemce dostane paket, odešle druhému koncovému bodu zprávu označenou jako \uv{ACK} s číslem paketu. V případě, že odesílatel potvrzení o přijetí nedostane, odešle paket znova. Příjemce si u sebe postupně skládá seřazený proud bytů. Jakmile je na socketu seřazená posloupnost bytů, umožní ji ze soketu přečíst.
|
||||
Popíšeme si, jak TCP zajišťuje spolehlivost pomocí odesílání potvrzení o přijetí. Pokaždé, kdy příjemce dostane paket, odešle druhému koncovému bodu zprávu označenou jako \uv{ACK} s číslem paketu. V případě, že odesílatel potvrzení o přijetí nedostane, odešle paket znova. Příjemce si u sebe postupně skládá seřazený proud bytů. Jakmile je na socketu seřazená posloupnost bytů, umožní ji ze soketu přečíst.
|
||||
|
||||
V protokolu na transportní vrstvě dochází k head-of-line blokování. Pokud jedna strana odešle proud bytů po částech $A$, $B$ a $C$, a příjemci přijde nejprve $C$ a $B$, nebude moct příjemce ze soketu nic přečíst, dokud nepřijde i část $A$. Většinou je toto vhodná služba, ale jsou situace, například ve hrách, kdy se to stává problémem. Například posíláním zpráv s pozicí hráče. Pokud strana pošle pozici pro čas $t_1$, $t_2$ a pak $t_3$, tak by ztracená zpráva $t_1$ blokovala příjemce, který by ji v zápětí přepsal zprávou pro čas $t_3$. Lepší by bylo, aby seřazení definovala až aplikace, která by začala zpracovávat $t_3$ hned a docílila tak nižší odezvu mezi serverem a klientem.
|
||||
V protokolu na transportní vrstvě dochází k head-of-line blokování. Pokud jedna strana odešle proud bytů po částech $A$, $B$ a $C$, ale příjemci dorazí nejprve části $C$ a $B$, nebude moci příjemce ze soketu nic přečíst, dokud nepřijde i část $A$. Většinou je toto chování žádoucí, existují však situace, například v počítačových hrách, kdy představuje problém. Uvažujme například posílání zpráv o pozici hráče. Pokud jsou odeslány pozice pro časy $t_1$, $t_2$ a následně pro čas $t_3$, tak by případně ztracená zpráva $t_1$ blokovala příjemce, který by ji v zápětí přepsal zprávou pro čas $t_3$. Lepší by bylo, aby seřazení definovala až aplikace, která by ihned začala zpracovávat pozici pro čas $t_3$ hned a docílila tak nižší odezvy mezi serverem a klientem.
|
||||
|
||||
Nevýhoda pro nás byla, že přenáší proud dat. Jinými slovy, v protokolu není proud rozdělen na jednotlivé bloky se zprávou. Tuto logiku si musíme implementovat sami. Proto jsme v praktické části vytvořili vlastní protokol, který umí v proudu zprávy správně oddělit.
|
||||
% TODO: ODezva mezi akcí na klientovi a její zobrazení
|
||||
|
||||
Pro šifrovánou komunikaci je potřeba použít další protokol, například TLS. Ten opět vyžaduje handshake, protože se strany musejí dohodnout na tajném klíči.
|
||||
Nevýhodou pro nás je, že přenáší proud dat. Jinými slovy, v protokolu není proud rozdělen na jednotlivé bloky se zprávou. Tuto logiku si musíme implementovat sami. Proto jsme v praktické části vytvořili vlastní protokol, který umí v proudu zprávy správně oddělit.
|
||||
|
||||
Pro šifrovanou komunikaci je potřeba použít další protokol, například TLS. Ten opět vyžaduje \uv{handshake}, protože se strany musejí dohodnout na tajném klíči.
|
||||
|
||||
\subsubsection{UDP}
|
||||
|
||||
Méně spolehlivá alternativa je UDP, neboli User Datagram Protocol. Ten komunikuje posíláním \uv{datagramů}, na rozdíl od proudu bytů, jako je tomu v případě TCP. Znamená to, že to co vrátí jedno systémové volání pro čtení ze soketu je právě jedno volání pro zápis, které udělal odesílatel. Protokol nenavazuje spojení a nezaručuje doručení datagramů.
|
||||
Méně spolehlivá alternativa je UDP, neboli User Datagram Protocol. Ten komunikuje posíláním \uv{datagramů}, na rozdíl od proudu bytů, jako je tomu v případě TCP. Znamená to, jednomu systémovému volání pro čtení ze soketu odpovídá právě jedno volání pro zápis provedené odesílatelem. Protokol nenavazuje spojení a nezaručuje doručení datagramů.
|
||||
|
||||
Je vhodný jako základ pro vlastní transportní protokol. Například protokol QUIC, který podrobně popíšeme níže, ho využívá pro vlastní implementaci spolehlivosti a multiplexing. My jsme na něm založili vlastní protokol, inspirovaný QUIC, který umožňuje aplikaci odeslat zprávu i nespolehlivě, například pokud se jedná o pozici hráče.
|
||||
|
||||
@@ -435,31 +438,31 @@ Je vhodný jako základ pro vlastní transportní protokol. Například protokol
|
||||
|
||||
\subsubsection{QUIC}
|
||||
|
||||
QUIC\cite{quic} je spolehlivý protokol transportní vrstvy od společnosti Google, který poskytuje multiplexní šifrovanou komunikaci založenou na TLS 1.3. Multiplexní komunikace znamená, že v jednom navázaném spojení můžeme vytvořit více proudů bytů, ať už jednosměrných nebo obousměrných. To značně redukuje problém ahead-of-line blokování. TCP má vždy právě jeden obousměrný proud. Tento protokol je pro nás důležitý, protože popisuje implementaci spolehlivosti, handshake a dalších vlastností nad protokolem UDP. V pozdější kapitole představíme náš protokol, který je protokolem QUIC inspirovaný a dále ho upravuje. Mezi naše úpravy patří možnost odeslání zpráv nespolehlivě a s různým seřazením. V této části podrobněji popíšeme části protokolu QUIC, které jsou pro náš protokol důležité.
|
||||
QUIC\cite{quic} je spolehlivý protokol transportní vrstvy od společnosti Google, který poskytuje multiplexní šifrovanou komunikaci založenou na TLS 1.3. Multiplexní komunikace znamená, že v jednom navázaném spojení můžeme vytvořit více proudů bytů, ať už jednosměrných nebo obousměrných. To značně redukuje problém ahead-of-line blokování. Naopak protokol TCP má vždy právě jeden obousměrný proud.Protokol QUIC je pro nás důležitý, protože popisuje implementaci spolehlivosti, handshake a další vlastnosti nad protokolem UDP. V pozdější kapitole představíme náš protokol, který je protokolem QUIC inspirovaný a dále ho upravuje. Mezi naše úpravy patří možnost odeslání zpráv nespolehlivě a s různým seřazením. V této části podrobněji popíšeme části protokolu QUIC, které jsou pro náš protokol důležité.
|
||||
|
||||
Koncové body komunikují posíláním paketů. Pakety obsahují rámce, které dělíme na ovládací a proudové. Ovládací slouží pro ovládání koncových bodů a vlastností navázaného spojení: otevírání a zavírání proudů, změna stavu nebo udržování spojení naživu. Proudové obsahují aplikační data. Stejně jako TCP, i QUIC přenáší data jako proud bytů a oddělení jednotlivých zpráv je nutné implementovat zvlášť.
|
||||
Koncové body komunikují posíláním paketů. Pakety obsahují rámce, které dělíme na ovládací a proudové. Ovládací rámce slouží pro ovládání koncových bodů a vlastností navázaného spojení: otevírání a zavírání proudů, změna stavu nebo udržování spojení naživu. Proudové rámce obsahují aplikační data. Stejně jako TCP, i QUIC přenáší data jako proud bytů a oddělení jednotlivých zpráv je nutné implementovat zvlášť.
|
||||
|
||||
% Unikátní ID
|
||||
Popíšeme charakteristiky navázaného spojení v QUIC. Obě strany mají unikátní ID, které je specifické pro navázané spojení. Posílané pakety obsahují ID příjemce i ID odesílatele. Tyto unikátní ID používají koncové body k autentizaci. V protokolu TCP se ke stejnému účelu využívá IP adresa.
|
||||
|
||||
Problém nastává, když se IP adresa jednoho koncového bodu změní. To se stane například když přepneme z mobilních dat na Wi-Fi. V ten moment by u TCP nastal proces vypršení relace, kdy obě strany zjišťují, že už se nevidí a spojení by ukončili. Následně by se původní iniciátor komunikace, nyní s novou IP adresou, pokusil spojení opět navázat. To by znamenalo zopakovat proces handshake.
|
||||
Problém nastává, pokud se IP adresa jednoho koncového bodu změní. To například nastává jakmile přepneme z mobilních dat na Wi-Fi. V ten moment by u TCP nastal proces vypršení relace, kdy obě strany zjišťují, že už se nevidí a spojení by ukončily. Následně by se původní iniciátor komunikace, nyní s novou IP adresou, pokusil spojení opět navázat. To by znamenalo zopakovat proces handshake.
|
||||
|
||||
V případě QUIC je možné se opakovanému navazování spojení vyhnout. Jakmile příjemci dorazí paket na původní ID, ale z nové IP adresy, provede authentizaci a pokud je úspěšná, tak si IP adresu druhé strany přenastaví.
|
||||
V případě QUIC je možné se opakovanému navazování spojení vyhnout. Jakmile příjemci dorazí paket na původní ID, ale z nové IP adresy, provede authentizaci a pokud je úspěšná, přenastaví IP adresu druhé strany.
|
||||
|
||||
|
||||
% Šifrování
|
||||
Aby bylo možné v protokolu provést autentizaci, využívá QUIC kryptografii. Konkrétně už v základu implementuje TLS 1.3 pro šifrovanou komunikaci. V případě TCP by TLS nebo jiný šifrovací protokol stál ještě nad TCP protokolem. Po handshake v TCP je potřeba udělat druhý handshake a shodnout se na tajném klíči. V případě QUIC je navázání spojení a domluva na tajném klíči jedna výměna. Další zajímavostí je, že ve verzi TLS 1.3 je handshake zkrácen, protože se není třeba domlouvat na použitém šifrovacím algoritmu, jako tomu bylo v předešlích verzích. Nová verze má definovaných pouze pár možných a iniciátor rovnou posílá svou část veřejného klíče pro každý možný algoritmus. Druhá strana si pak jeden algoritmus vybere.
|
||||
Aby bylo možné v protokolu provést autentizaci, využívá QUIC kryptografii. Konkrétně už v základu implementuje TLS 1.3 pro šifrovanou komunikaci. V případě TCP by TLS nebo jiný šifrovací protokol stál ještě nad TCP protokolem. Po provedení handshake v TCP je potřeba udělat druhý handshake a shodnout se na tajném klíči. V případě QUIC představuje navázání spojení a domluva na tajném klíči jednu výměnu. Další zajímavostí je, že ve verzi TLS 1.3 je handshake zkrácen, protože není třeba se domlouvat na použitém šifrovacím algoritmu, jako tomu bylo v předešlích verzích. Nová verze má definovaných pouze pár možných algoritmů a iniciátor rovnou posílá svou část veřejného klíče pro každý možný algoritmus. Druhá strana si pak jeden algoritmus vybere.
|
||||
|
||||
% Paket
|
||||
Paket v QUIC se skládá z hlavičky a těla. Pakety mají různé typy, které popíšeme později. Prozatím předpokládejme, že v hlavičce je ID odesílatele a ID příjemce. Taktéž je každý paket očíslovaný. Pokud dva pakety v jedné instanci spojení od stejného odesílatele mají stejné číslo, tak jsou povážovány za identické. To znamená, že každý další příchozí s již zpracovaným číslem může příjemce zahodit. Každý paket obsahuje rámce. Ty mají také typ. Nejčastěji bude v proudu rámec typu STREAM, který obsahuje data odeslaná aplikací. Příjemce si ze STREAM rámců lokálně skládá proud bytů. Každý takový rámec totiž obsahuje informace o který úsek v odeslaném proudu, se jedná. Příjemce tak může snadno zjistit, která část proudu mu ještě chybí.
|
||||
Paket v QUIC se skládá z hlavičky a těla. Pakety mají různé typy, které popíšeme později. Prozatím předpokládejme, že v hlavičce je ID odesílatele a ID příjemce. Taktéž je každý paket očíslovaný. Pokud dva pakety v jedné instanci spojení od stejného odesílatele mají stejné číslo, tak jsou povážovány za identické. To znamená, že každý další příchozí s již zpracovaným číslem může příjemce zahodit. Každý paket obsahuje rámce. Ty mají také typ. Nejčastěji bude v proudu rámec typu STREAM, který obsahuje data odeslaná aplikací. Příjemce si ze STREAM rámců lokálně skládá proud bytů. Každý takový rámec totiž obsahuje informace, o který úsek v odeslaném proudu, se jedná. Příjemce tak může snadno zjistit, která část proudu mu ještě chybí.
|
||||
|
||||
%Takový rámec zároveň definuje úsek proudu, který je v těle obsažený. Příjemce si tak postupně skládá celý proud, podobně jako TCP.
|
||||
|
||||
Popíšeme jak celý proces handshake vypadá. Diagram můžeme vidět na obrázku \ref{fig:quic_handshake}. Vidíme dva koncové body vyjádřené svislými čarami. Ty se mezi sebou domlouvají na svých ID a tajném klíči.
|
||||
Popíšeme, jak celý proces handshake vypadá. Diagram můžeme vidět na obrázku \ref{fig:quic_handshake}. Vidíme dva koncové body vyjádřené svislými čarami. Ty se mezi sebou domlouvají na svých ID a tajném klíči.
|
||||
|
||||
Nejprve popíšeme domluvu na unikátních ID. Iniciátor si vygeneruje svoje ID a posílá rámec, kde v hlavičce je jeho ID a ID příjemce zvolí dočasně náhodně. Jakmile rámec dorazí a příjemce zjistí, že tohle ID odesílatele nemá v registru, vytvoří novou instanci spojení ve stavu ReceivedHello. Přiřadí mu dvě ID, první to, co vybral iniciátor a druhé si vybere sám. Od té doby všechny pakety, které ve spojení odešle, budou mít ID odesílatele právě jeho zvolené ID. I tak si dočasně ponechává ID, které zvolila druhá strana. Je to řešení případu, kdy druhá strana odeslala více paketů ještě před tím, než se dozvěděla zvolené ID.
|
||||
Nejprve popíšeme domluvu na unikátních ID. Iniciátor si vygeneruje svoje ID a posílá rámec, kde v hlavičce je jeho ID a ID příjemce zvolí dočasně náhodně. Jakmile rámec dorazí a příjemce zjistí, že tohle ID odesílatele nemá v registru, vytvoří novou instanci spojení ve stavu ReceivedHello. Přiřadí mu dvě ID - jako první to, co vybral iniciátor a druhé si vybere sám. Od té doby všechny pakety, které ve spojení odešle, budou mít ID odesílatele právě jeho zvolené ID. I přesto si dočasně ponechává ID, které zvolila druhá strana. Je to řešení případu, kdy druhá strana odeslala více paketů ještě před tím, než se dozvěděla zvolené ID.
|
||||
|
||||
Všimněme si teď různých typů paketů, jako: Initial, Handshake, 0-RTT a 1-RTT. Liší se především v síle šifrovaní. Pakety typu Initial a 0-RTT se používají, když ještě není domluvený tajný klíč a jsou snadněji dešifrovatelné. Handshake a 1-RTT používají plné šifrování. Význam Initial je zřejmý a 0-RTT se používá pro rychlé sdělení informací druhé straně ještě před navázáním spojení. Není vhodné ale do takového paketu ukládat tajné informace, které nechceme, aby četla třetí strana. Zároveň QUIC umožňuje poslat více paketů v jednom datagramu. Proto v diagramu vidíme, že iniciátor posílá paket Initial i 0-RTT najednou.
|
||||
Všimněme si teď různých typů paketů: Initial, Handshake, 0-RTT a 1-RTT. Liší se především v síle šifrovaní. Pakety typu Initial a 0-RTT se používají v případě, kdy ještě není domluvený tajný klíč a jsou snadněji dešifrovatelné. Handshake a 1-RTT používají plné šifrování. Význam Initial je zřejmý a 0-RTT se používá pro rychlé sdělení informací druhé straně ještě před navázáním spojení. Není ale vhodné ale do takového paketu ukládat tajné informace, které nechceme, aby četla třetí strana. Zároveň QUIC umožňuje poslat více paketů v jednom datagramu. Proto v diagramu vidíme, že iniciátor posílá paket Initial i 0-RTT najednou.
|
||||
|
||||
\begin{figure}
|
||||
\begin{center}
|
||||
|
||||
Reference in New Issue
Block a user