0
点赞
收藏
分享

微信扫一扫

【设计模式】策略模式

目 录

🏉一. 应用层协议

我们自己写的应用程序就是在应用层

虽然应用层里面有一些现成的协议,但是在实际工作中也会存在 自定义应用层协议(发明协议?协议就是约定,约定好客户端和服务器按照啥样的格式来传输数据

那么应用层协议如何约定呢?

自定义应用层协议,需要从两个角度入手:

  1. 考虑清楚交互过程要传递的信息有哪些

如我们点外卖:

  • 启动程序:涉及到网络交互
  • 请求:用户信息
  • 响应:商家信息(商家名称,商家评分,商家位置,商家预览图…)

点击某个商家,涉及到网络交互

  • 请求:用户信息,点击的商家信息
  • 响应:该商家的详细情况(有哪些外卖可以点,每个菜多少钱,评价怎么样,销量如何,分类信息,预览图…)
  1. 考虑清楚这些信息组织格式

方式一一种典型的约定方式,直接使用简单分隔符来对不同部分的信息做区分,考虑获取商家列表,约定的数据组织格式

  • 请求:用户 ID;位置坐标(经度纬度)
  • 响应:商家名称;商家评分;商家位置;商家预览图地址;

方式二一种典型的数据约定格式,使用固定长度,来区分从哪里到哪里是一个信息

  • 请求:(一个请求固定 12 个字节)
    在这里插入图片描述

  • 响应:
    在这里插入图片描述

方式三方式一和方式二混合搭配,有些字段使用固定长度,有些字段使用分隔符。

方式四通过 XML 的格式来约定数据

  • 请求:
    在这里插入图片描述

  • 响应:
    在这里插入图片描述

方式五json 相比于 xml 更常用的数据组织形式

  • 请求:
    在这里插入图片描述

  • 响应:
    在这里插入图片描述

json 是当下用来自定义协议的时候,非常常用的格式!也有很多相关的第三方库,可以用来操作 json 数据。

方式六还有一些其他的 “二进制” 组织格式,protobuffer,thift 等

应用层协议数据格式有很多种,在实际开发中要根据实际的情况来决定使用哪种更合适

拓展带宽的相关知识:

应用层协议不仅仅是可以自己写代码自定义协议,也有一些现成的协议,可以直接使用的,最著名的协议就是 HTTP 协议(后面的文章会更新介绍)


⚾️二. 传输层协议

传输层协议是操作系统内核中已经包含好的

其中包含了

  • UDP:无连接,不可靠传输,面向数据报,全双工
  • TCP:有连接,可靠传输,面向字节流,全双工

认识协议的细节,往往要认识协议的报文格式

👒1. UDP 协议

在这里插入图片描述

使用 IP 地址,来区分当前是哪个主机,一个主机上可能有多个应用程序,使用端口号来区分应用程序。

UDP 长度:表示了 UDP 数据报有多长。(注意:这里此处有个重大缺陷,此处的长度,单位是字节,2个字节,能表示的最大长度是 65535 => 64KB => 一个 UDP 数据报最长就是 64KB,由于当时创建的时候,64KB 算大的,但是目前而言,如果代码中使用 UDP ,需要保证一个数据报(一个 DatagramPacket)最大不能超过 64KB)

会有人问为什么不把 UDP 协议升级更新一下,改为 4 个字节或者 8 个字节呢?

🌂2. 校验和

网络传输中,传输的数据,不一定是准确无误的!

本质上是光信号 / 电信号,使用不同频率的光信号,表示 1 - 0,使用不同电频的电信号,表示 1 - 0,传输过程中,信号是可能受到干扰的!(尤其是无线,更容易受到干扰),干扰就可能造成 “比特反转” ,接收方,收到了数据之后,就得验证下,看看当前的数据是否是正确的!(验货)

校验和可以认为是针对数据特征进行的 “摘要”(相当于瓷砖数量和款式),接收方就可以根据校验和来进行检查了。

UDP 传输数据,网络上的数据是可能受到干扰

发送的时候,针对要传输的数据,计算一个 “校验和” (相当于配置单)
发送的时候,把数据和校验和一起发送过去

接收的时候,针对收到的数据重新计算校验和,对比一下自己计算的校验和和发来的校验和是否是一样的,如果是一样的,就说明数据没啥问题,不一样就有问题。

校验和,不仅仅是在 UDP 这里,很多的别的地方也会涉及到,只要是数据传输可能出现问题,都可以使用校验和的思想。

注意:哪些应用层协议基于 UDP 只能靠硬背

扩展问题

经典面试题:

  1. UDP本身是无连接,不可靠,面向数据报的协议,如果要基于传输层UDP协议,来实现一个可靠传输,应该如何设计?
  2. UDP大小是受限的,如果要基于传输层UDP协议,传输超过64K的数据,应该如何设计?

以上两个问题答案类似,都可以参考TCP的可靠性机制在应用层实现类似的逻辑:(后文详解TCP)

👓3. TCP 协议

由于 TCP 协议很重要切内容比较复杂过多,请看下篇文章详解 TCP 协议

举报

相关推荐

0 条评论