java自研udp负载均衡服务实现gb28181的sip信令代理

本文介绍了基于Java实现的UDP负载均衡服务,用于GB28181的SIP信令代理。详细讨论了GB28181信令交互流程、UDP协议理论,特别是如何通过自定义SipProxy服务实现负载均衡,包括创建服务、初始化负载均衡代理的sip服务器、数据包转发策略等。同时,文中也提到了SipProxy在处理大量设备和保持客户端连接方面的考虑和挑战。
摘要由CSDN通过智能技术生成

参考

Java实现UDP功能
UDP内网穿透讲解及代码实现

一、国标gb28181信令交互流程

通过happytime客户端模拟器实现效果

1、注册

  • 客户端发送REGISTER信令到服务器
  • 服务器需要开启认证,则会返回401 Unauthorized,并在WWW-Authenticate中携带认证相关信息,如果服务器没有开启认证,则直接回复SIP/2.0 200 OK
  • 客户端收到401 Unauthorized之后,则组装REGISTER并携带计算好的认证信息Authorization
  • 服务端收到REGISTER消息,则返回SIP/2.0 200 OK说明认证注册成功,

注册密码验证原理参考:GB28181 设备注册密码验证算法

交互日志如下:

[2023-05-23 11:02:52] : [INFO] init_local_net, sony

[2023-05-23 11:02:52] : [INFO] init_local_net, hsip.local_ipstr = 192.168.0.102

[2023-05-23 11:02:52] : [INFO] net_buf_init, num = 32

[2023-05-23 11:02:52] : [INFO] hdrv_buf_init, num = 256

[2023-05-23 11:02:52] : [INFO] sip_start, create net rx thread sucessful

[2023-05-23 11:02:52] : [INFO] sip_start, create sip main thread sucessful

[2023-05-23 11:02:52] : [INFO] sip:34020000001110000099@4401007844

[2023-05-23 11:02:52] : [INFO] sip_user_socket_init, sip local port 5066

[2023-05-23 11:02:52] : [INFO] cm_start_reg, sip_user_socket_init finish

[2023-05-23 11:02:52] : [INFO] cm_start_reg, sip_build_register_normal_msg finish

[2023-05-23 11:02:52] : [DEBUG] sip_send_msg, client-->server : 

REGISTER sip:44010078442009000089@4401007844 SIP/2.0

Via: SIP/2.0/UDP 192.168.0.102:5066;rport;branch=z9hG4bK504c6

From: <sip:34020000001110000099@4401007844>;tag=00001560

To: <sip:34020000001110000099@4401007844>

Contact: <sip:34020000001110000099@192.168.0.102:5066>

Call-ID: 00002B2300007CBE@192.168.0.102

CSeq: 1 REGISTER

Max-Forwards: 70

Expires: 3600

User-Agent: Happytime GB28181 Device V6.2

Content-Length: 0





[2023-05-23 11:02:52] : [INFO] cm_start_reg, user_tx_free_msg finish

[2023-05-23 11:02:54] : [DEBUG] sip_msg_rx, server-->client : 

SIP/2.0 401 Unauthorized

Via: SIP/2.0/UDP 192.168.0.102:5066;rport=15692;received=192.168.0.44;branch=z9hG4bK504c6

From: <sip:34020000001110000099@4401007844>;tag=00001560

To: <sip:34020000001110000099@4401007844>;tag=833794167

Call-ID: 00002B2300007CBE@192.168.0.102

CSeq: 1 REGISTER

Contact: <sip:44010078442009000089@182.xx.xx.73:15692>

User-Agent: EasyGBS v200511

Content-Length: 0

WWW-Authenticate: Digest realm="4401007844",nonce="301745769f4fc5498732b9b40d8febc5"



[2023-05-23 11:02:54] : [DEBUG] sip_send_msg, client-->server : 

REGISTER sip:44010078442009000089@4401007844 SIP/2.0

Via: SIP/2.0/UDP 192.168.0.102:5066;rport;branch=z9hG4bK504c9

From: <sip:34020000001110000099@4401007844>;tag=00001560

To: <sip:34020000001110000099@4401007844>

Contact: <sip:34020000001110000099@192.168.0.102:5066>

Call-ID: 00002B2300007CBE@192.168.0.102

CSeq: 2 REGISTER

Max-Forwards: 70

Expires: 3600

User-Agent: Happytime GB28181 Device V6.2

Authorization: Digest username="34020000001110000099",realm="4401007844",nonce="301745769f4fc5498732b9b40d8febc5",response="af4a6f526d4b6fd1781ee32f98b118dd",uri="sip:44010078442009000089@4401007844"

Content-Length: 0





[2023-05-23 11:02:54] : [DEBUG] sip_msg_rx, server-->client : 

SIP/2.0 200 OK

Via: SIP/2.0/UDP 192.168.0.102:5066;rport=15692;received=192.168.0.44;branch=z9hG4bK504c9

From: <sip:34020000001110000099@4401007844>;tag=00001560

To: <sip:34020000001110000099@4401007844>;tag=717794764

Call-ID: 00002B2300007CBE@192.168.0.102

CSeq: 2 REGISTER

Contact: <sip:44010078442009000089@182.xx.xx.73:15692>

Expires: 3600

User-Agent: Easy SIP Server

Content-Length: 0



[2023-05-23 11:02:54] : [INFO] reg pass!

2、心跳

  • 客户端发起MESSAGE信令,并且Content-Type: Application/MANSCDP+xml,发起keeplive心跳请求
  • 服务端收到之后回复 SIP/2.0 200 OK

交互日志如下:

[2023-05-23 11:03:25] : [DEBUG] sip_send_msg, client-->server : 

MESSAGE sip:44010078442009000089@4401007844 SIP/2.0

Via: SIP/2.0/UDP 192.168.0.102:5066

From: <sip:34020000001110000099@4401007844>;tag=00004823

To: <sip:44010078442009000089@4401007844>

Call-ID: 00006784000018BE@192.168.0.102

CSeq: 2 MESSAGE

Max-Forwards: 70

User-Agent: Happytime GB28181 Device V6.2

Content-Type: Application/MANSCDP+xml

Content-Length: 170



<?xml version="1.0" encoding="GB2312"?>

<Notify>

<CmdType>Keepalive</CmdType>

<SN>1</SN>

<DeviceID>34020000001110000099</DeviceID>

<Status>OK</Status>

</Notify>





[2023-05-23 11:03:25] : [DEBUG] sip_msg_rx, server-->client : 

SIP/2.0 200 OK

Via: SIP/2.0/UDP 192.168.0.102:5066

From: <sip:34020000001110000099@4401007844>;tag=00004823

To: <sip:44010078442009000089@4401007844>;tag=407825634

Call-ID: 00006784000018BE@192.168.0.102

CSeq: 2 MESSAGE

User-Agent: Easy SIP Server

Content-Length: 0

3、查询设备目录 queryCatalog

  • 服务端主动下发MESSAGE信令并且Content-Type: Application/MANSCDP+xml,发起Catalog查询请求
  • 客户端收到之后先回复 SIP/2.0 200 OK
  • 客户端接着发送MESSAGE信令并且Content-Type: Application/MANSCDP+xml,发起Response响应,罗列设备和通道信息
  • 服务端收到之后回复 SIP/2.0 200 OK

交互日志如下:

[2023-05-23 11:02:57] : [DEBUG] sip_msg_rx, server-->client : 

MESSAGE sip:34020000001110000099@192.168.0.44:15692;transport=udp SIP/2.0

Via: SIP/2.0/UDP 182.xx.xx.73:15692;rport=15692;branch=z9hG4bK269797766

From: <sip:44010078442009000089@4401007844>;tag=430797766

To: <sip:34020000001110000099@4401007844>

Call-ID: 275797766

CSeq: 89325 MESSAGE

Max-Forwards: 70

User-Agent: Easy SIP Server

Content-Type: Application/MANSCDP+xml

Content-Length: 156



<?xml version="1.0" encoding="UTF-8"?>
<Query>
    <CmdType>Catalog</CmdType>
    <SN>683797766</SN>
    <DeviceID>34020000001110000099</DeviceID>
</Query>






[2023-05-23 11:02:57] : [WARN] sip_msg_parse, strlen[160] != ctx len[156]!!!

[2023-05-23 11:02:57] : [INFO] sip_request_rx, from user [44010078442009000089]@[4401007844]

[2023-05-23 11:02:57] : [DEBUG] sip_send_msg, client-->server : 

SIP/2.0 200 OK

Via: SIP/2.0/UDP 182.xx.xx.73:15692;rport=15692;branch=z9hG4bK269797766

From: <sip:44010078442009000089@4401007844>;tag=430797766

To: <sip:34020000001110000099@4401007844>;tag=000018be

Call-ID: 275797766

CSeq: 89325 MESSAGE

User-Agent: Happytime GB28181 Device V6.2

Content-Length: 0





[2023-05-23 11:02:5
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值