2018/3/10 手把手教你实现一个应用层协议
身为一名程序员,怎么能不会自定义协议呢?
大家都知道在网络传输当中,我们的TCP/IP协议是分为四层的,分别是应用层,传输层,网络层,链路层,而每一层的协议都有着各不相同职责。
应用层:将数据报文按照一定格式组装,最典型的例子:http,ftp等协议
传输层:将一个完整报文按照一定格式切割个几个小报文,典型代表:tcp,udp等协议
网络层:负责数据报文在网络中传输的协议。典型:ip协议
链路层:硬件相关
今天我们来基于Netty实现一个自定义的应用层协议吧。
首先,我们抓下包,看看http协议的报文格式
这里面,可以看到http协议是分为了行,头,体三层,每一层都有多个字段,而每个字段都可以对应一个或者多个参数。所以我们只要仿照其实现自定义协议就行;
首先,我们也来自定义一个请求头
将请求头设置进具体的报文类
之后我们还需要自定义一个编解码处理器,因为在网络传输中流是无法掌控的,就像水一样,只有设置分隔符,或者自定义协议才能做到区分,而自定义协议,则必须要自己实现与协议相匹配的的编解码器;
编码器
解码器
之后自定义一个Netty处理类
创建一个在管道初始化类,将我们的编解码器和处理器设置进去
写一个客户端
以及一个服务端