经过前面的介绍,我们知道TCP/IP协议有一组五层模型,从上往下为应用层、传输层、网络层、数据链路层和物理层,且在网络中传输的数据都必须经过这几层模型的封装和分用,作为程序员,我们最经常打交道的就是应用层。程序员写的代码,只要涉及网络传输的代码都可以被视为应用层的一部分。且应用层中涉及到的网络通信协议,很多都是程序员自定义的,所以但凡实现一个具体程序,写代码前,一定要约定应用层协议的格式。
那如何具体实现自定义协议呢?
自定义协议分成两个阶段:
阶段一:根据需求,明确传输哪些信息。
阶段二:约定好信息的组织格式。
接下来,我们以外卖程序为例子,介绍这两个阶段
阶段一
首先,我们打来一个外卖程序时,会显示一个商家列表。此时我们可以根据我们要吃什么向服务器发送请求,这个请求中就可能包括用户要吃的东西、用户的位置信息和用户的id等信息,服务器可以根据请求里面的内容返回一个响应,响应的内容就会包括商家的id、商家的名字、商家的图片、评分和配送费等信息。
具体请求和响应的内容是如何组织的,就要靠阶段二。
阶段二
应用层也给我们提供了一些组织数据的自定义格式,常用的有行文本格式、xml格式、json格式和protobuf格式这四种。
1.行文本格式
行文本格式指的是数据以文本的形式逐行 进行记录和存储数据的一种格式。每一行代表一个相对独立的数据单元或者一条记录。
以上面点外卖为例子
请求和响应的内容根据行文本格式组织的形式如下图
注意:
上图组织数据的方案并不是固定的,列与列之间不一定使用逗号分隔, 也可以使用分号,一个点和/t等形式来隔开列与列之间的信息,行与行之间也是如此。
最低要求就是客户端服务器(前段端)和后端服务器共同按照同一套规则来进行构造和解析数据就行了。
2. .xml格式
xml格式就是以成对的标签构成的键值对结构来组织数据,且xml格式中的标签内容是可以自定义的。
形式如下图
xml格式的优缺点
优点:可读性好
缺点:xml格式中的开始标签和结束标签表示的都是同一个信息,冗余信息太多了,在网络传输中,会消耗更多的宽带。
对于一个服务器来说,硬盘最便宜,内存其次,CPU小贵,宽带特别贵
3.json格式
json格式是一种轻量级的储存数据的格式,json格式的数据在网络传输时,占用的网络宽带较小,尤其时处理大量数据时,能够有效提高传输效率,节省网络资源。
json也是最流行的网络数据格式组织的方案。
形式如下图
优点:可读性好,消耗的宽带资源也比xml少
缺点:还是存在冗余信息
4. protobuf格式
protobuf格式是基于二进制的格式对数据进行压缩,这样就不涉及到xml和json格式中的冗余信息了,消耗的宽带资源最少,但是可读性变差了。
总结
1.行文本格式最原始,可读性好
2.xml格式较原始,可读性好,冗余较多
3.json格式是当今主流的方式,可读性好,冗余一般
4.protobuf格式是在追求高性能场景下的使用方式,可读性差,冗余最小
但是在应用层中,除了自定义协议之外,也有一些大佬们搞好的现成的协议,如HTTP协议就是其中的一种,且HTTP协议也是我们学习的重点内容,接下来,我就会向大家一步一步介绍HTTP协议。
Fiddler抓包工具
HTTP是一个文本格式的协议,可以通过Fiddler抓包,分析HTTP请求和响应的细节。
抓包工具的原理
Fiddler相当于一个"代理",当浏览器访问Sogou.com时,就会先把这个http请求先发给fiddler,接着Fiddler再将请求转发给sogou服务器,当sogou服务器返回数据时,Fiddler会先拿到返回的数据,在把数据返回给浏览器。
如下图
因此,通过Fiddler,我们就可以清楚的知道浏览器和sogou服务器之间交互的细节,方便我们以后的学习。