From 58a149f7f9227ca48bd990e39e36ec86c1a99d2f Mon Sep 17 00:00:00 2001 From: chrislonng Date: Tue, 8 Aug 2017 18:21:04 +0800 Subject: [PATCH] docs: communication protocol --- README.md | 1 + docs/communication_protocol.md | 200 +++++++++++++++++++++++++++++++++ docs/images/data-trans.png | Bin 0 -> 21913 bytes docs/images/handshake.png | Bin 0 -> 13899 bytes docs/images/heartbeat.png | Bin 0 -> 16600 bytes docs/images/message-flag.png | Bin 0 -> 8330 bytes docs/images/message-header.png | Bin 0 -> 9879 bytes docs/images/message-type.png | Bin 0 -> 22137 bytes docs/images/packet-format.png | Bin 0 -> 6065 bytes docs/images/route-compre.png | Bin 0 -> 15006 bytes 10 files changed, 201 insertions(+) create mode 100644 docs/communication_protocol.md create mode 100644 docs/images/data-trans.png create mode 100644 docs/images/handshake.png create mode 100644 docs/images/heartbeat.png create mode 100644 docs/images/message-flag.png create mode 100644 docs/images/message-header.png create mode 100644 docs/images/message-type.png create mode 100644 docs/images/packet-format.png create mode 100644 docs/images/route-compre.png diff --git a/README.md b/README.md index f8c75a22..5a3dab3b 100644 --- a/README.md +++ b/README.md @@ -22,6 +22,7 @@ go get -u github.com/gorilla/websocket ## Documents - [How to build your first nano application](./docs/get_started.md) +- [Communication protocol](./docs/communication_protocol.md) - [Design patterns](./docs/design_patterns.md) ## Benchmark diff --git a/docs/communication_protocol.md b/docs/communication_protocol.md new file mode 100644 index 00000000..6b6355d0 --- /dev/null +++ b/docs/communication_protocol.md @@ -0,0 +1,200 @@ +# Communication protocol + +Nano's binary protocol can be divided into two layers: package layer and message layer. Message +layer works on route compression and protobuf/json encoding/decoding, and the result from message +layer will be passed to the package layer. The package layer provides a series of mechanisms +including handshake, heartbeat and byte-stream-based message encoding/decoding. The result from +package layer can be transmitted on tcp or WebSocket. Both of the message layer and package layer +can be replaced independently since neither of them relies on each other directly. + +The layers of nano protocol is shown as below : + +
+![Nano Protocol] (images/data-trans.png) +
+ +## Nano Package +======================= + +Package layer is used to encapsulate nano message for transmitting via a connection-oriented +communication such as tcp. There are two kinds of package: control package and data package. +The former is used to control the communication process such as handshake, heartbeat, and the +latter is used to transmit data between clients and servers. + +#### Package Format + +Nano package is composed of two parts: header and body. The header part describes type and +length of the package while body contains the binary payload which is encoded/decoded by +message layer. The format is shown as follows: + +
+![nano package](images/packet-format.png) +
+ +* type - package type, 1 byte + - 0x01: package for handshake request from client to server and handshake response from server to client; + - 0x02: package for handshake ack from client to server + - 0x03: heartbeat package + - 0x04: data package + - 0x05: disconnect message from server +* length - length of body in byte, 3 bytes big-endian integer. +* body - binary payload. + +#### Handshake + +Handshake phase provides an opportunity to synchronize initialization data for client and +server after the connection is established. The handshake data is composed of two parts: +system and user. The system data is used by nano framework itself, while user data can be +customized by developers for particular purpose. + +The handshake data is encoded to utf8 json string without compression and transmitted as +the body of the handshake package. + +A handshake request is shown as follows: + +```javascript +{ + "sys": { + "version": "1.1.1", + "type": "js-websocket" + }, + "user": { + // Any customized request data + } +} +``` + +* sys.version - client version. Each version of client SDK should be assigned a constant +version, and it should be uploaded to server during the handshake phase. +* sys.type - client type, such as C, android, iOS. Server can check whether it is compatible +between server and client using sys.version and sys.type. + +A handshake response is shown as follows: + +```javascript +{ + "code": 200, // response code + "sys": { + "heartbeat": 3, // heartbeat interval in second + "dict": {}, // route dictionary + }, + "user": { + // Any customized response data + } +} +``` + +* code - response status code of handshake. 200 for ok, 500 for failure, 501 for non-compatible between server and client. +* sys.heartbeat - optional heartbeat interval in second, null for no heartbeat. +* dict - optional, route dictionary that used for route compression, null for disabling dictionary-based route compression . +* user - optional , user-defined data, it can be anything which could be JSONfied. + +The process flow of handshake is shown as follows: + +
+![handshake](images/handshake.png) +
+ +After the underlying connection is established, client sends handshake request to the server +with required data. Server will check the handshake request and then respond to this handshake +request. And then client sends handshake ack to server to finish handshake phase. + +#### Heartbeat Package + +A heartbeat package does not carry any data, so its length is 0 and its body is empty. + +The process flow of heartbeat is shown as follows: + +
+![heartbeat](images/heartbeat.png) +
+ +After handshaking phase, client will initiate the first heartbeat and then when server and +client receives a heartbeat package, it will delay for a heartbeat interval before sending +a heartbeat to each other back. + +The heartbeat timeout is 2 times of heartbeat interval. Server will break a connection if +a heartbeat timeout detected. The action of client when it detects a heartbeat timeout +depends on the implementation by developers. + +#### Data Package + +Data package is used to transmit binary data between client and server. Package body is +passed from the upper layer and it can be arbitrary binary data, package layer does nothing +to the payload. + +#### Disconnect Package + +When server wants to break a client connection, such as kicking an online player off, it +will first sends a control message and then breaks the connection. Client can use this +control message to determine whether server breaks the connection. + +## Nano Message + +Nano message layer does work on building message header. Different message types has different +header, so message header format is complex for it supporting several message types. + +Message header is composed of three parts: flag, message id (a.k.a requestId), route. As +shown below: + +
+![Message Head] (images/message-header.png) +
+ +As can be seen from the figure, nano message header is variant, depending on the particular +message type and content: + +* flag is required and occupies one byte, which determines type of the message and format of +the message content; +* message id and the route is optional. Message id is encoded using [base 128 varints](https://developers.google.com/protocol-buffers/docs/encoding#varints), +and the length of message id is between the 0~5 bytes according to its value. The length of +route is between 0~255 bytes according to type and content of the message. + +### Flag Field + +Flag occupies first byte of message header, its content is shown as follows: + +
+![flag](images/message-flag.png) +
+ +Now we only use 4 bits and others are reserved, 3 bits for message type, the rest 1 bit for +route compression flag: +* Message type is used to identify the message type, it occupies 3 bits that it can support 8 types from 0 to 7, and now we only use 0~3 to support 4 types of message: request, notify, response, push. +* The last 1 bit is used to indicate whether route compression is enabled, it will affect route field. +* These two parts are independent of each other. + +### Message Type + +Different message types is corresponding to different message header, message types is identified +by 2-4 bit of flag field. The relationship between message types and message header is presented + as follows: + +
+![Message Head Content](images/message-type.png) +
+ +**-** The figure above indicates that the bit does not affect the type of message. + +### Route Compression Flag + +We use the last 1 bit(route compression flag) of flag field to identify if the route is compressed, +where 1 means it's a compressed route and 0 for un-compressed. Route field encoding/decoding depends +on this bit, the format is shown as follows: + +
+![Message Type](images/route-compre.png) +
+ +As seen from the figure above: +* If route compression flag is 1 , route is a compressed route and it will be an uInt16 using which can obtain real route by querying the dictionary. +* If route compression flag is 0, route includes two parts, a uInt8 is used to indicate the route string length in bytes and a utf8-encoded route string whose maximum length is limited to 256 bytes. + +## Summary + +This document describes the wire-protocol for nano, including package layer and message layer. When +developers uses nano underlying network library, they can implement client SDK for various platforms +according to the protocol illustrated here. + +=================== +***Copyright***:Parts of above content and figures come from [Pomelo Protocol](https://github.com/NetEase/pomelo/wiki/Communication-Protocol) diff --git a/docs/images/data-trans.png b/docs/images/data-trans.png new file mode 100644 index 0000000000000000000000000000000000000000..8a3f255668f38c267f3c556ffdee40349b6eb863 GIT binary patch literal 21913 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 literal 0 HcmV?d00001 diff --git a/docs/images/handshake.png b/docs/images/handshake.png new file mode 100644 index 0000000000000000000000000000000000000000..fdf4aa73aec27150016eac27e6cf80bd695cb335 GIT binary patch literal 13899 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 AXaE2J literal 0 HcmV?d00001 diff --git a/docs/images/heartbeat.png b/docs/images/heartbeat.png new file mode 100644 index 0000000000000000000000000000000000000000..ae4ec7e86fd3a34e403fb2b758727f27502f4439 GIT binary patch literal 16600 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 literal 0 HcmV?d00001 diff --git a/docs/images/message-header.png b/docs/images/message-header.png new file mode 100644 index 0000000000000000000000000000000000000000..aad3a55e6d9521133a11eec61507c91849563700 GIT binary patch literal 9879 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 literal 0 HcmV?d00001 diff --git a/docs/images/message-type.png b/docs/images/message-type.png new file mode 100644 index 0000000000000000000000000000000000000000..175febe0635cd97ffda2f30c28af52480fc4305a GIT binary patch literal 22137 zcmc$`1z21Cx~ENrqHS@Cm$rC;;_g=5-HN-rQwUJJxVr>**A|MqLvRW15JJ!|ecye~ zmLuPuJ#%KlbtNkhvi`}^=lGGfxibhG5+}p0tl7io#1V^N6moiL-W#L*74%2RmG#E zh?UZJjnS&so@&`r{Jc@&t=L(o*9${9YC?zxpWXIZCTBfnn=+Lkj0s~Ne($~gt`~SD ztzTiP?#{Y3HD_#cmgC4fHFk0VFkZH1e=)N$IOIeS{D@%gk=tS$5(UD&xTbi`J}NM4 zb|J28(z~-dA-bi4o5tez!$fzfohNa%J^Jg+X>kTme|Su6Sz|N;%{{jy zJO|)(;v0SIFLpVc|2knfWNN8ljapZ9rmx!q*%we)T(sCB7;2AWvn0mGEt|?L9ith2 z4f;|{b3?=Ae6+CYp8xY^Va4nG^G*i|w`I`=^;3T`;G-BW0){ZQ>I}}9ccz}+MQ3;x zF}f$;mmbUTv6O6Pt)fW1ZAdF|$xDP!+6brZn@;>op;6yD90h3D-e-wSh~?v|vT@Tm zO*ZYTjKrqL&%5_3oP2e3*VCNu zcu&(Hyv0NCu8c$MSs-R|iS*Qy7fdj%3UjZ2RIgjqc(&g=am`zDWp^zm|9-4cxk%}c zG3%kwKo0wT2%#<8n*5!YHiv5X(BzM{83NzO(~k3TJ3Tg2rkQ;sQv#&5+bbt10QPqX zKcZ*lb5XOG*PYO6YQmbmeI?mL)HAbUdN_|c2$!^%#ueYSFyDv zP)&>*HN;hWKvY%|QVf%P55P!OdDM&pn=)!krCAARsjDW(4N1v0xo(RdqOCBB-!Q+H zuAQ2k1RE!Sd-$WF!X&+q)ejk^eU~ZGhlj&2T;qV?_GUi@-j8zguI&eD5Txo_gtb25 z%?k$)98l8vR{PadH~;LTbjxULUhA-GDPmwvK8bQhv>9t#n_Se-5L0s|I=|eoxUr)} zpX-fosF?S=55=?X(K!R|2dlSAic`QNX$rtM^z$eXvrHjq1j&2!mT3L9%ka2um^M$k z=!%)pPQWQQ=W=QW+wJP|bvg)hoe;jQ!11b={!0Di0f zefPgSna#FFgd_BcmGEW4xSUKX>t27%`y!-kN^a-f?}>@Qp4TznH~XUAf$xxs(Z)@y z-Xn}7`%Slph9kpgrhxLV&GVlhY6qt6%~AG@+-775Isx%6c>n`(w$k1v zq);T7p+)oKxW1}4C$mpK6+_bbb&$Lo$$X2T`o#!hMxS?^Yv@2<8-GSP2V#>ISv zety-~MVHD=8d>bndz5BX=w*1 zp{SQIc5FO$QXCfE`e2ZsARpPvhO-QKCSqE{pM8tTlJ zr!{wKyi_mevZ5@rxM`IdTmTT4aDfqZ-4{n=xA?+WIJ-eyYvq}@IYs_Gg<2b|bs=Ql z-(wD$d|_X)k#y=Z@4@Cr8(zn%imf9r%(GScrrKAR|?;IIZ`FLV%-ca~t zhiB|HXq!)Fdx}i)&EqgzpQZs^_c7Fz86n+Ryt4TMVpvP8Oky+?shFoiH*i#w|YNiz}=PAB-rL` zbAq@IGq$x)TEb*sVG`6C*00=;Z_eq1u@H4H5KDDlBP){k>JKe5M2O^=`S;w8PhK2A2k zHDR|KNO#~f0V%&eufJM|FbGP@a^`2foSp&r%@=sLh=%ArlhEXmA;_Un^jY+<2zZ4p zdo+M(E^N~|WbW-tw^}l|vu$RKW6w44_1MdpBZM=71fqkRoNu}R#g1LDdH3f8i9z#J z;JrAV_llJ7S*cNG_A=O+xG1%w z6U)*@>;(9>MSD_Fc~PUm6lZ}g0hv-uFpS>;Qc&rH@j8OpfUREBzG&dF zMNP%zluY&BdwWAzi%K7fZOe?^>)i0cQff(7oCS9aMHZXJ0`HskxrB*_!Y~_ml_~S` zRa204Eb~Qt?J`B{W^1tI+=J{*Xv(WOlJ{=t36_@d-NgzXPr#6`y*F^|;lSjc1g}+& zq>MqUv9Ca?W`#=pqpst}$WN`2`n!g+<*cKtJeL_^O6y(*n_L$*mqAz}93-^qq;1PO z2^0Gvl5vAh0_i#j1Vbk)z-T@BqfwHrp3joAixNq%BtAgSR#-Y4Ka{KWuN<|!Yw0ov zvDONKQ0v;}PC4>CObG4%N@2((qURoJ#*6lP+dGNm_7w!-w)LxlAlFq?e%;eY13M>|RL6#)z5sgSGK3?p?|iCWn^7S|p-qwOGG z#;utHlTF+T*w|ix^O#wu$6nU}?SHs|exCR)ks|n>Z}9RR6%3-e(~nvMXkhG=txegp5Ay+<8f5>;N-~* zFPS&&)22N+JQgPU_q*rQ-;2e&O-Vg9&x_x1usN5+#6+I7^Xh?b^wR}QZ$er1v`HwR zlBq$|g?_fX%uc=T+?mzri=IFekJKfG*jYeaK0dk|M5e^V#7spf|>GK$>M8NQFM&yiYvY`3fK!PqR;lOQuq@T*-B z{C-8VTcs4^YI>He=oE-;6@~4sCwFHHjM?O^oFjexoQU%I(LmZFAhmgju$E)-ToMqL zeyw~m{J>e~4xp_S7lxgSNE&|kGbD@tUflk{DgyzHhJb#F)#~^#1K;{e!|ehoi7Sf%wNjN+V7y;pjn_40*Ghqv5iI+>t() zgCxGP5+3~!Js4BiF0MP@I`tcO+RL%%l$zZ`Xg3qcstKCO!%WC!a!wo*tZl_yd~~c2C1rLx zd$;&RYPjK0Bz2M>@r~Lw;+fae*q3}Fg?rO2{-Q}lpKj%$bFPblnFJpvtV+>5M{I>{ zs)j(!c%O`eJ#QIFDCbUvh9#TrlPqc+6z==DYBx1_ma9&07ZNuU_5ktsUVC_B=3slU z=f3=Bo4WhQr)oItW-joxdMvGox$EbrX|IVJ^xIXWdr*B`N%}6Z-l+fJWsF^QYW~o! z7X5g=CDPRCQp9yF{)rl^j$km?N;BvSr20nMgIEbbN`z@rzeAGDorSKtMk$n z1q&8rQ|Ht)d@e2&#l56wb*YbqY&h|tjZc_&RU7|JEftv%9chLRA=PM<&z0O?NOs}$ z%YzXudKRyZzz&wkts?eY0sRUj1{}uFsbTSBtHQdP)YMpaF{zur%XDU`(1k=OA#1r0 zyQcIVoc7Q$_oEat6<>jZhfLp%8>MVnUPtQbh^dK&kXoT75jdoro0`apbANa= z&ad4BU-_LQq1LhsQUtLbpOnNypO-WMus&<$P_EjciZ6#u&PuLGUQ*YVDS-$B_kg{F zKLyTSo(4`?X21$o9aaLGKU8yjj_ul?d8 z6PlS)-;J8VKsza8>)>m<-J0YkFHnxzUxcM*SzHt3+0OXl&+2jRDbb=9)k4q7BaK4! zG)D2`oMDD%DT==JuWX&`{X71w460SP2Awx`CJ_zBX{$c-!&fk}Zd4AQAhEd`MH_1Q zaMwd%FN!>U{-xNW;gEJNO8oNb+~Ig_fK313I!r>zO)Qs`9xB#ysLiNGM0jmQ&hBuoWxrJD(=t zJFl1XsRE6fneFqz3+)}+hojTqO!-jwtA?;&N3c~6#69K3pJn&wo?nB4=1#4#8>WAAj8fWmq*j=dLP}#o?_)xL zZ?Ner&|*KDIMwS#Wx3W9dlX_0>=;Z@&)nv8RxGZLrkj_~+@jMi31tPgWuw^zzWK21 zv^43{i&uT?)5xVIp*ig4_E0XtLS}dWB4j{)NLjN{zHK^{$Z`SFiOs32Q(miKy3yyT z3~K?J{!yvlbR0frtl!7eva!<7x?*$-*Fdf} zW3g{R%BoJj(0lGx8(JvA(u3~)$a*^TwPvm^Yr&$WAA2)OJ($5tU%riHMs}D@p9EF@ zqpher_8#-#HwTt$EmOX!I^42w@&eUwcaPp;E#>QC$SE6EQo!?)lpbm{)eN_Oh2)t^bQz>zw! zG;SGWP#i}AN`ac)x%X=rC1tny-jl087wv*9rWIJ%b+E?vZT6y@#+@uY;ep=(! zrF$!ip&o4woTh1x$;fJYpNq{Tj;EUD3hq*CL+p$iTblZeXKt>fP}=w8w9e8vG9~Ft zCn)lDLHjuL5f`asL0^v3D;gg(lv`7g6CQVeNM+?epqcK5arh)-)KTG=q4=cf z&hGmti#fQe2@&)#j?r$YAy-dnFegBv+?o%5G7OqRb+WPBkQa$y}sCq z5`7knQL2NmX7jYq;Na?YIaJT!>+c$!T^##>*YUXF=cX;ddJ$aTZuAZK^*K2X71jG% ze{IFoj8TTeBI=$pZ+bHic=6RyRul25z2=d&f4E;!H4Z?xB4>mMDp{=(s*wUTzb)78BJu$gP^(DbW1)>r~W;y%yP{+^&ZT<%>eovrk;&(}fBXP04K_B7WuwFWjP8WUNzT=$846yxj)bAQAx{~;HsBg}fTF2wsP6lvc z^`u8l7%G-9K!IzH!;X{6vKBo5;Ti6>o4xhyB7fSaGUVcihEWc;g4=W&w-KNg0rWWc z$5xdxsZJQWKvrR^{i2i+qGxR|ijdcNFGr4D{g4(c(xvTE`GV?(*XoO<*np=#z-sJ< zq5Awh*6{tiQJv1mSXC9F-CW20WeEC<=uh`H=C2n(eZ(BMXM2IZ7g5dWfHnHXs1+%CN>;@J+xC~T!!{$gcrRpJxl%*`Hx;2} zSA$|t)C+ejcG`wI?W+2DeLifTgfMCb@d}$8O6fvgq{-DZ9G~|ilTFf-gDKRBYKy+B_n%lDE18OTpjUypRM1%+((}J7%;i%nI=q7sCW@XHfC{6DBSGrhw^ycAjut3PnW%t zdJCqxB~BL>fS(1rOnyD}-~(96FbQyZao%msNL1ExiK^(8LO<0GxZ<@FB@?iTwLTBOw3{FRdWF-D?n3U;_L5?v5#IH>teY7-g(&7Q%*ni zx(GSgD7~WPDg3Gdk9y`YPqU;p)EACtQIOLkS^*QteiiMZj0;Z?io6UJ`v;4@t0fv| z)2>kk!m}X-9-OUJG*sBQReA^O@#5F4k=Go2;tAktCn*nj0b|Qm`H?3hVKhNe>AT<- zl7FyD=S1}13)hmhtCV1nZR%G zkn3NbG#3+qa8M`m>)F+>DM4j-8i^!Xj~NH2?1GL^d0lw8LZp!mq^L_Qoo`I8hkKNr zDKM+xGpo+lT{HRhQS-rbc15gRRO>?dzfSeK)brruGZgX?a;TYKIK;~I_Y?mM$hF;) z`I%Pq>~#wx+8JT#rHQHFYgsr7$3XK%&gHfZF zI9cK%K~LZ*N_g+ig*N0Fr~G4G27a9Mw~D#qa$V9OB$8(P6N)quQ5-)4-jx9p(4$HU zKx!{=pU?IF zLx1%UaAXsI>9XposRwpR1Su9Gcd9GZZ_9Svyicm+OI7)pcT#0AXR6u{WX*xv!EbE|59h4l2xGDFhNt)IQHz8mWm^OE7B5$nEEvn((hFAw)ff{s`Xu;%VC-|KR`pd%&z0;fA1MmuumwVhQ$N5g#NM#)%A(t6Tt(EdoQ%#VWlPNJKV!o8gc0W-aad}s68#d%iALQ z##P_b9zi#f3Brr#dpo?#B6Nk<5;9XT@7c0~au)LlSTcg!>$wrfkXbbf6mlAqmo!}k z#(kT!7gO-JbgjN9k~jLr@+dFg14Dm~ zR#zsQ@}`OTADl+MwXRPlmz6*V+wx*gtbv;TATAMT`uOdUS+i< z#A=h5%{zUY8TN=nk58so%A|!|vmT%KNGDaUc+DA2HH!-%p&^`()Gct))aFgGGdhjz zKO+?x=$A^mpe7I0-qh)M>nkr|;cWEn-{58;-ss z#z6&agw-kQpF2O58fs(hmz}H#4D<*Zd(pMdE|gIww|QO~A4q>hr!b<5yDv4=8=0HJ zw`o+AcKyC-_i!9?EVs-lQ(;NhWG5fec4*M4RQrG}-4anT^Hi6vuAiMmb&}Eg(kr)- z(!D(tD-c7tuI1pMl)fH%5lvP#tB?w>?pcHL#UD|u(u2{b6V1*SfLWPM=ejfKs`12L zU)<0gK>H<(D^cpT7V?yjeZm)ZcAA*m57vF*lDp@1l9*1)YTzxt3Hx8QD5omC|tKUvGFDl>0w z#^Tr4GuMOj3J0E$U70^FBs4&^o!<=hPK9iV1ykYqX({UUCWtiRQp!B263bTHe^B^q zQe^TsNl^;8vwI<~&1{0mOoIohZN^Ce2e)coMf%Q+SG!R9>P_d}kI-ifT4N86b*^W8 z&=TYYc$R&1>>@4$s~~a5$6{%^Z=L2b_~G&RodP7L+>(*yJoUjD2s6w0kMOsY4~gecF;>R}nlGA?i@9WIx=+~GM&lS(#+ ziAnP2=_q6*(@9yxOl}bxj3N9j7t-;*f={gIF5l^=ki=*o5HH+~fZOBiV*C@-86poO zQWna#y1$E(XiuoNAH2+4eAcvuk;w<+p1$99scb>jycjTUWD>DFit)^np#=Pw5ta)_ z62naQFyD{)jmamgBrIjQ!`t*JEEPcX?Hh#ZHKOm+OeaZ?W*PxAwB0R80E|P@XU9}wByj@)va8~<>$tdZit!gyEEoYBTIV_n; z#HCGs>&Kr-%8Y=V(|*M!C8Ca;<63NceXn)FL|W8=&(XkEONzh#-G1_p;p2zM>bP{? z9T!zRAgTc6a%ALXO*lb^<6;=oJ|sPOoT4R4v(Bps_B$-dD3_1;Gc0(uPKtpBy5`mX zqX3QaD+@hcWNkK!Ou`2Xa92%I6?gWbE^9fR{ZVlzOOOqsw}emcpJh@Q7rh*hd3>=b znMAbpWxtd4x?!R+Cz@MMv*5;S~oA>=gzw2tYws-elT9hnl5$zoW0%S5#VKYVs3Q85--D@%e zr{t%J8znd|6U^XiSwqsgDF4v~uAmSpOCeK%Dr-K#N`PMHXmh_TDO;ZMVm_&D`IRH( z5f^v8`pm)mI?vtLOtme|%QHiKg7o$s6{78F^4L?vTyBeNXAU{Oz87VA5~B`Tb_)_; zL*FA~prwK?>@OBl_L@!FYSQai*<~daZ!TmtaK$wDG<$G$FkQu?T2k9IRQ>4kZx*>% zmlBSh3YXZjEKQbL!=J`=%X!$-FyDEn9(UQ$MdDg!p^O`&6Z>mrI@tC+X;>Lst zU){#zM<467I$xAeZe`qb4yr@wylsWl)R>@CBPe%wOUxx7sUmx53o(U}BYWc&?rMVB z9TFeKtB1a5Htrw4gu?4PG^Tn`^^T9=BYm3Kd0fmniwvp(b6Rc{nDoiECz> zbT$CRKpR{oUd7B*nOyTBbzXQ9#ZX8%OqpOe6Qn-Nox}DiYVNT!AknTp)%xpZO@s@N zcbeU)PmDpW_j{^KWi0CjT&^?VO3J;1`PsL94kUGxfRerl5kmLj>-y!ZY_k{Am+<|s z^uGlYmMLpac6r8i_ETlewQhP<3r5SQbdu(|gd%1zbkU&1@v|Vx*e8w7*Y=AYq z7zv>BYBmeLI71gkUSP7?cm=T#BCo9vLLtW`%hRPgx(>k*PL$>1_(3;lwv`kD+l}o6 z!ASPJ_*p-C?$l&hzsd_WV*4>e_yBz>0DY^Sa|cpo`D!LK+v-IlVmD0?_+T!Iq+}t6<#+P|jG265E zk*j4$r~YRLAjkUfv~&6RFN^=V-F_d8pRQr*S?b zvQDqgc($kli+);Tal)vVHTYXma!KSIOD*ba~sH#Dr;e8P-TT;*C?-&S(1ZuXvmW?J5ShSzi9=3KBgslhXEXc%X@8 z#S>Yen+Cfi+awQxii$6?$FN$X%ne0CM9+nN254e}ubyoRT5qliTc@t)psMgKYjzt{ zW=w}=8!%^&;zVbIJ4<~9l@_N*1eo2cN7MXM)L1yOykl0&I8declc7Tb1c~3}XVQ`$ zUv&(VS*sl|8MR;pDlBo64ecc0I1#0*n=i!;$hcrTji`r|=rPW|St<*WXeTb;2>}y& zh!ZceyFF)q@)pm34fUivjrFJN#;;IpD!KH1-w4&%CZnq@ltf$Lq_4#YPxxWO$WJOZ21Tvp0EGH=Q#^y0nQjQiH3yJwHcv`+XA0^)ZP zwyQ2Uak4OkO?DD41|26gK05r~6Jx}w$KqN5L(?f|J+_u?0{fPc7aE4Fy!tTY154}z zE2u|DX{qzB!J1-AsN}AM(uL=tB!se`b%Z1fd$nIb_Z!y8Pn!{a351Y(;qgSzCT>-& z@`m!@yPOM2zJ5l3=7+{IRm(Pw`^$4 zS^O`g#>(E6&oQ6$?tmM>mG6Vi9Uk3WifQzHlmtaOV)C-4^C_l9uNZJ#$WXyA=mOY75lNVE=^ytZl zj?5v*5M69d2x^ZdSiSHX3azaC`ETD?=1w||aaA!|iqbvZ z_yT{vm+>P4iKrnX;lP!=Z2WEpghN?>OMAQDumvt(!f%HE_b2PTgo~bHd@C#a7%48o z=S>$D7B-J4fORNk?q(AUhcCa!<-hjsH)i>NFh)TyN&qdw*Ku=J6=9y7;$qmg zUtlFtvKeH!o*rNlQ0HW2=K1S1nBg1^_0`h8p#oOB^>#3wwcc{>-DJ`_>6A>Lj8@%_ zngNhJFd<0WejR~c`13O8#9cJ`k(gdloSbzH$#attdhT0x2^=c%>*k77e$6W*DU2A8E%I1%$b7Ki zVWdpL(5+O~ZskRN&F#3pBF!H1jrxJvy)AC2?y;CTt>Ij@BBexNFcPZYab>Pl9nsMp zEIS1$_#`WeOrC!y>%5CLvX|2>@NyA=A^e7xk|8lf2VO+KNiJo!#KE6^V_JUZv7cRl z|L_t^NN5tCTer&j?OHdR2Q|D&72$bbvgyh>TV9YTo&+zcBX6B*mlv?H@#r%RCRLwi zAWV~egx$?{UjO>1jW^qZyAAa|Ui@1si--(kgC$^T4X5fg)1IyMR&`U&I$dM=n>;-u z`-1c18*avMT$U7e2NeMuRT^;*UoFS3g8ujFdQL5^5=V^+6*>%+$r+h((CbPuOsyy% zEY~cV15-;5`0MErb2g&K>@rb#Qr{ZXTPzBTz_iF)|9^qpjJQ!)T(=Z|tEE9*4S(~k zig$kdvfT?^TmnRz#;B8*9u?5O9JX#thV}`%)%et6JgdoEQ;@AR?6SL(F7I9zHw{EF zZf-Ma3VH!OBJb0L0>uu?RLPd6zw{9_Qc65ereV{N$GNSmUB>MzIuggC?>tpo#cXRc z1K#`GkD0mlVVsHNI*zu=@Y^^|`^A4O-`4CA*tvoobHgfXdxW72My=B9R(+2O?N92! z)<1!g^aNcr-?3=@{AP#tF0tAAjxb;OfC=C>=#dF$jC`JIy)Nl(Y~!NPXg;3=@T$bJ z7S8TMk~No?j`zW&*?64#>bWJH2_8p3#A5cmpj@uFkB-6_-Bt79-8|BZxr!O|71Nxn0xkEyV}N1h|HuG|_V)e* zN;G{@PI}`row#TxaBY~~DpybE8>tVYoR)#`y)7*IAgnY9-%y3c^l+5FW&M?hSQ(dG zp3sp%c8yX}Vl{4c+*wq%c)6;FsMeIeuEZx8M0NA1XPIo^ujpCS-%*BqL)WU-I`Q2- zJE(LF4XA(xs4@f&R-CMozPb3+t|RBxb?)MXM8}-U5=wFUA>}Q&IQDh)=Em_aDqi0! z<{(uCp*NEmHxYF%nQRqiJ{QJ+`tjXkE0Tsz@NK!VqkH6txX+@%J+<|IgdAW#kBG=) zg~s93TQTvUD5wDFhN0;EnKTN`p;B}L``+h+`k@}W2@!aQSsYTxo|)|HNw2)rm6np<3J9bT#%FEVWu$DV6|=%koK=Y9h7 z)F9=&Pqy%XouGVXzeI<{qVSXHIzBUf+MV2N83ZxZ zn9QNkf)2XUxOuw%DuB+Cq;PAr%kk$+zSP3TOng)AJWxGiMe0n{X+IQeTj21pqE|~s zjoX3Gp1D~sp-;`^JjGop_j9qdB0weWm*aUl)C6m2h@tR7vWzj#_{vJBL^hTl>OQi! zk{2P5T+RhpU>pO3SGF1`s*E=D3Fe$}Ct|kh)rFS|m;Et%<$hQ1H*}l^S8JTCZ zH9|a&n<>A0hlC%0fwI1{dg&Z~3lg<Kqf~AWFgkg>AP3fM9MCBecRI$ObxAKkDxdE(XU$wg zqNM~Lb= zOL?x%qRc_b7ZNvSUC-8{V>|bS9kb|6>@*R!yS}zzWtQHL5p7jOR*1flQ7-XX{e*RMB zpL0P|y;RpCZC=q*xyrR?NUEMx&sx_>pVp?*bq{$}{kJaY<8b>E6^l*(&%a&BM-TwF zGvc0sj&EY&!#-Wmmg+oM6n3G*tLr;o5?I3&k~ezD3!Bq+WukZo%$d=3`_X?ko9DcB zupnrFo5ApM$&o5|LOT-shCOSaUWy7}U#qO)OiwfueBNo^=WCgMIxQ@vUl&?y|L5L~ zh}zG|Tf$vQGEg0VujX&P&N5Zu_YnDvx*vcrK{UIrK@L~8!T;Loq;dEgt8-4~Z>-MA z4~f|<-mj-CN#89%iBb=9e3lN&Ou)7J0m zj}?c&@UD*R-|Ks)`WNbvlpo4zm7M6dAoSY@+Hf5fF17kTQtnNZqvce@jdC7dX3UCw zKk#AYZlC32t$VyXFkNw+>QAuK8mYS}a~8i_2zTpbCSm9%KGCuHgk9ua%5ZmaJ#4oY z6M)wgEtMU_VE`ubV#{OYIWp2Br6>SaRD7VA-c6`Hv(pk03XOAIXP7eH%)aR}HSMc* zZ82Df*3$Q>w|XSPanXO&LLK7CD>+0vj+LI%%Ohu9tjjrzUMAd178AgT!x-L`7nMv% zro{EC0xiqDt$B@#pn}cZbn zb7jguVxnU)SZE^;;wE9CB&1(I#6Jf&_jebdE*p3bNlGD|9x+1s@)L_L_eQU5-ujEi;f{L)tcq?n11 zs+qx+c^1bmhkd$E@}rR1^}pz7N?rd&(KKJ<6)aP>V_Of8M2-xq96h;M@HqD|8wwKA z?lqTwhbh<^j`#=q_%5;@+FNmh6}cNPorUPW`bmdNy>nFAu*)(K9k&Z>YRIbZDL>R; zcVXJV)g{=I7P_(?p8jCfs=h2lU2L?%_&8Seyi_&V#csA>-VaHC`}IoM@)iTU%K^X6 z)Uw?A@4^G@O8RS7&^NmN38xifrx3|GOSGlKMvr%clfzdn_CIUCMnr)Jf5ar3L2qoU zd5A39%?HX9>CaRQPbbZ-2#nE)!xZq0wceqjYJo{WyR%jEZL zJYF;|?lJ?8nmO;5>g~KS`2=PTP(NykQ{J?@rl^eauxXof=`HKfKUOJ}BpS|`g3OXx zy^FOhNBcJ8z8$iOnsxFvdZ4ks;@}H)o>m|AN_oF5Su2#mwk2l% z$R)`>?0H-$@|C5iTU*Yr%=}lr)-!N%*&>ym<%q5+TnA+&o$UFCw#_@d)%nDsXIO;G z1LdlvRAKH|~wm44G! z9F{ZkNlZ*k(bsbWV9hi@mkkx$?0UC?v|sB-$a`KKFQ@rsF7XmI_{^X?r4^VB`c5d8 zVa|qca&V5E@w;EmPHj!UCR^$BfSqb>jTXGBFv9^dK9(OZ3k*lGuSk0>YqHIlC|`q- zBr8`x2()`RLX}!IZ^P)>%Zcj4C?@cuX@DQ|J5C-k)rgFXzNaMXtz4eBZCFPow}|sy z7^qmhC@tD9409#25?tma%u?qt#pjFUO_O8uGt!R!Hanja(fN9Hu$T&T##|A!OkKfo z;ZRFT3URE1b^KUdW z`Ey-^h0X^r%ODkr3f_F5Bm2_{K02sLq5^tx)QyOB18D=P!q`ys-hY=njEn*g!I=c3 zeJsf2#(ia>JkvnLpy63ON`Q)Yglk6KCYdm@COdcup^`c)#_^J}+E?=u8@ z)6-@O^N9Kr>>G8#rCo^Xljz&^!v-UdK($Eo$UeAegnR${x&VsUmVIb;rtIIx3ES=G zFyJS4k0AaDniVJ#YlQieYw(mDhCaybXUS%`$9iv*UvyxO{x7Q`D z6auob?X5gQX8Blo9g@t8sVv?B3HVC;3o%~g$1WCj8J687@Xn$hl2Z0x#wf3gtDpa2 zyuN}PuX}C2-aCwDu%)`cv@7q9EYGWD9PBfhL{;1;)?-@w$sKFj{8fByBTpjnGrraT z>ag@RYDEJ0#uY<|)Zf!A*SA4kJ#k5&&0((6>nYHD4NM|y#UubakZUeuA!YGazU3NC z`J^G;Mh&ygzRMH;iP~-}j)9vl5EP=t-&pRw9D@;z)k( zv~^75`MLE)^ZpZF-*lq&VOvHV#aO`v(6iqRt2kljTW8t zpLAm{Pm(h4z!(qSQDX=KV)z$P_>%i3c%8~#+DIS$|tM56y72692 zR|qu@4z!*xX#9jCHNK@QO}@1lJHObR{n%#S;N&(M0yZ{639OrMJs>t6V$>0Yv#pDtm&(Y=C+rWhg$xo}asv~)&*sLc|d9J7K! zE(aXr!G8i?cx^b&mMc8|Q07o}^pJt+2QQ4K2vlbY^Bn~aHrM>>J>YMA==q##9e#dD zwK5&l7*3)HIX8l*`nsk;FF;nzk`s}Lg{7p}@5~x*=NEP&30S{Rc;MhH5~DYGIB=lG5Bm7?&z*vGMk_C*&mj zTJ*D0xfhv8+}Ug=v>>-oelbZ38Ixd(q#is(6bDO(a&$q1dX_v=RK=4N;HRA{zT2WA zd%#kv<3mjjJmiMzr?m15J8L*MIqOeL;$8v94ixVfP;6)8YD2o^^?WY5;ldcW-t#p} znzh+Pn!`em_a?kmqde)B$uE2srpNHdxAas{!k^@<)*1IN9qMx8>R-jLonR@1ysD{j zDM?AHT8h6L`Eyy!ofWxEJQQ`zko>uq#mMRMggpTto~b_hhA2So>${}2IO8^iOup4| z5Z?`Vjk(>GrzziCEV(~JU=tR4XwUxsx_x^$&&@yURiVG&54=DNk;89fC;2&`NZ&Rr z*YomCukMEl$SL$q4q)LatMD)!QQxTy#zDu@F=NyqwfVEiURlrJj-`DNCj62N{uj>< zkr7zCvhXKA{SQKH@ArSl(VbWcN9O0RZy*OnsMo=f7zwA(j@9_HqP5^dKnVDw>HS~4 zI>~s~sjB4LH{M)QUfF*E;@#2D_2r*^L-c<@OHCN7djGxQi54-#yWg|=A4wFvss6y= zGlXyxu>%*bZQflr?KO(H9SL~QQ8Wr`RPSJvrd&`GP%{w`uSxUsN49#OO@d3IE0B3- z+t!$0bCdpW;s5&kdKr-{LZIe)7Cu9F5quaTB9g5O6LqK_yHhtVd!?N^3>Y6_s(bMG?*lcq}j^pI53qFCbYIit;tD+$t4IFlcdELHoP2X=yFw@`#Z;C2|h$7R5`PhEH0# z2QcEwe&MF$tsBuQ4EI~tsD79%x1`*L&)CnT)|z&u7Iv2Ar_1)kXpo-it<>&DvXo^! zTiI_W3q#egE}?i}$)um6@QTp)UHkO}zue4^ORM!d(<_Kae0}GXMOSpKW94M+&3Pt9 z*Im|FiU88ac4d~{zc-stF)0`L>F*UukPQvT`<7sX!_uj!Tw%|3XvfoPn1>zQcWz9_ zn*TYfzt4yEU(2PQ?H7}|I@XO8n8N*)rSh=on8!=$|Il4u;>AjR)f~j0mZ|b;_IKMn zDD)2xb#RXFA_p~&Q34>QA1ZH%dxorBSR1uogyPyDp0RJspj#4>;^kl6Q}C>V$5cZs zWkj3VOh=v|UFM15&({IP;5EM`){|w6*JCP&9&Z7(1A{w5mV+}syMh`y;noX~fUqoT z*4ls2oA7PSgZ&pQCZjfce>+Lpx1_>FcYPte>WGxZsoZ7rTz@v2`;{rbydo+;wK&ZW z%M7V>TzzZ_UoeJyPP#bB>BI4Wp%{KSCiOo$kyU+O{S(F$IKe?6U893x#vvrF!W^<1 zHds16^89a@{?-;(<-arie7G_HXBT_r&J&y#(K)7Y*Vk;Fp5u0{wUE$i2I=k8gTeKN zk8nHh$vD77mF)waanRm3L_y^BizXZqon*zaN}y1pQkaNI29wmo;-s}DHem>_qpU#JK-{*JT#4l&9U$iuT0T;g_#In!x z-(yK{(fqL(a1ftOr32!cxBmGn(QoB+r9(-0{&+zNp?Au6Al2lAc_uh#(e)uj6xwNk_xQo)9`@S7!kXt@v zmad&%UC)V4tjPOpb2+BaQnS7+JENA4S(U)l2}XsZ!DKzj{sY}+SEUerDR}X1hp8GF z_rU6UQEdDV_1c8QI5Qwm$G z()+)IFdZ4IV_O@)`(e4fED15&8jI?4sp@F};X5rNY+OlolHOIf!LIc}rJlZX9lfTJ z8m?4}Iij$)u^wgSeGMG)g4?^dWUV|pV$_A zfKk<8&fqGd%)!uOGF4f+N?wj(I@h>J14(pXgVXPn3A>x#JS8qun?kcnYf(s;ehU;8=A+4B;9?o8&M=g-NEN zFgnd(3oWD;_tT6ikVE*x-j)#+X+TuokWc{0@v_f?#2>KB?{^9;W~byPuDbVpmj98A z4pysC0Y9_(?DWyPnawK@F&ENR+*3Jv*UsM7;#2-=o%_9nTkPJ7{ju;DN`)*1DriZI ztGg(a;W}@_sHuPp!Jj!MyCV}aMnkU8@ubjQ@(On6yIa$e1> z)%|!YHoBq6ii` z?u@w>`GMn7fJ>XGqiBf(NL8X&UQ`Wqyx4ray#q}~s$b=kZBWSGRwI=xgh-O;vnRTI z$@pVM4n~N?VZmRq?I!2;`lp1xbGIzOf6e@ymj-Jo%pA{?g!;- zxbuyu`qiI7WU2MzLy8AF`>VJq#8O0Ur}Vg%^E+ou>|n5I;HG^Of;6lt!ky-_%H^(s zfy#)K$ST8>8p-X>%d0^8*uJ&>ly139B96SESW{6>D%sLLm>uf&PuH1gLBpI>xvRt= zbL$)--X`^lkVdFtYpG&+*&axo^SmS<uPd;P9Pa~rv7gmjfLvx1>{-pADxDJI zwxi7y<`+n_7Q|Fmq&rpn0V>*1Bjvh6vkq1t^whpu>8Ib0X10ZG1ir~G&_2wxhKzcC zZ+$UST+haeeKPr*)e1O@KghNmUxx<0xm}@E@UmNFQ0ZEcEAm5Hn8o1K zs3q0V&WC7DV`I);kwoKDqES6s!u4)20i8LQkblddU)XH$WZqC`HQ=n$^3~JcGlmT5zMt}9ZVw6|%A14Uc;m)2uAfC&Qc z#16()D$M#qz3EP*gZ0)x)h+!BTleXcdbQK>ytZZP$3~U>`OOY}@1ef>DZ^7Lf4i+MmE#;)p|D)h-F^{4EbYLr z)vzo0My(tCCAY>aA7Zf0h*>zkBF3r&97=Z6nXdA9`b^~q8gGnwezix4r382NYmf$Y z%kc4q+IRWHee&Z0YTT_~c;q zzj`v1qLl!Mx-3gz>Q8EP;WWs&3}AgB)sDDsWYy5HdH6y?@ktJnOc|9W&WAGw+3^9$s7m2y>G6DF65yj?uwp%pGhZeVZWIMoi47@9MP9P6^Qr0TyK!h|TH79I zT_j9q{s<}*>Aj&$=Y%0k4-S-Hi_yT*O-^Z%Z#Gg{&TVl_<90usyv`1480dzW(UY@D zsjRgb1h2zNGYe9tCTfmAIpH77!bZNApLx(8Zn3$yo@69gp$@Mz$Ygh}oee=;?Bke` z+T4XLN1zB(U<^+*nD+AEzNz;5Pni6>2FuIHABQugBzWrX_E^8>%}2G84R(0yDctqi zTz8{+0k>}R{D*0-12J)@Q_Ml>p^d5L!TxYGT3Aj!2EWyan_`LU7?b9)2dlB>HpLSq z={wRqlddPi>xnp2@CU4kx*rtfsJrY{Kre_e0r3gQH*I81J8w}BRJDEbC!GxhSM&Ln zy^`~Pf7Tc&)%|l|hup2RGR`W4DasU|B8NQdziD-W4`?`R79p?wF=k;-e^y>iX~?)1 z%EmwnzpuMCk;}pg*7vxl#9IQ-enGC?S-=J^ZBnajSxl`w^)MXc znK?Z@#|vX7;u}sp`li%FIR-VacURXWA4wDc_Kj-0=9|1-d!F9!G{VC+6q$eJOgYP@ zTNC)zb>7){RV(09TYOn#){|yu8lpXjFE=oM4S(VsphXM!yO4McHn1aPEM@>gR*ha$ z>ZB#2qHA^CXq3M{j-F~vVqSy0rA(2+AE7>*lew#Uf%{*yp+2jiM_!W^l`U+p28i(C zCQn={i7a}H$!`0mdR4&l5*sdcguac#%o<-t*gCGSV zqAbXW_V$GaJ-}QbA9XRjgMg}mYSgV<*d3*QChZjG6|Smmn)0|Gq5-Q=($esy^Y92O z#{k>DBhMw7NWXM5J!Q=|VbBxUm|LjFCUBnrwBtLIsn|k8X-vc9@uhnevqW zAm$mkv>GeF6VPQay92a5+d|n#w*D>dt9Q|HJ6}Q^?X0a);c0pG)tNd)7N-m1w-a{S zv$+w9Q>oVd=LCyPqxcY>##-O==yuoR|HVM=UYusq(>Y_$cX~Ab|3ZX|#cuz@ApXyB zd?DvVF=y&^?d-B3t!DN|y_v?vsj0le?+3N4+Cr;UTqJx>r|z-&{8v*VV2Lp%J4kB; Q)c#-DP|sAi0^$_)FaJTvApigX literal 0 HcmV?d00001 diff --git a/docs/images/packet-format.png b/docs/images/packet-format.png new file mode 100644 index 0000000000000000000000000000000000000000..2bde285f36e9106e2802784cce56a2df8f09a180 GIT binary patch literal 6065 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 PO?ADiM%wr*4iWzaw*Csp literal 0 HcmV?d00001 diff --git a/docs/images/route-compre.png b/docs/images/route-compre.png new file mode 100644 index 0000000000000000000000000000000000000000..c2ccc05f7af029abdb075ed47ab63d801df706a2 GIT binary patch literal 15006 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