Chinaunix首页 | 论坛 | 博客
  • 博客访问: 496750
  • 博文数量: 174
  • 博客积分: 2502
  • 博客等级: 少校
  • 技术积分: 1923
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-28 09:47
文章分类

全部博文(174)

文章存档

2011年(8)

2010年(16)

2009年(68)

2008年(82)

我的朋友

分类: 嵌入式

2011-06-11 02:24:05

1. 协议简述
SCTP(STREAM CONTROL TRANSMISSION PROTOCOL 流控制传输协议)是IETF新定义的一个传输层transport layer协议(2000年)。是提供基于不可靠传输业务的协议之上的可靠的数据报传输协议。SCTP的设计用于通过IP网传输SCN窄带信令消息。

SCTP多用于电信行业,用于可靠传输,如用于在无连接的网络上传送PSTN信令消息及IP网上提供可靠的数据传送(SS7)。其介绍可以参考豆丁网上一篇文档《中华人民共和国通信行业标准-流控制传送协议(SCTP)》。

2. 由来
之所以将此记录下来,一是因为不懂,二是因为这三天多因为SCTP断链调试驱动引发的郁闷。
项目中RNC侧程序和基站要进行SCTP通信,以前一直好好的,最近出现SCTP正常建链后正常通信几分钟后RNC侧收不到了基站发来的心跳请求,而实际上基站已经发出了心跳请求。然后同事就非常确定的说是驱动的问题,那就定位是谁的问题吧... (在交换芯片56514上使用BCM提供的SDK查看包的信息,使用 mirror 命令定位;在powerpc-linux 上使用 tcpdump 抓包)

每次测试到现象出现要花一段时间,想到写一个SCTP的简单程序进行测试,可是又不懂啊。在Linux上却发现了一个测试SCTP的程序sctp_test,可以自建 server/client 端进行通信测试。

3. lksctp-tools
经过查询,发现 sctp_test 来自一个开源的 sctp 工具库 lksctp-tools, 项目在 SF 上创建,此库提供了方便 SCTP 开发的套接口函数。

3.1 下载
可以在 下面download
3.2 交叉编译
目前使用了ARM交叉编译器进行了测试,如下:
$ tar -xzvf lksctp-tools-1.0.11.tar.gz
$ cd lksctp-tools-1.0.11
$ prefix=temp_dir
$ ./configure  --prefix=$prefix --build=i386 --host=arm  CC=arm-none-linux-gnueabi-gcc
$ make
编译出来的文件有 sctp_test, sctp_darn, libsctp.a 等.

3.3 SCTP 测试
服务器端:(本机测试)
sctp_test -H 192.168.1.101 -P 80000 -l

客户端:(本机测试)
sctp_test -H 192.168.1.101 -P 80001 -h 192.168.1.101 -p 80000 -s -x 100000

4. SCTP 编程
在主机上安装 libsctp-dev 库,在编译时引用库 -lsctp
头文件包含 netinet/sctp.h
socket(AF_INET, SOCK_SEQPACKET, IPPROTO_SCTP)
收发数据可使用SCTP专用函数: sctp_sendto(),sctp_sendmsg, sctp_recvmsg()

参考 http://blogold.chinaunix.net/u1/43765/showart_482530.html

5. 内核支持
这是一个新生的协议,2000年才出现,在 2.6 以后的内核中逐步完善了对 SCTP 的支持,以后潜力巨大。内核通过 CONFIG_IP_SCTP 等选项选择对其进行支持。

参考文档:
1. 《使用 SCTP 优化网络》  http://www.ibm.com/developerworks/cn/linux/l-sctp/
2. 《流控制传送协议(SCTP)》(中华人民共和国通信行业标准) 
3. 《SCTP實作環境之建立教學》  http://mobility.blog.ithome.com.tw/post/438/2280


附:
BroadCom公司的芯片功能强大,其提供的驱动 SDK 功能更强大,实现了各种命令进行数据检测及对芯片的配置。 mirror 命令实现了将一个或多个端口的输入或输出复制,镜像到另一个端口发出去。如下在 ppc-linux 的 SDK 中实现将 ge3 的输入和输出数据全部镜像到 ge2 端口中发出去.
BCM.0> mirror enable mode=L2 port=ge2 ingressbitmap=ge3 egressbitmap=ge3


阅读(2596) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~