结合网络计算器代码,重新回顾osi七层模型

目录

结合代码,回顾osi七层模型

引入

传输层

会话层

表示层

应用层

如何得到应用层协议 

总结


结合代码,回顾osi七层模型

引入

结合我们之前写过的网络计算器代码,我们来重新回顾一下osi七层模型

--网络计算器代码编写+注意点(序列化,反序列化,报头封装和解包,服务端和客户端,计算),客户端和服务端数据传递流程图,守护进程化+日志重定向到文件-CSDN博客

网络计算器(使用json序列化/反序列化,条件编译,注意点),json介绍+语法介绍-CSDN博客

osi模型,tcp/ip模型(名字由来+各层介绍+中间设备介绍)-CSDN博客

我们从下往上看:

下三层我们暂且不看,因为代码里并没有涉及到

传输层

传输层保证数据被可靠到传输到对方主机

  • 对应我们使用的tcp协议

会话层

会话层用于负责建立和断开通信连接

  • 回想一下我们写的代码,每收到一个连接,就创建一个子进程去处理,当处理完成/失败时,子进程退出,并关闭与客户端的连接
  • 也就是,由子进程管理[新连接的文件描述符]的生命周期
  • 所以,创建子进程去对外提供服务,就相当于创建了一个会话层
  • 其实也可以类比xshell,当我们登录后,它会为我们新建一个会话;这和客户端与服务端连接后,为它新建了一个文件描述符作为通信桥梁是一样的
  • 只要这个会话存在,就代表他们之间正在通信

当然,这里其实并没有太体现出管理性

其实可以在原有基础中增加很多管理功能的,比如:

  • 连接成功后,超过一定时间不发送消息,就自动关闭连接(因为连接了却不通信,相当于占着茅坑不拉屎,纯浪费资源,不如早点释放)
  • 之前实现过的重连功能也算是一种管理

表示层

表示层用于转换设备固有数据格式和网络标准数据格式

  • 是不是很熟悉,这其实就是我们的有效报文在进行格式的转换(报头的封装和解包)

其中:

  • 设备固有数据格式 -- 我们自定义的协议 : 将结构体的字段以一定顺序,一定分隔符组合成有效报文
  • (虽然其中之一被我魔改成是一个独立的字符串,也并不需要重新组合,总之依然是协议,双方都认识且都遵守)
  • 网络标准数据格式 -- size\n有效报文\n

应用层

应用层就是为上层提供服务的,针对特定应用的协议

  • 我们这里是网络计算器,会把拿到的运算表达式传入计算逻辑,计算完成后返回结果,然后又将它转换为字符串格式 -- 这一部分就是我们的应用层
  • 处理有效报文(反序列化) -> 结果 -> 将结果封装为有效报文(序列化) 的过程,就是我们定制的应用层协议,它决定了我们如何处理收到的有效数据
  • 不同的应用场景,有不同的序列化/反序列化方法,以及处理数据的方法

如何得到应用层协议 

应用层协议有三种方式可以得到

  • 有很多现成的,很好用的应用层协议可以供我们使用,比如http协议(超文本传输协议)等
  • 也有直接提供第三方库的,可以直接调用库中定义好的接口
  • 当然,我们也可以自定义协议(如果是供公司内部使用的服务/游戏后台开发/后台组件,一般会需要自定义协议)

总结

  • 所以,我们的代码结构是完全符合osi七层模型的,这也反过来证明这个模型定义的非常精准非常好
  • 也可以看出来,上三层的设计是很自由的,它可以根据场景不同/设计人员的心情不同而定制,这也是它无法写入内核的原因,它没法被写死
  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值