java dtls server_基于tinyDTLS 构建的lwm2m Server
项目基于eclipse wakaama工程代码实现lwm2m server
目前已经构建好的是无dtls的lwm2m client server 以及有dtls的client端
构建思路
1 实现dtls server 与 client端的握手,单客户端,服务端只维护一个链接context,相当与demo
2 实现lwm2m 协议包的交互,server端能够正常响应注册。
3 链接维护,实现多客户端的注册和消息上报,connection_list的操作
4 完整稳健的lwm2m server实现
tools used:
Tinydtls-0.8.2 : https://sourceforge.net/projects/tinydtls/files
Wireshark : sudo apt-get install wireshark (ubuntu)
Wakaama : https://github.com/eclipse/wakaama.git
step 1 握手的实现:
当时考虑有两个思路---1 、基于现有lwm2m加入tinydtls 2、 基于FreeCoAP做好的基于dtls的coap协议,移植lwm2m。 最后使用第一个方案走通了,但是现在看来第二个方法对于自己理解CoAP和dtls有很大的帮助,所以做一个陌生事情走些弯路是很有必要的 ^_^。上图是dtls建联的握手过程,wakaama提供了dtls client端的实现,那么初步测试应该看其是否符合dtls协议(即使其传输的是CoAP包,不相关),所以这里下载了tinydtls-0.8.2的源码,其中的test用例有server端代码,编译后交互提示PSK key invalid,怀疑client对入参传递有误(默认PSK key是 secretPSK),因此在client中预设这个值,握手成功。
step 2 lwm2m 注册的实现 :
握手成功后dtls就开始传输application data,而这个处理过程是由预定义的回调函数处理的,由于我们要解析其中的CoAP包,所以添加了特殊的处理函数加入到dtls处理过程中。但lwm2m定义的context需要改变为全局变量传入到此函数中,之后利用dtls_connection中定义的消息handle机制来响应客户端的注册请求。
step 3 安全链接list的管理实现
1、目前机制是处理client端的请求,直接调用lwm2m的messagehandle,但是由于做在了callback中,server外部重新取获取会话并试图进行操作时,会出现peer not found错误。需要检查commandline的传参。
2、 重新回到以dtls-server为base的lwm2m客户端构造,分别使用dtls-handle-read来处理链接管理,并在read_from_peer中添加对lwm2m包的解析。目前已经能够顺利注册并进行对client端的读写,然而client注销后再次注册会找不到会话,需要排查如何解决这个问题!
3、 server的逻辑跟client的区别主要时dtls_context,client端只需要维护一个contex,所以在dtlsconnection 中把context做成了全局静态变量,而server端需要维护一个context列表,所以计划重新改写dtlsconnection。
4 实现方法: 对于每一个连入client建立dtls-context,在全局维护链接组:connList[maxlink],预先确定最大链接数maxlink。 在每次读入一个包时,解析其session,如果发现就使用原来的,没有发现就在connList中寻找第一个空链接并复制new_context。这样与连入的client id 可以一一对应,在lwm2m对话中如果client注销,则把对应id的链接也注销掉。
对应的来说,server的逻辑如下图所示
java dtls server_基于tinyDTLS 构建的lwm2m Server相关推荐
- 基于K8S构建企业级Jenkins CI/CD平台实战(三) 之 带你实战Spring boot/Cloud 项目 CI/CD jenkins自动化构建、部署过程
需要环境 Git(GitLab) Harbor 私服 kubernetes-plugin 使用 Kubernetes jenkins 通过前面三篇我们已经了解了jenkins和 kubernetes- ...
- leshan基于OMALightweight M2M(LwM2M)协议的Java实现(入门)
概述:基于翻译当前版本为2017-9-24, github地址:leshan, LwM2M是基于Coap上的协议 1.Home篇: Eclipse Leshan 用java语言实现了OMA Light ...
- 基于gradle构建Java应用程序
基于gradle构建java应用程序示例 目录 你需要什么 用户手册 初始化项目 项目结构 编译程序 运行程序 总结 源码 你需要什么 大约8分钟 一个文本编辑器 命令行终端 jdk1.7或更高版本 ...
- java dtls server_DTLS协议(基于UDP)中client/server的认证过程和密钥协商过程
我的总结:DTLS的握手就是协商出一个对称加密的秘钥(每个客户端的秘钥都会不一样),之后的通信就要这个秘钥进行加密通信.协商的过程要么使用非对称加密算法进行签名校验身份,要么通过客户端和服务器各自存对 ...
- 在微服务架构下基于 Prometheus 构建一体化监控平台的最佳实践
欢迎关注方志朋的博客,回复"666"获面试宝典 随着 Prometheus 逐渐成为云原生时代的可观测事实标准,那么今天为大家带来在微服务架构下基于 Prometheus 构建一体 ...
- 面向 Java 开发人员的 Ajax: 构建动态的 Java 应用程序
面向 Java 开发人员的 Ajax: 构建动态的 Java 应用程序 Ajax 为更好的 Web 应用程序铺平了道路 在 Web 应用程序开发中,页面重载循环是最大的一个使用障碍,对于 Java™ ...
- 技术干货| 阿里云基于Hudi构建Lakehouse实践探索
简介:阿里云高级技术专家王烨(萌豆)在Apache Hudi 与 Apache Pulsar 联合 Meetup 杭州站上的演讲整理稿件,本议题介绍了阿里云如何使用 Hudi 和 OSS 对象存储构建 ...
- 如何基于DataWorks构建数据中台?
简介:为了应对众多业务部门千变万化的数据需求和高时效性的要求,阿里巴巴首次提出了数据中台的概念,经过众多项目的实践已经沉淀出了标准化的流程和方法论.如何构建一个数据中台?一个好的数据中台需要具备哪些功 ...
- 网络安全公司奇安信集团是如何基于 Flink 构建 CEP 引擎实时检测网络攻击【未来不可忽视的网络安全】
摘要: 奇安信集团作为一家网络安全公司是如何基于 Flink 构建 CEP 引擎实时检测网络攻击?其中面临的挑战以及宝贵的实践经验有哪些?本文主要内容分为以下四个方面: 背景及现状 技术架构 产品及运 ...
- 基于Kebernetes 构建.NET Core技术中台
今天下午在腾讯云+社区社区分享了<基于Kubernetes 构建.NET Core技术中台>,下面是演讲内容的文字实录. 我们为什么需要中台 我们现在处于企业信息化的新时代.为什么这样说呢 ...
最新文章
- java获取pdf文件的总页数
- Hook技术之4 在自己的进程中注入一个Dll到别人的进程
- 4代hiv检测50元_闲置甩干机卖了50元!大爷突然想起:里面还有4根金条
- 【ARM】Tiny4412裸板编程之Chip ID
- Laravel 启动流程分析 (代码全流程)
- Hadoop完全分布式安装
- 2299元 OPPO K3 8GB+256GB版本线上线下同步开售
- python怎么创建类的例题_Python_面向对象练习题
- ZOJ 3077 Move to Baggage Office
- DoIP协议一致性测试
- 伺服电机常用参数设置_松下伺服几个参数需要熟悉并掌握设置方法
- 计算机的就业指导论文,★计算机就业指导论文题目计算机就业指导毕业论文题目大全计算机就业指导论文选题参考...
- c# 时间戳的使用,日期判定(时间戳获取、 时间戳和DateTime的转换、时差计算)
- linux 转型 安卓,国内知名Linux网站Linux公社和红联都转型为Android安卓网站
- 微软office服务器连接很慢,解决 RPC 请求处理速度慢的问题
- 你想要的宏基因组-微生物组知识全在这(2023.01)
- 三次样条曲线 python实现
- 启明星辰隔离网闸添加客户端服务器资源
- 数据库bigint转为JAVA中的String
- 2015年中国视频监控市场发展特点及未来展望