# 关于Tars协议和Tup协议的说明

`TARS编码协议`、`TUP组包协议`、`TARS组包协议`三者之间的关系：

* `TARS编码协议`是一种数据编解码规则，它将整形、枚举值、字符串、序列、字典、自定义结构体等数据类型按照一定的规则编码到二进制数据流中。对端接收到二进制数据流之后，按照相应的规则反序列化可得到原始数值。
* `TARS编码协议`使用一种叫做`TAG`的整型值(unsigned char)来标识变量，比如某个变量A的`TAG`值为100(该值由开发者自定义)，我们将变量值编码的同时，也将该`TAG`值编码进去。对端需要读取变量A的数值时，就到数据流中寻找TAG值为100的数据段，找到后按规则读出数据部分即是变量A的数值。
* `TARS编码协议`的定位是一套编码规则。`tars`协议序列化之后的数据不仅可以进行网络传输，同时还可以存储到数据库中。
* `TUP组包协议`是TARS编码协议的上层封装，定位为通信协议。它使用变量名作为变量的关键字，编码时，客户端将变量名打包到数据流中；解码时，对端根据变量名寻找对应的数据区，然后根据数据类型对该数据区进行反序列化得到原始数值。
* `TUP组包协议`内置一个TARS编码协议的Map类型，该Map的键值是变量名，Map的值是将变量的数据值经过TARS编码序列化的二进制数据。
* `TUP组包协议`封装的数据包可以直接发送给`Tars`服务端，而服务端可以直接反序列化得到原始值。
* `TARS组包协议`是对RequestPacket（请求结构体）和ResponsePacket（结果结构体）使用TARS编码协议封装的通信协议。结构体包含比如请求序列号、协议类型、RPC参数序列化之后二进制数据等重要信息。
