目录
1 五层协议
前面我们了解过五层协议分别是:应用层、传输层、网络层、数据链层、物理层。
2 应用层
不同的应用程序里面有不同的应用层协议,在这里有很多应用层协议是自定义的。
那如何自定义应用层协议呢:①考虑在客户端和服务器之间需要传递哪些信息;②信息或者数据按照什么样的格式组织(按照需求)。
不同的应用程序中的约定格式不一定相同。自定义应用层协议,使用灵活的数据格式不便于团队协作,因此有特性的数据传输格式来约束对格式的定义。
数据传输格式:
①HTTP,是应用层中最重要最常用的协议。
②XML,比较典型的数据组织格式,格式是通过标签的形式来组织键值对数据。标签名字就是key,标签里面的内容就相当于value。HTML也是标签化的格式,但是xml标签名是自定义的,html中的标签都是约定好的。
XML缺点:不美观;数据太多的时候就不方便编写;数据都要通过网络传输,消耗网络带宽,xml中包含大量的标签,导致网络带宽占用更高。
③JSON是当前最流行的一种数据组织格式,相当于XML的替代品,源于js,现在是一个和语言无关的数据组织格式。JSON首先是{},{}里面包含多组键值对,键值对之间用,来分割,键和值之间使用:来分割,键只能是字符串类型,值可以是字符换、数字、数组和json。
JSON优点:可读性好;较为美观;扩展性强。
JSON缺点:引入额外的字符串,传输数据量变大,效率上仍然没有提升。
④protobuffer,既是一个数据格式,也是一个库来操作这种格式的数据,相较于xml和json来说这个数据格式能够更高效的组织数据。这个数据格式是二进制格式,占用空间较少,传输效率较高,但同时也不便于观察阅读和调试。
3 传输层
传输层是端到端之间的传输,重点关注的是起点和终点,前面我们介绍了两个核心协议:UDP、TCP。
3.1 UDP协议
3.1.1 UDP报头
包括源端口号、目标端口号、UDP长度和UDP校验和四个字段,每个字段2个字节,范围为0-65535,由于现在传输数据量越来越大,长度不够用的情况下有两种解决方法:在应用层代码这里针对广告数据拆包,拆成多个UDP数据报,分别传输,但开发测试起来很复杂,风险较高;另外一种方法就是使用TCP,字节流没有对包的长度作出修改较为合适。
3.1.2 校验和
校验和是为了检查数据是否出错。光信号和电信号网络传输过程中容易受到一些干扰导致传输的数据出错,为了避免出现数据出错的情况,就对数据额外添加信息,添加的信息和数据内容相关,检查数据是否正确。就像我们高中有很多课本,我们怎么整理我们的课本呢,首先就是确定我们一共有多少个课本,为了确保我们的课本都在,我们就会用语数英物化生政史地这样的简称来核对。
3.1.3 CRC算法
UDP的校验和使用了CRC算法(循环冗余校验),就是把UDP的报文中的每个字节都进行累加,加和也放到一个两个字节的数字中,加的过程中如果溢出也不用管,最终我们得到的结果就是校验和,发送方发送的时候就先计算校验和,记录到报头中,接收方接收到数据后按照同样的规则再次计算校验和与发送方的校验和进行对比,如果一样就说数据没有问题。