EPICS CA请求能否成功的影响因素

2023-10-16 20:30

本文主要是介绍EPICS CA请求能否成功的影响因素,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. 子网和广播域

子网掩码和广播域互为互补的网段。
例如:10.0.2.235的掩码为255.255.0.0,则它所在的子网为10.0.0.0,广播域为10.0.255.255;
192.168.206.235的掩码为255.255.255.0,则它所在的子网为192.168.206.0,广播域为192.168.206.255.

单播、广播都是在数据帧层面,即MAC层;多播(组播)既涉及到MAC层,又涉及到IP层。
所谓广播,就是让当前局域网中所有主机都收到MAC数据帧(DMAC=ff-ff-ff- ff-ff-ff)。
数据帧的广播范围不需考虑IP,只需考虑数据链路层和物理层是否可达。
计算机自己能发广播包吗?能

2. 四种IP广播地址

2.1 受限的广播

受限的广播地址是255.255.255.255。
它不被路由但会被送到相同物理网络段上的所有主机.

2.2 指向网络的广播

指向网络的广播地址是主机号为全1的地址。A类网络广播地址为netid.255.255.255,其中netid为A类网络的网络号。一个路由器必须转发指向网络的广播,但它也必须有一个不进行转发的选择。

2.3 指向子网的广播

指向子网的广播地址为主机号为全1且有特定子网号的地址。
例如,如果路由器收到发往128.1.2.255的数据报,当B类网络128.1的子网掩码为255.255.255.0时,该地址就是指向子网的广播地址;但如果该子网的掩码为255.255.254.0,该地址就不是指向子网的广播地址。

2.4 指向所有子网的广播

指向所有子网的广播地址的子网号及主机号为全1。
例如,如果目的子网掩码为255.255.255.0,那么IP地址128.1.255.255是一个指向所有子网的广播地址。然而,如果网络没有划分子网,这就是一个指向网络的广播。

网络中的广播地址
四种IP广播地址

3. 网络是否可达

3.1 MAC层是否可达

测试:点对点连接,各自arp缓存表中都有对方的IP和MAC地址映射(REACHABLE状态)

10.0.3.235/16  ping不通 10.0.2.200/24;  (子网分别为10.0.0.0和10.0.2.0)
由于二者点对点连接,且10.0.3.235/16知道10.0.2.200/24的MAC地址,所以10.0.2.200/24可以收到数据帧,
但是由于网络层的IP不在同一子网内,而ping是基于网络层的ICMP协议,所以ping不会返回响应。
10.0.3.235/16  ping得通 10.0.2.200/16;  (子网都为10.0.0.0)
10.0.2.235/16  ping得通 10.0.2.200/24。  (子网分别为10.0.0.0和10.0.2.0)

发出对某IP的请求时,若当前主机的ARP缓存表中没有该IP,会先广播ARP请求,获取该IP的MAC地址。因此,物理上网络连接起来、但不属于同一子网的主机可以互相收到ARP请求,并获得彼此的MAC地址。

相同的子网才能互相ping通。
若有时候发现本不应ping通的两个子网之间ping通了,可能是发出ping请求的主机的ARP缓存(IP地址和MAC地址映射表)还存着之前能ping通目的IP时的MAC地址。过二三十分钟缓存清空更新或arp -d 删除该条ARP缓存后就无法ping通了。

3.2 防火墙的影响

当一个CA客户端向CA服务端(也就是IOC)发出请求时,通信过程如下:

							CA客户端											CA服务端发起CA请求			<client IP>:<port1>    ---------- UDP ---------- >    <server IP>:5064<client IP>:<port1>    < -------- UDP ------------    <server IP>:5064			CA应答(需CA客户端的<port1>允许被访问)建立CA连接			<client IP>:<port2>    ---------- TCP ---------- >    <server IP>:5064<client IP>:<port2>    < -------- TCP ------------    <server IP>:5064......

由于涉及到端口(TCP和UDP)通信,无论是CA服务端还是CA客户端,防火墙的存在都会影响CA连接是否成功。
当防火墙未开启相关端口时,会导致CA服务端或CA客户端相应端口无法收到上述过程中的数据报文,所以CA连接不成功。
由于CA客户端的< port1 >和< port2 >一般是随机端口,并不能精确控制防火墙开启相应端口。因此,CA客户端和CA服务端的防火墙最好都关闭。

例:CA客户端(192.168.188.131)向 CA服务端(192.168.206.235)发送 camonitor dongxw:aSubExample 请求:
在这里插入图片描述
CA客户端(192.168.188.131)开启了防火墙,CA服务端(192.168.206.235)未开启防火墙。
当CA客户端通过 49024 UDP端口 发出CA请求后,无法接收到CA服务端返回给 49024 UDP端口的UDP数据报文。
在这里插入图片描述
在CA客户端防火墙中开启该UDP端口,
在这里插入图片描述
则可以收到报文,并进入下一步,通过 49768 TCP端口 发出TCP连接(由于是主动发出的TCP连接,因此该 TCP端口 可以被访问并连接到),之后CA客户端即可收到PV数据。
在这里插入图片描述
在这里插入图片描述

4. 目的IP列表的正确设置

4.1 EPICS_CA_AUTO_ADDR_LIST 和 EPICS_CA_ADDR_LIST

CA客户端发出CA请求时,其目的IP列表由EPICS_CA_AUTO_ADDR_LIST和EPICS_CA_ADDR_LIST共同决定。
https://epics.anl.gov/base/R3-14/12-docs/CAref.html#Environmen

【 EPICS_CA_AUTO_ADDR_LIST 】 初始化目的IP列表。

During initialization CA builds the list of server destination addresses used when sending CA client name resolution (search) requests. This table is initialized by introspecting the network interfaces attached to the host. For each interface found that is attached to a broadcast capable IP subnet, the broadcast address of that subnet is added to the list. For each point to point interface found, the destination address of that link is added to the list. This automatic server address list initialization can be disabled if the EPICS environment variable EPICS_CA_AUTO_ADDR_LIST exists and its value is either “no” or “NO”. The typical default is to enable network interface introspection driven initialization with EPICS_CA_AUTO_ADDR_LIST set to “YES” or “yes”.

EPICS_CA_AUTO_ADDR_LIST=YES时,会在主机所有网卡所接入的可广播子网内、所有点对点连接的IP中查找相应PV。

【 EPICS_CA_ADDR_LIST 】 在目的IP列表中添加特定IP。

Following network interface introspection, any IP addresses specified in the EPICS environment variable EPICS_CA_ADDR_LIST are added to the list of destination addresses for CA client name resolution requests. In an EPICS system crossing multiple subnets the EPICS_CA_ADDR_LIST must be set so that CA name resolution (search requests) frames pass from CA clients to the targeted CA servers unless a CA proxy (gateway) is installed. The addresses in EPICS_CA_ADDR_LIST may be dotted IP addresses or host names if the local OS has support for host name to IP address translation. When multiple names are added to EPICS_CA_ADDR_LIST they must be separated by white space. There is no requirement that the addresses specified in the EPICS_CA_ADDR_LIST be broadcast addresses, but this will often be the most convenient choice.

4.2 CA服务端:单机单IOC

此时该IOC启动时,
默认监听 5064 UDP 端口,以响应CA请求;
默认监听 5064 TCP 端口,用于和CA客户端建立CA连接,传输PV数据。

因此,此时CA客户端的 EPICS_CA_ADDR_LIST 设为单播地址或广播地址,均可访问到CA服务端的 IOC。

4.3 CA服务端:单机多IOC

单机运行多IOC时,
第一个启动的 IOC 默认监听 5064 UDP 端口,以响应CA请求;
默认监听 5064 TCP 端口,用于和CA客户端建立CA连接,传输PV数据。
而之后启动的 IOC 还会默认监听 5064 UDP 端口,以响应CA请求;
但监听的 TCP 端口号随机生成,用于和CA客户端建立CA连接,传输PV数据。

此时CA客户端的 EPICS_CA_ADDR_LIST 若设为广播地址,则可访问到CA服务端的所有 IOC。
但若设成单播地址,则不能访问到CA服务端的所有 IOC,往往只能访问到最后启动的那个 IOC,
因此,需要在IOC主机上用 iptables 对UDP的5064端口设置单播转广播。

例:CA客户端(192.168.188.131)向 CA服务端(192.168.206.235)发送 CA 请求:
在 CA服务端(192.168.206.235)设置:

iptables -t nat -A PREROUTING -d 192.168.206.235 -p udp --dport 5064 -j DNAT --to-destination 192.168.206.255

此时在CA服务端启动3个IOC。CA客户端的 EPICS_CA_ADDR_LIST=192.168.206.235, 设为单播地址。

在这里插入图片描述

# CA服务端第 2 个 IOC 输出信息
as warning: Configured TCP port was unavailable.
cas warning: Using dynamically assigned TCP port 38279,
cas warning: but now two or more servers share the same UDP port.
cas warning: Depending on your IP kernel this server may not be
cas warning: reachable with UDP unicast (a host's IP in EPICS_CA_ADDR_LIST)
iocRun: All initialization complete
2023-04-04T21:32:07.932 Using dynamically assigned TCP port 44921.

在这里插入图片描述

# CA服务端第 3 个 IOC 输出信息
cas warning: Configured TCP port was unavailable.
cas warning: Using dynamically assigned TCP port 45774,
cas warning: but now two or more servers share the same UDP port.
cas warning: Depending on your IP kernel this server may not be
cas warning: reachable with UDP unicast (a host's IP in EPICS_CA_ADDR_LIST)
iocRun: All initialization complete
2023-04-04T21:33:31.507 Using dynamically assigned TCP port 53823.

在这里插入图片描述

Several soft IOCs on one host
How to Make Channel Access Reach Multiple Soft IOCs on a Linux Host

5. 不同场景的实验测试

5.1 相同子网下的CA请求

5.1.1 206.235访问206.234上的PV
EPICS_CA_ADDR_LIST127.255.255.255192.168.206.255192.168.255.255192.255.255.255255.255.255.255
EPICS_CA_AUTO_ADDR_LIST=NO×××
EPICS_CA_AUTO_ADDR_LIST=YES
5.1.2 10.0.2.235/24 访问 10.0.2.200/24 (二者点对点连接)上的PV

当10.0.2.235/24(CA客户端)的EPICS_CA_ADDR_LIST=127.255.255.255、EPICS_CA_AUTO_ADDR_LIST=YES 时,CA请求的目的IP自动初始化为10.0.2.255(当前CA客户端所在子网的广播地址)。

执行caget dxw:ai3命令,与10.0.2.200/24之间的数据帧通信过程如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

CA客户端先UDP广播询问该PV在哪,该PV所在主机UDP单播回答自己的IP地址。随后,CA客户端主动发起TCP连接,caget到PV值后,CA客户端主动关闭了该TCP连接。

当10.0.2.235/24(CA客户端)的EPICS_CA_ADDR_LIST=10.0.2.200、EPICS_CA_AUTO_ADDR_LIST=NO 时,CA请求的目的IP仅限于10.0.2.200(单播地址)。

执行caget dxw:ai3命令,与10.0.2.200/24之间的数据帧通信过程最开始是UDP单播询问该PV在哪,之后的过程与上述过程相同:
在这里插入图片描述

5.2 不同子网下的CA请求

5.2.1 206.235/24 访问 213.141/24 上的PV
EPICS_CA_ADDR_LIST127.255.255.255192.168.213.255192.168.255.255192.255.255.255192.168.213.141
EPICS_CA_AUTO_ADDR_LIST=NO××××
EPICS_CA_AUTO_ADDR_LIST=YES××××

192.168.206.0和192.168.213.0是两个子网,需要网关转发:

$ traceroute 192.168.213.141
traceroute to 192.168.213.141 (192.168.213.141), 30 hops max, 60 byte packets1  gateway (192.168.206.1)  8.164 ms  8.524 ms  8.790 ms2  192.168.254.1 (192.168.254.1)  0.676 ms  0.643 ms  0.607 ms3  192.168.254.87 (192.168.254.87)  3.123 ms  3.460 ms  3.771 ms4  192.168.213.141 (192.168.213.141)  0.414 ms  0.388 ms  0.352 ms

IHEP校园网网关限制了跨网段转发广播类型包,在路由的最末端禁止了广播包:

$ traceroute 192.168.213.255
traceroute to 192.168.213.255 (192.168.213.255), 30 hops max, 60 byte packets1  gateway (192.168.206.1)  2.696 ms  3.024 ms  3.298 ms2  192.168.254.1 (192.168.254.1)  0.691 ms  0.655 ms  0.858 ms3  192.168.254.87 (192.168.254.87)  8.230 ms  8.707 ms  8.930 ms4  * * *5  * * *6  * * *

所以路由器也不会把192.168.213.255转发出去。

5.2.2 206.235/24 访问 19.31/24 上的PV

由于两个机器之间也跨网段,需要在中间的网关上进行设置(这里请计算中心的老师进行配合设置)。在206.235/24上进行设置,并caget:

$ EPICS_CA_ADDR_LIST=192.168.19.255
$ EPICS_CA_AUTO_ADDR_LIST=no$ caget aaa

在206.235/24上抓包结果为:

$  sudo tcpdump -nn -i eno1|grep 192.168.19.255.5064
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eno1, link-type EN10MB (Ethernet), capture size 262144 bytes
11:16:04.306329 IP 192.168.206.235.53922 > 192.168.19.255.5064: UDP, length 40
11:16:04.338373 IP 192.168.206.235.53922 > 192.168.19.255.5064: UDP, length 40
11:16:04.402205 IP 192.168.206.235.53922 > 192.168.19.255.5064: UDP, length 40
11:16:04.530383 IP 192.168.206.235.53922 > 192.168.19.255.5064: UDP, length 40
11:16:04.786288 IP 192.168.206.235.53922 > 192.168.19.255.5064: UDP, length 40

在19.31/24上抓包结果为:

$ sudo tcpdump -nn -i eno1|grep 255.5064
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eno1, link-type EN10MB (Ethernet), capture size 262144 bytes
11:16:04.306329 IP 192.168.206.235.53922 > 255.255.255.255.5064: UDP, length 40
11:16:04.338373 IP 192.168.206.235.53922 > 255.255.255.255.5064: UDP, length 40
11:16:04.402205 IP 192.168.206.235.53922 > 255.255.255.255.5064: UDP, length 40
11:16:04.530383 IP 192.168.206.235.53922 > 255.255.255.255.5064: UDP, length 40
11:16:04.786288 IP 192.168.206.235.53922 > 255.255.255.255.5064: UDP, length 40

由于19.31/24上实际并未运行IOC,所以不具备名为aaa的PV,因此206.235/24发了5个为了查找PV的UDP广播包。若19.31/24上具备名为aaa的PV,则caget是可以成功的。

从以上实验结果可以看出,跨网段发UDP广播包查找PV是可行的
206.235/24发送广播包出来时,目的IP是直接广播192.168.19.255;到了接收端,目的IP被转变成了有限广播255.255.255.255。对此的解释:“交换机作转发的时候,在vlan内部改的这个目标地址,属于正常操作。vlan内部没必要有网段标记了,因此是全网广播。同时,交换机不会把这个全255广播转发给其他非19.xxx的子网。”

5.2.3 10.0.2.235/16 访问 10.0.2.200/24 上的PV(10.0.2.235/16 与 10.0.2.200/24 点对点连接,实际上网络根本ping不通)
EPICS_CA_ADDR_LIST127.255.255.25510.0.2.25510.0.255.25510.255.255.25510.0.2.200
EPICS_CA_AUTO_ADDR_LIST=NO×××××
EPICS_CA_AUTO_ADDR_LIST=YES×××××

对以上各个情况的解释:

(1)EPICS_CA_ADDR_LIST=127.255.255.255、EPICS_CA_AUTO_ADDR_LIST=YES 时,目的IP=10.0.255.255,目的MAC= ff-ff-ff- ff-ff-ff,10.0.2.200/24收到了数据帧,但是不响应该CA请求。

(2)此时10.0.2.255对于10.0.2.235/16 来说只是一个普通IP,并不是广播地址。发出CA请求之前会先发送ARP请求获得10.0.2.255的MAC地址,然而得不到响应。因此,EPICS_CA_ADDR_LIST=10.0.2.255时,不知道将CA请求的数据帧发给谁。

(3)此时10.255.255.255对于10.0.2.235/16 来说,已经不属于当前子网范围,所以CA请求的UDP广播帧根本就不会发出去。

(4)EPICS_CA_ADDR_LIST=10.0.2.200时,发出单播数据帧到10.0.2.200/24,可以收到响应。

5.3 同时请求多个主机上的多个IOC的PV

在连接PV时,发出的UDP查询报文中,同一报文内可能会夹杂来自多个主机的多个IOC的PV请求,而单个IOC可能会出现无权限对这种报文进行响应的情况,于是这种UDP查询作废或查询结果不完全,CA客户端继续发出UDP查询报文;当报文中对某一主机仅包含同一IOC的PV请求时,才会被该IOC响应。这一过程可能造成PV连接过程较久。

例:CA客户端(192.168.188.131)向 CA服务端(192.168.206.235)发送 CA 请求:

EPICS_CA_ADDR_LIST="192.168.206.235"
camonitor 234_ioc1:circle:x 235_ioc2:circle:x 235_ioc4:circle:x

其中,234_ioc1:circle:x 是 192.168.206.234 上的PV,235_ioc2:circle:x、235_ioc4:circle:x 是 192.168.206.235 上的PV。

在这里插入图片描述

235_ioc4 输出信息:

epics> CAS: UDP send to 192.168.188.131:58159 failed: Operation not permitted

在这里插入图片描述

在这里插入图片描述

6. 最终结论

EPICS CA请求是否可达,取决于两个因素:

  1. 目的IP列表的正确设置
  2. 网络连接上是否可达1(客户端可以发出请求并收到服务端返回的数据包、服务端可以收到请求)

当发出CA请求的客户端与IOC主机之间跨网段,会经过网关/路由器2,需要考虑目的IP列表中的IP是否可达的问题。

两种方案:
 网关/路由器禁止广播
EPICS_CA_ADDR_LIST=IP1 IP2 … Ipn(所有IOC主机的IP)
单机运行多IOC时,需要在IOC主机上用iptables对UDP的5064端口设置单播转广播。
Several soft IOCs on one host
How to Make Channel Access Reach Multiple Soft IOCs on a Linux Host

 网关/路由器不禁止广播
EPICS_CA_ADDR_LIST=subnet1_bcast subnet2_bcast …(所有IOC主机所在子网的广播地址)

7. 待解决问题

测试过程中发现,Windows操作系统无法接收UDP广播,原因待查;Linux接收正常,其他操作系统待测试。

附录

1. 查看本机ARP缓存表的命令

arp -aip neigh
删除某条ARP缓存:arp -d <IP>

2. 查看本机路由表

netstat -rnip routeroute -n
仅限于IP,不含MAC

3. 查看本机到某IP的路由

traceroute <IP>

4. 对本机某网卡抓包

IP层(IP数据报):tcpdump -nn -i <interface>
MAC层(数据帧):tshark、wireshark

Linux网络抓包分析工具(tcpdump、wireshark)
Wireshark基础使用和表达式语法

5. 防火墙和iptables

防火墙技术原理
Linux查看防火墙状态及开启关闭命令
Linux firewall防火墙详解(一)——firewall基础知识简介
Linux firewall防火墙详解(二)——firewall配置
firewall-cmd 使用总结

iptables系列教程(一)| iptables入门篇
iptables系列教程(二)| iptables语法规则


  1. 每一次IP请求发出时,IP报文中的目的IP就是当前请求的IP地址。而进一步封装成数据帧时,首先查询本机ARP缓存表中有无该IP的MAC映射,没有则ARP广播获得该映射,然后将目的MAC置为该IP所对应的MAC地址;若该IP的主机并不在当前局域网内,ARP广播无法获得该IP到MAC的映射,只能将目的MAC置为网关的MAC地址,交给路由器去查找该IP的路由。能查到该路由则数据链路层连接成功,否则连接失败。
    数据链路层连接成功后,还要考察网络层的源IP是否在目的IP的相同子网下,这可能会影响目的IP所在主机是否会返回响应。
    在这里插入图片描述
    192.168.206.146 ping 192.168.213.141 成功;
    在这里插入图片描述
    192.168.206.146 ping 192.168.255.255 失败。 ↩︎

  2. 网关与路由器区别
    交换机转发广播属于常规功能。
    路由器一般不转发广播包(https://blog.csdn.net/zxh2075/article/details/53817754),
    但也可以设置能够转发广播包。 ↩︎

这篇关于EPICS CA请求能否成功的影响因素的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/220608

相关文章

SWAP作物生长模型安装教程、数据制备、敏感性分析、气候变化影响、R模型敏感性分析与贝叶斯优化、Fortran源代码分析、气候数据降尺度与变化影响分析

查看原文>>>全流程SWAP农业模型数据制备、敏感性分析及气候变化影响实践技术应用 SWAP模型是由荷兰瓦赫宁根大学开发的先进农作物模型,它综合考虑了土壤-水分-大气以及植被间的相互作用;是一种描述作物生长过程的一种机理性作物生长模型。它不但运用Richard方程,使其能够精确的模拟土壤中水分的运动,而且耦合了WOFOST作物模型使作物的生长描述更为科学。 本文让更多的科研人员和农业工作者

Java http请求示例

使用HttpURLConnection public static String httpGet(String host) {HttpURLConnection connection = null;try {URL url = new URL(host);connection = (HttpURLConnection) url.openConnection();connection.setReq

10 Source-Get-Post-JsonP 网络请求

划重点 使用vue-resource.js库 进行网络请求操作POST : this.$http.post ( … )GET : this.$http.get ( … ) 小鸡炖蘑菇 <!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-w

Qt中window frame的影响

window frame 在创建图形化界面的时候,会创建窗口主体,上面会多出一条,周围多次一圈细边,这就叫window frame窗口框架,这是操作系统自带的。 这个对geometry的一些属性有一定影响,主要体现在Qt坐标系体系: 窗口当中包含一个按钮,这个按钮的坐标系是以父元素为参考,那么这个参考是widget本体作为参考,还是window frame作为参考,这两种参考体系都存在

一个图形引擎的画面风格是由那些因素(技术)决定的?

可能很多人第一直覺會認為shader決定了視覺風格,但我認為可以從多個方面去考慮。 1. 幾何模型 一個畫面由多個成分組成,最基本的應該是其結構,在圖形學中通常稱為幾何模型。 一些引擎,如Quake/UE,有比較強的Brush建模功能(或應稱作CSG),製作建築比較方便。而CE則有較強的大型地表、植被、水體等功能,做室外自然環境十分出色。而另一些遊戲類型專用的引擎,例

项目一(一) HttpClient中的POST请求和GET请求

HttpClient中的POST请求和GET请求 一、HttpClient简述 HttpClient是Apache Jakarta Common下的子项目,用来提供高效的、最新的、功能丰富的支持HTTP协议的客户端编程工具包,并且它支持HTTP协议最新的版本和建议。HttpClient已经应用在很多的项目中,比如Apache Jakarta上很著名的另外两个开源项目Cactus和HTMLU

Spring Boot 注解探秘:HTTP 请求的魅力之旅

在SpringBoot应用开发中,处理Http请求是一项基础且重要的任务。Spring Boot通过提供一系列丰富的注解极大地简化了这一过程,使得定义请求处理器和路由变得更加直观与便捷。这些注解不仅帮助开发者清晰地定义不同类型的HTTP请求如何被处理,同时也提升了代码的可读性和维护性。 一、@RequestMapping @RequestMapping用于将特定的HTTP请求映射到特定的方法上

我成功在本地打开了Cesium啦!

1首先下载Node.js,我是跟着这篇下载的,https://zhuanlan.zhihu.com/p/77594251,不过这后面的我没弄对Cesium环境配置也没影响。 另外:我看其他推文说,在终端写node -v和npm-v查node和npm的版本可以检测node和npm是否下载成功。 2然后我在CesiumB站官号看的教学视频,跟着下载Cesium源代码。 Cesium基础入门1-零

在struts.xml中,如何配置请求转发和请求重定向!

<span style="font-size:18px;"><span style="white-space:pre"> </span><!--<strong>下面用请求转发action </strong>,<strong>这样过去id不会丢</strong>,如果用重定向的话,id会丢 --><result name="updatePopedom"<span style="color:#ff00

通过Ajax请求后台数据,返回JSONArray(JsonObject),页面(Jquery)以table的形式展示

点击“会商人员情况表”,弹出层,显示一个表格,如下图: 利用Ajax和Jquery和JSONArray和JsonObject来实现: 代码如下: 在hspersons.html中: <!DOCTYPE html><html><head><meta charset="UTF-8"><title>会商人员情况表</title><script type="text/javasc