通过bo连接,as400 和 DDM 学到的历史课

通过bo连接,as400 和 DDM 学到的历史课

一、故事的开始

话说是有个同事跑来说,他的在某个区域的测试环境没法连接到数据库。 其实很自然, 那个区域默认不开放到数据库连接。如果开需要调整防火墙,需要ip和端口号,以及老板的同意。
老板同意倒是简单,问题是端口号是多少? 对方说不知道, 问了所有核心系统的同事,他们统一回答的是JDBC连接,就是默认端口。也不知道默认端口是多少,因为写程序时候根本不用指定。也不知道怎么配置。 用的是com.ibm.as400包,走的是BOBO?好吧。。在这个公司我第n次听到这个东西, 什么business object各种屎,我也完全没有兴趣弄明白。

anyway, 还是来点简单的吧。抓包。

tcpdump -i eth0 -vvv host xxx.xxx.xxx.xxx -nn


14:23:10.012742 IP (tos 0x0, ttl 63, id 42023, offset 0, flags [DF], proto TCP (6), length 52)
xxx.xxx.xxx.xxx.ddm-rdb > xxx.xxx.xxx.xxx.55766: Flags [P.], cksum 0xdd92 (correct), seq 1, ack 82, win 32800, options [nop,nop,TS val 114294500 ecr 4059183318], length 0

可以看到xxx.xxx.xxx.xxx.ddm-rdb,访问的端口名是ddm-rdb,好牛逼的样子。

来看看是何方神圣:

grep ddm-rdb /etc/services 
ddm-rdb 446/tcp # DDM-Remote Relational Database Access
ddm-rdb 446/udp # DDM-Remote Relational Database Access

于是发现了高大上的446.

446到底是何方神圣, ddm-rdb 到底是啥?

二、 DDM竟然就是分布式计算的启蒙

维基百科:

Distributed Data Management Architecture (DDM) is IBM’s open, published software architecture for creating, managing and accessing data on a remote computer.

DDM是ibm的开放的,已经发布的软件架构,用于在远程计算机上创建,管理,访问数据。当然这个远程计算机可能是IBM PC , System/38 也可能是unix

其中DDM定义了多个级别来定义不同形式的数据实体

3.2 DDM level 1: Record-oriented files #由一个记录告诉我们数据的地址和情况,然后根据地址去取数据出来,多是cobol,rpg这类语言操作。
3.3 DDM level 2: Hierarchical directories and stream-oriented files # 层级目录或者流文件。 这个就是pc和unix常用的方式
3.4 DDM level 3: Relational database services # 关系型数据库
3.5 DDM level 4: Additional Services
3.6 DDM level 5: Library services

DDM 是c/s架构,server管理本地资源给client用。客户端和服务器可以通过sna,tcpip等各工种协议交流,全双工工作(听时说,说时听),由特定的队列和报文来访问不通级别的数据实体。本地agent和服务器资源管理器等各种行为就不细说了,请看原文学习学习。

原来这个东西 是IBM SNA工作组的牛人们为了理顺IBM system/xxx之间 和 pc 和 unix各种相互访问调用。而创立的一套架构。后来随着rdbms的诞生逐步将rdms也纳入其中。

DDM 是面向对象的,对于文件访问有专门的文件模型定义,有标准的报文格式和消息队列。 这看来就是分布式系统的起源了。从现在的角度看DDM也相当前卫,可以说奠定了分布式计算的基础。

https://en.wikipedia.org/wiki/Distributed_Data_Management_Architecture

三、结束

通过一个简单的防火墙调整, 竟然能学到如此生动的IT历史课,还是有些小满足的。

不过说回来。 为什么我会关心这个? 而其这堆屎还有人关心吗? 而我们的关心,正说明我是还仅存的数个恐龙部落的一支吗???。。。。

好了,起码我们知道,as400 jdbc连接的默认端口号是TCPUDP446。 这就是我写这一坨文字中唯一的干货了。