自定义 TCP 协议
Posted 百果科技研发团队
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自定义 TCP 协议相关的知识,希望对你有一定的参考价值。
自定义 TCP 协议
2019/01/18
![自定义 TCP 协议](https://image.cha138.com/20210415/65869752b63b4f5ab6f88656187c8037.jpg)
![自定义 TCP 协议](https://image.cha138.com/20210415/a0c4b8a3ff494f249db4d7ac551b0a08.jpg)
![自定义 TCP 协议](https://image.cha138.com/20210415/5657840127d5406688d92aa72408a08c.jpg)
![自定义 TCP 协议](https://image.cha138.com/20210415/0270e8bdbbb442a7a678914bd2220b49.jpg)
01
TCP回顾
TCP 是一种面向连接的、可靠的、基于字节流的传输层通信协议。从这句话中我们可以看出有以下一些重要信息。
面向连接:通过 ip,端口等进行握手验证连接等。
可靠:数据一定可以传输到对端。
基于字节流:本文讨论的重点,怎么发,怎么收等。
下图 TCP 报文格式,数据就是指我们真正传输的东西.。
![自定义 TCP 协议](https://image.cha138.com/20210415/2a8fc4df313846ff821a502618162c5f.jpg)
02
网络字节序
网络上传输的数据都是字节流,对于一个多字节数值,在进行网络传输的时候,先传递哪个字节?也就是说,当接收端收到第一个字节的时候,它将这个字节作为高位字节还是低位字节处理,是一个比较有意义的问题。
大端:
小端:
标准化结构即是网络字节序(在网络传输过程中的结构,一般而言指的是大端字节序)
03
什么是协议
我们都知道网络传输中数据包的格式一定都是 010101 的二进制格式。
![自定义 TCP 协议](https://image.cha138.com/20210415/84a37b31582244409e87c2d0532f94dd.jpg)
协议指的就是客户端与服务端事先商量好的,每一个二进制数据包中每一段字节分别代表什么含义的规则。
04
为什么要自定义协议
1、互联网上充斥着各种各样的网络服务,在对外提供网络服务时,服务端和客户端需要遵循同一套数据通讯协议,才能正常的进行通讯;就好像你跟台湾人沟通用闽南语,跟广东人沟通就用粤语一样。
2、实现自己的应用功能时,已知的知名协议(http,smtp,ftp等)在安全性、可扩展性等方面不能满足需求,从而需要设计并实现自己的应用层协议。
05
协议的设计
如下图的一个简单的登录协议:
![自定义 TCP 协议](https://image.cha138.com/20210415/e6b3973cd4bd432089d2065da3399ec9.jpg)
在这个数据包中,第一个字节为 1 表示这是一个登录指令,接下来是用户名和密码,这两个值以