「SCTPによるネットワーキングの向上」を試してみた

近頃、SCTPを使ったプロジェクトによくたずさわっているので SCTPによるネットワーキングの向上 の例を自分の環境でも 試してみることにしました。

準備

使用したLinuxのディストリビューションはUbuntuで、カーネルは2.6.28-15です。 SCTPを使用するにはsctpのパッケージをインストールする必要があります。 (sctp_sendmsg/sctp_recvmsg関数やSOL_SCTP等の関連デファイン値を使用)

$ apt-get install libsctp-dev libsctp1 lksctp-tools

で、あとはコンパイル。sctpのライブラリを引き込むのを忘れないように。

$ gcc sctpsrvr.c -lsctp -Wall -O2 -o server
$ gcc sctpclnt.c -lsctp -Wall -O2 -o client

実行

プログラム実行とtsharkでのパケットダンプ確認まで。 なにげにtsharkのオプションがtcpdumpと異なっていて さくっとコマンドが実行できないのが...

$ ./server &
$ ./client
(Local) Sat Aug 22 12:08:36 2009
(GMT  ) Sat Aug 22 03:08:36 2009
$

$ sudo tshark -i lo -R sctp.port==9999
Running as user "root" and group "root". This could be dangerous.
Capturing on lo
  0.000000    127.0.0.1 -> 127.0.0.1    SCTP INIT
  0.000117    127.0.0.1 -> 127.0.0.1    SCTP INIT_ACK
  0.000158    127.0.0.1 -> 127.0.0.1    SCTP COOKIE_ECHO
  0.000248    127.0.0.1 -> 127.0.0.1    SCTP COOKIE_ACK
  0.000444    127.0.0.1 -> 127.0.0.1    SCTP DATA
  0.000487    127.0.0.1 -> 127.0.0.1    SCTP SACK
  0.000529    127.0.0.1 -> 127.0.0.1    SCTP DATA
  0.197933    127.0.0.1 -> 127.0.0.1    SCTP SACK
  0.197958    127.0.0.1 -> 127.0.0.1    SCTP SHUTDOWN
  0.197980    127.0.0.1 -> 127.0.0.1    SCTP SHUTDOWN_ACK
  0.198014    127.0.0.1 -> 127.0.0.1    SCTP SHUTDOWN_COMPLETE

INIT/INIT_ACT/COOKIE_ECHO/COOKIE_ACKで接続し、アプリケーションデータを 送受信後、SHUTDOWN/SHUTDOWN_ACK/SHUTDOWN_COMPLETEの切断までの動作が 確認できます。