SlideShare une entreprise Scribd logo
1  sur  17
Télécharger pour lire hors ligne
TCP connectionの保存と復元

   筑波大学ソフトウェア研究室
    三戸健一 (@mittyorz)

                 2012年9月22日
             Kernel/VM探検隊@つくば
自己紹介
   筑波大学情報科学類4年生
   ソフトウェア研究室
   好きな言語はPerl
       最近全然触れていない
   @go_vmさんのVMRPCを使って面白いこ
    としよう
   普段は環境構築とかメンテナンスとかばか
    りでhacker的なことはあまりしていません
                         2
TCPソケットの状態を保存しよう
   理想:
       TCPコネクションを維持したままプロセスの停止、
        状態の保存、別の環境で再開、が簡単にできると
        うれしい
   現実:
       送受信キューとかシーケンス番号などの情報を読
        み取ってdumpしないといけない
       close()するとFINが送信されてしまう

    TCPスタックをちゃんと理解して自力でやるの
    は大変そう…。なんとかインチキできんのか

                               3
従来の解決法 仮想計算機を使う
   難しいことを考えないでVMに載せてしまう
       ライブマイグレーション!

   利点
       ノウハウが十二分に存在している
       コードに手を入れる必要は無い
   欠点
       仮想計算機を稼働させるのはそれなりに大変
       OSごと環境を移動させるので、コストが高い
                            4
TCP repair mode
   先生「3.5 kernelなら簡単らしいよ」
   私「」

   Linux Kernel 3.5で新しくマージされた機能
   TCP_REPAIRというソケットオプションが新設
    された
   Repairモードに入ると、副作用無しに様々な
    操作が行えるようになる
   Software Design 2012年9月号
       「続・Linux 3.5の新機能」

                                   5
Repair modeで出来ること
   connect()を用いて、実際には接続してい
    なくてもESTABLISHEDにする
   ポートの衝突を無視してbind()でLISTEN
   FIN_WAIT, TIME_WAITを経由せずに
    close()
       FINパケットは送信されない
   TCPシーケンス番号、送受信キューなどソ
    ケットの再開に必要な情報の取得

                                6
ソケットの保存
1.       iptables で新規パケットをブロック
         iptables -D INPUT -s 192.168.10.222/32 -d
          192.168.10.102/32 -p tcp -m tcp --sport 58085 --dport
          12345 -j DROP

2.       repair modeに移行
         setsockopt(sockfd, SOL_TCP, TCP_REPAIR, …);
3.       接続情報の取得/パケットキューの読取
4.       close()


                                                                  7
ソケットの復元
1.   sock = socket(…);
2.   repair modeに移行
3.   シーケンス番号の復元
4.   bind()
5.   connect()
6.   TCPオプションの復元
7.   キューの復元
8.   repair modeを終了
9.   通信のブロックを解除
                         8
実装例
   間に合いませんでした



    ……だけだと哀しいので




                  9
crtools
   an utility to checkpoint/restore a process
    tree
       http://criu.org/CR_tools
       “CRIU is sub-project of OpenVZ”
   TCPセッションだけでなく、プロセス自体を
    freeze/dump to file/restore出来る
   有名なOSS projectでcheckpoint/restore出
    来るか試している模様
       http://criu.org/What_software_is_supported

                                                     10
crtoolsのbuild
   Ver 0.2が二日前(09/20)に出てますが、
    試したのは0.1
   Ubuntu 12.10 beta x86_64

   $ git clone git://git.criu.org/crtools.git
   $ make
       色々warningとかerrorとか出るが、2,3カ所適
        当に直すとbuild出来た

                                                 11
保存、復元の対象
   echo-server-nofork-fdopen.c
       サーバ: Ubuntu 12.10 (192.168.10.102)
       クライアント: Debian 6.0 (192.168.10.222)
   単純なechoサーバ
       selectもforkもしないので、一つのconnect

   mitty@quantal:~/tcp-repair$ gcc echo-server-nofork-fdopen.c
   mitty@quantal:~/tcp-repair$ ./a.out 12345
   mitty@quantal:~$ sudo lsof -i | grep 12345


                                                                  12
connect to server
   telnetコマンドでechoサーバへ接続
   debian$ telnet 192.168.10.102 12345
   mitty@quantal:~$ sudo lsof -i | grep 12345



   ファイルディスクリプタ
       3でaccept
       4 で clientへwrite
       5 = dup(4) を用いてclientからread




                                                 13
dump tcp connection to files
   mitty@quantal:~$ sudo ./crtools/crtools dump --tcp-
    established -t 12327


   mitty@quantal:~$ ls -l *.img




   エラーは出ているが、dump出来た

   mitty@quantal:~$ sudo iptables-save | grep 12345




                                                          14
restore from files
   mitty@quantal:~$ sudo ./crtools/crtools restore --tcp-
    established -t 12327
   mitty@quantal:~$ sudo lsof -i | grep 12345




   復元された
   iptablesの設定はdeleteしてくれない
       mitty@quantal:~$ sudo iptables -D INPUT -s
        192.168.10.222/32 -d 192.168.10.102/32 -p tcp -m tcp --
        sport 58085 --dport 12345 -j DROP



                                                                  15
既知の問題
   なぜか0, 1, 2のファイルディスクリプタが
    復元されない
       クライアントが再接続すると、0や1のfdが再利
        用されて、サーバのstdoutがクライアントに接
        続されるという楽しいことになる




                               16
ご静聴ありがとうございました




                 17

Contenu connexe

Tendances

Scapyで作る・解析するパケット
Scapyで作る・解析するパケットScapyで作る・解析するパケット
Scapyで作る・解析するパケットTakaaki Hoyo
 
いまさら聞けないRake入門
いまさら聞けないRake入門いまさら聞けないRake入門
いまさら聞けないRake入門Tomoya Kawanishi
 
Scapy presentation Remake(訂正)
Scapy presentation Remake(訂正)Scapy presentation Remake(訂正)
Scapy presentation Remake(訂正)ashigirl ZareGoto
 
Intel 82599 10GbE Controllerで遊ぼう
Intel 82599 10GbE Controllerで遊ぼうIntel 82599 10GbE Controllerで遊ぼう
Intel 82599 10GbE Controllerで遊ぼうTakuya ASADA
 
Xen4.0 and vt-d Network Performance Benchmark
Xen4.0 and vt-d Network Performance BenchmarkXen4.0 and vt-d Network Performance Benchmark
Xen4.0 and vt-d Network Performance BenchmarkMitsutoshi Kiuchi
 
Linux packet-forwarding
Linux packet-forwardingLinux packet-forwarding
Linux packet-forwardingMasakazu Asama
 
Hokkaido.cap#3 ケーススタディ(基礎編)
Hokkaido.cap#3 ケーススタディ(基礎編)Hokkaido.cap#3 ケーススタディ(基礎編)
Hokkaido.cap#3 ケーススタディ(基礎編)Panda Yamaki
 
TLS 1.3 と 0-RTT のこわ〜い話
TLS 1.3 と 0-RTT のこわ〜い話TLS 1.3 と 0-RTT のこわ〜い話
TLS 1.3 と 0-RTT のこわ〜い話Kazuho Oku
 
Varnish 4.0 Release Party in Tokyo発表資料
Varnish 4.0 Release Party in Tokyo発表資料Varnish 4.0 Release Party in Tokyo発表資料
Varnish 4.0 Release Party in Tokyo発表資料Iwana Chan
 
High Performance Networking with DPDK & Multi/Many Core
High Performance Networking with DPDK & Multi/Many CoreHigh Performance Networking with DPDK & Multi/Many Core
High Performance Networking with DPDK & Multi/Many Coreslankdev
 
initとプロセス再起動
initとプロセス再起動initとプロセス再起動
initとプロセス再起動Takashi Takizawa
 
OpenFlowをXenServerで試してみよう
OpenFlowをXenServerで試してみようOpenFlowをXenServerで試してみよう
OpenFlowをXenServerで試してみようKimihiko Kitase
 
サーバー実装いろいろ
サーバー実装いろいろサーバー実装いろいろ
サーバー実装いろいろkjwtnb
 
Lagopus, raw socket build
Lagopus, raw socket buildLagopus, raw socket build
Lagopus, raw socket buildMasaru Oki
 
Xeon dとlagopusと、pktgen dpdk
Xeon dとlagopusと、pktgen dpdkXeon dとlagopusと、pktgen dpdk
Xeon dとlagopusと、pktgen dpdkMasaru Oki
 
Hokkaido.cap#7 ケーススタディ(セキュリティ解析:前編)
Hokkaido.cap#7 ケーススタディ(セキュリティ解析:前編)Hokkaido.cap#7 ケーススタディ(セキュリティ解析:前編)
Hokkaido.cap#7 ケーススタディ(セキュリティ解析:前編)Panda Yamaki
 
パケットフィルタリングの考え方
パケットフィルタリングの考え方パケットフィルタリングの考え方
パケットフィルタリングの考え方Koiwa Hidekazu
 

Tendances (20)

Scapyで作る・解析するパケット
Scapyで作る・解析するパケットScapyで作る・解析するパケット
Scapyで作る・解析するパケット
 
いまさら聞けないRake入門
いまさら聞けないRake入門いまさら聞けないRake入門
いまさら聞けないRake入門
 
Scapy presentation Remake(訂正)
Scapy presentation Remake(訂正)Scapy presentation Remake(訂正)
Scapy presentation Remake(訂正)
 
Intel 82599 10GbE Controllerで遊ぼう
Intel 82599 10GbE Controllerで遊ぼうIntel 82599 10GbE Controllerで遊ぼう
Intel 82599 10GbE Controllerで遊ぼう
 
Xen4.0 and vt-d Network Performance Benchmark
Xen4.0 and vt-d Network Performance BenchmarkXen4.0 and vt-d Network Performance Benchmark
Xen4.0 and vt-d Network Performance Benchmark
 
Lagopus 0.2.2
Lagopus 0.2.2Lagopus 0.2.2
Lagopus 0.2.2
 
Rust-DPDK
Rust-DPDKRust-DPDK
Rust-DPDK
 
Linux packet-forwarding
Linux packet-forwardingLinux packet-forwarding
Linux packet-forwarding
 
Hokkaido.cap#3 ケーススタディ(基礎編)
Hokkaido.cap#3 ケーススタディ(基礎編)Hokkaido.cap#3 ケーススタディ(基礎編)
Hokkaido.cap#3 ケーススタディ(基礎編)
 
Rust-DPDK
Rust-DPDKRust-DPDK
Rust-DPDK
 
TLS 1.3 と 0-RTT のこわ〜い話
TLS 1.3 と 0-RTT のこわ〜い話TLS 1.3 と 0-RTT のこわ〜い話
TLS 1.3 と 0-RTT のこわ〜い話
 
Varnish 4.0 Release Party in Tokyo発表資料
Varnish 4.0 Release Party in Tokyo発表資料Varnish 4.0 Release Party in Tokyo発表資料
Varnish 4.0 Release Party in Tokyo発表資料
 
High Performance Networking with DPDK & Multi/Many Core
High Performance Networking with DPDK & Multi/Many CoreHigh Performance Networking with DPDK & Multi/Many Core
High Performance Networking with DPDK & Multi/Many Core
 
initとプロセス再起動
initとプロセス再起動initとプロセス再起動
initとプロセス再起動
 
OpenFlowをXenServerで試してみよう
OpenFlowをXenServerで試してみようOpenFlowをXenServerで試してみよう
OpenFlowをXenServerで試してみよう
 
サーバー実装いろいろ
サーバー実装いろいろサーバー実装いろいろ
サーバー実装いろいろ
 
Lagopus, raw socket build
Lagopus, raw socket buildLagopus, raw socket build
Lagopus, raw socket build
 
Xeon dとlagopusと、pktgen dpdk
Xeon dとlagopusと、pktgen dpdkXeon dとlagopusと、pktgen dpdk
Xeon dとlagopusと、pktgen dpdk
 
Hokkaido.cap#7 ケーススタディ(セキュリティ解析:前編)
Hokkaido.cap#7 ケーススタディ(セキュリティ解析:前編)Hokkaido.cap#7 ケーススタディ(セキュリティ解析:前編)
Hokkaido.cap#7 ケーススタディ(セキュリティ解析:前編)
 
パケットフィルタリングの考え方
パケットフィルタリングの考え方パケットフィルタリングの考え方
パケットフィルタリングの考え方
 

En vedette

JIT Code Profiling with VTune
JIT Code Profiling with VTuneJIT Code Profiling with VTune
JIT Code Profiling with VTuneMITSUNARI Shigeo
 
研究動向から考えるx86/x64最適化手法
研究動向から考えるx86/x64最適化手法研究動向から考えるx86/x64最適化手法
研究動向から考えるx86/x64最適化手法Takeshi Yamamuro
 
『データ解析におけるプライバシー保護』勉強会 #2
『データ解析におけるプライバシー保護』勉強会 #2『データ解析におけるプライバシー保護』勉強会 #2
『データ解析におけるプライバシー保護』勉強会 #2MITSUNARI Shigeo
 
『データ解析におけるプライバシー保護』勉強会
『データ解析におけるプライバシー保護』勉強会『データ解析におけるプライバシー保護』勉強会
『データ解析におけるプライバシー保護』勉強会MITSUNARI Shigeo
 
C/C++プログラマのための開発ツール
C/C++プログラマのための開発ツールC/C++プログラマのための開発ツール
C/C++プログラマのための開発ツールMITSUNARI Shigeo
 
Cybozu Tech Conference 2016 バグの調べ方
Cybozu Tech Conference 2016 バグの調べ方Cybozu Tech Conference 2016 バグの調べ方
Cybozu Tech Conference 2016 バグの調べ方MITSUNARI Shigeo
 
汎用性と高速性を目指したペアリング暗号ライブラリ mcl
汎用性と高速性を目指したペアリング暗号ライブラリ mcl汎用性と高速性を目指したペアリング暗号ライブラリ mcl
汎用性と高速性を目指したペアリング暗号ライブラリ mclMITSUNARI Shigeo
 

En vedette (7)

JIT Code Profiling with VTune
JIT Code Profiling with VTuneJIT Code Profiling with VTune
JIT Code Profiling with VTune
 
研究動向から考えるx86/x64最適化手法
研究動向から考えるx86/x64最適化手法研究動向から考えるx86/x64最適化手法
研究動向から考えるx86/x64最適化手法
 
『データ解析におけるプライバシー保護』勉強会 #2
『データ解析におけるプライバシー保護』勉強会 #2『データ解析におけるプライバシー保護』勉強会 #2
『データ解析におけるプライバシー保護』勉強会 #2
 
『データ解析におけるプライバシー保護』勉強会
『データ解析におけるプライバシー保護』勉強会『データ解析におけるプライバシー保護』勉強会
『データ解析におけるプライバシー保護』勉強会
 
C/C++プログラマのための開発ツール
C/C++プログラマのための開発ツールC/C++プログラマのための開発ツール
C/C++プログラマのための開発ツール
 
Cybozu Tech Conference 2016 バグの調べ方
Cybozu Tech Conference 2016 バグの調べ方Cybozu Tech Conference 2016 バグの調べ方
Cybozu Tech Conference 2016 バグの調べ方
 
汎用性と高速性を目指したペアリング暗号ライブラリ mcl
汎用性と高速性を目指したペアリング暗号ライブラリ mcl汎用性と高速性を目指したペアリング暗号ライブラリ mcl
汎用性と高速性を目指したペアリング暗号ライブラリ mcl
 

Similaire à TCP connectionの保存と復元

配布用Beginnerならきっと役立つmaster slave環境
配布用Beginnerならきっと役立つmaster slave環境配布用Beginnerならきっと役立つmaster slave環境
配布用Beginnerならきっと役立つmaster slave環境yut148atgmaildotcom
 
第一回コンテナ情報交換会@関西
第一回コンテナ情報交換会@関西第一回コンテナ情報交換会@関西
第一回コンテナ情報交換会@関西Masahide Yamamoto
 
Lagopus + DockerのDPDK接続
Lagopus + DockerのDPDK接続Lagopus + DockerのDPDK接続
Lagopus + DockerのDPDK接続Tomoya Hibi
 
コンテナのネットワークインターフェース その実装手法とその応用について
コンテナのネットワークインターフェース その実装手法とその応用についてコンテナのネットワークインターフェース その実装手法とその応用について
コンテナのネットワークインターフェース その実装手法とその応用についてTomofumi Hayashi
 
Rubyで創るOpenFlowネットワーク - LLまつり
Rubyで創るOpenFlowネットワーク - LLまつりRubyで創るOpenFlowネットワーク - LLまつり
Rubyで創るOpenFlowネットワーク - LLまつりYuya Rin
 
Container Networking Deep Dive
Container Networking Deep DiveContainer Networking Deep Dive
Container Networking Deep DiveHirofumi Ichihara
 
DPDKによる高速コンテナネットワーキング
DPDKによる高速コンテナネットワーキングDPDKによる高速コンテナネットワーキング
DPDKによる高速コンテナネットワーキングTomoya Hibi
 
MINCS – containers in the shell script
MINCS – containers in the shell scriptMINCS – containers in the shell script
MINCS – containers in the shell scriptMasami Hiramatsu
 
FD.io VPP事始め
FD.io VPP事始めFD.io VPP事始め
FD.io VPP事始めtetsusat
 
PF部第19回資料 poor man's JTAG
PF部第19回資料 poor man's JTAGPF部第19回資料 poor man's JTAG
PF部第19回資料 poor man's JTAGdaye001
 
Cloud stack徹底入門7章 20130514
Cloud stack徹底入門7章 20130514Cloud stack徹底入門7章 20130514
Cloud stack徹底入門7章 20130514samemoon
 
Tremaで構築!中小企業の社内LAN #Tremaday 120419
Tremaで構築!中小企業の社内LAN #Tremaday 120419Tremaで構築!中小企業の社内LAN #Tremaday 120419
Tremaで構築!中小企業の社内LAN #Tremaday 120419エイシュン コンドウ
 
NGS解析を始めた時にぶつかりがちな小さい壁あれこれ
NGS解析を始めた時にぶつかりがちな小さい壁あれこれNGS解析を始めた時にぶつかりがちな小さい壁あれこれ
NGS解析を始めた時にぶつかりがちな小さい壁あれこれDNA Data Bank of Japan center
 
もしCloudStackのKVMホストでPCIパススルーできるようになったら
もしCloudStackのKVMホストでPCIパススルーできるようになったらもしCloudStackのKVMホストでPCIパススルーできるようになったら
もしCloudStackのKVMホストでPCIパススルーできるようになったらTakuma Nakajima
 
コンテナ情報交換会2
コンテナ情報交換会2コンテナ情報交換会2
コンテナ情報交換会2Masahide Yamamoto
 
VPP事始め
VPP事始めVPP事始め
VPP事始めnpsg
 
Trax Workshop: Windows版TraxソフトウェアをWineで動かして開発する
Trax Workshop: Windows版TraxソフトウェアをWineで動かして開発するTrax Workshop: Windows版TraxソフトウェアをWineで動かして開発する
Trax Workshop: Windows版TraxソフトウェアをWineで動かして開発するYasunori Osana
 
201104016 osc2011 kobe
201104016 osc2011 kobe201104016 osc2011 kobe
201104016 osc2011 kobeYamauchi isamu
 

Similaire à TCP connectionの保存と復元 (20)

配布用Beginnerならきっと役立つmaster slave環境
配布用Beginnerならきっと役立つmaster slave環境配布用Beginnerならきっと役立つmaster slave環境
配布用Beginnerならきっと役立つmaster slave環境
 
Mincs 日本語版
Mincs 日本語版Mincs 日本語版
Mincs 日本語版
 
第一回コンテナ情報交換会@関西
第一回コンテナ情報交換会@関西第一回コンテナ情報交換会@関西
第一回コンテナ情報交換会@関西
 
Lagopus + DockerのDPDK接続
Lagopus + DockerのDPDK接続Lagopus + DockerのDPDK接続
Lagopus + DockerのDPDK接続
 
コンテナのネットワークインターフェース その実装手法とその応用について
コンテナのネットワークインターフェース その実装手法とその応用についてコンテナのネットワークインターフェース その実装手法とその応用について
コンテナのネットワークインターフェース その実装手法とその応用について
 
Rubyで創るOpenFlowネットワーク - LLまつり
Rubyで創るOpenFlowネットワーク - LLまつりRubyで創るOpenFlowネットワーク - LLまつり
Rubyで創るOpenFlowネットワーク - LLまつり
 
DPDKを拡張してみた話し
DPDKを拡張してみた話しDPDKを拡張してみた話し
DPDKを拡張してみた話し
 
Container Networking Deep Dive
Container Networking Deep DiveContainer Networking Deep Dive
Container Networking Deep Dive
 
DPDKによる高速コンテナネットワーキング
DPDKによる高速コンテナネットワーキングDPDKによる高速コンテナネットワーキング
DPDKによる高速コンテナネットワーキング
 
MINCS – containers in the shell script
MINCS – containers in the shell scriptMINCS – containers in the shell script
MINCS – containers in the shell script
 
FD.io VPP事始め
FD.io VPP事始めFD.io VPP事始め
FD.io VPP事始め
 
PF部第19回資料 poor man's JTAG
PF部第19回資料 poor man's JTAGPF部第19回資料 poor man's JTAG
PF部第19回資料 poor man's JTAG
 
Cloud stack徹底入門7章 20130514
Cloud stack徹底入門7章 20130514Cloud stack徹底入門7章 20130514
Cloud stack徹底入門7章 20130514
 
Tremaで構築!中小企業の社内LAN #Tremaday 120419
Tremaで構築!中小企業の社内LAN #Tremaday 120419Tremaで構築!中小企業の社内LAN #Tremaday 120419
Tremaで構築!中小企業の社内LAN #Tremaday 120419
 
NGS解析を始めた時にぶつかりがちな小さい壁あれこれ
NGS解析を始めた時にぶつかりがちな小さい壁あれこれNGS解析を始めた時にぶつかりがちな小さい壁あれこれ
NGS解析を始めた時にぶつかりがちな小さい壁あれこれ
 
もしCloudStackのKVMホストでPCIパススルーできるようになったら
もしCloudStackのKVMホストでPCIパススルーできるようになったらもしCloudStackのKVMホストでPCIパススルーできるようになったら
もしCloudStackのKVMホストでPCIパススルーできるようになったら
 
コンテナ情報交換会2
コンテナ情報交換会2コンテナ情報交換会2
コンテナ情報交換会2
 
VPP事始め
VPP事始めVPP事始め
VPP事始め
 
Trax Workshop: Windows版TraxソフトウェアをWineで動かして開発する
Trax Workshop: Windows版TraxソフトウェアをWineで動かして開発するTrax Workshop: Windows版TraxソフトウェアをWineで動かして開発する
Trax Workshop: Windows版TraxソフトウェアをWineで動かして開発する
 
201104016 osc2011 kobe
201104016 osc2011 kobe201104016 osc2011 kobe
201104016 osc2011 kobe
 

Dernier

TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 

Dernier (9)

TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 

TCP connectionの保存と復元

  • 1. TCP connectionの保存と復元 筑波大学ソフトウェア研究室 三戸健一 (@mittyorz) 2012年9月22日 Kernel/VM探検隊@つくば
  • 2. 自己紹介  筑波大学情報科学類4年生  ソフトウェア研究室  好きな言語はPerl  最近全然触れていない  @go_vmさんのVMRPCを使って面白いこ としよう  普段は環境構築とかメンテナンスとかばか りでhacker的なことはあまりしていません 2
  • 3. TCPソケットの状態を保存しよう  理想:  TCPコネクションを維持したままプロセスの停止、 状態の保存、別の環境で再開、が簡単にできると うれしい  現実:  送受信キューとかシーケンス番号などの情報を読 み取ってdumpしないといけない  close()するとFINが送信されてしまう TCPスタックをちゃんと理解して自力でやるの は大変そう…。なんとかインチキできんのか 3
  • 4. 従来の解決法 仮想計算機を使う  難しいことを考えないでVMに載せてしまう  ライブマイグレーション!  利点  ノウハウが十二分に存在している  コードに手を入れる必要は無い  欠点  仮想計算機を稼働させるのはそれなりに大変  OSごと環境を移動させるので、コストが高い 4
  • 5. TCP repair mode  先生「3.5 kernelなら簡単らしいよ」  私「」  Linux Kernel 3.5で新しくマージされた機能  TCP_REPAIRというソケットオプションが新設 された  Repairモードに入ると、副作用無しに様々な 操作が行えるようになる  Software Design 2012年9月号  「続・Linux 3.5の新機能」 5
  • 6. Repair modeで出来ること  connect()を用いて、実際には接続してい なくてもESTABLISHEDにする  ポートの衝突を無視してbind()でLISTEN  FIN_WAIT, TIME_WAITを経由せずに close()  FINパケットは送信されない  TCPシーケンス番号、送受信キューなどソ ケットの再開に必要な情報の取得 6
  • 7. ソケットの保存 1. iptables で新規パケットをブロック  iptables -D INPUT -s 192.168.10.222/32 -d 192.168.10.102/32 -p tcp -m tcp --sport 58085 --dport 12345 -j DROP 2. repair modeに移行  setsockopt(sockfd, SOL_TCP, TCP_REPAIR, …); 3. 接続情報の取得/パケットキューの読取 4. close() 7
  • 8. ソケットの復元 1. sock = socket(…); 2. repair modeに移行 3. シーケンス番号の復元 4. bind() 5. connect() 6. TCPオプションの復元 7. キューの復元 8. repair modeを終了 9. 通信のブロックを解除 8
  • 9. 実装例  間に合いませんでした ……だけだと哀しいので 9
  • 10. crtools  an utility to checkpoint/restore a process tree  http://criu.org/CR_tools  “CRIU is sub-project of OpenVZ”  TCPセッションだけでなく、プロセス自体を freeze/dump to file/restore出来る  有名なOSS projectでcheckpoint/restore出 来るか試している模様  http://criu.org/What_software_is_supported 10
  • 11. crtoolsのbuild  Ver 0.2が二日前(09/20)に出てますが、 試したのは0.1  Ubuntu 12.10 beta x86_64  $ git clone git://git.criu.org/crtools.git  $ make  色々warningとかerrorとか出るが、2,3カ所適 当に直すとbuild出来た 11
  • 12. 保存、復元の対象  echo-server-nofork-fdopen.c  サーバ: Ubuntu 12.10 (192.168.10.102)  クライアント: Debian 6.0 (192.168.10.222)  単純なechoサーバ  selectもforkもしないので、一つのconnect  mitty@quantal:~/tcp-repair$ gcc echo-server-nofork-fdopen.c  mitty@quantal:~/tcp-repair$ ./a.out 12345  mitty@quantal:~$ sudo lsof -i | grep 12345 12
  • 13. connect to server  telnetコマンドでechoサーバへ接続  debian$ telnet 192.168.10.102 12345  mitty@quantal:~$ sudo lsof -i | grep 12345  ファイルディスクリプタ  3でaccept  4 で clientへwrite  5 = dup(4) を用いてclientからread 13
  • 14. dump tcp connection to files  mitty@quantal:~$ sudo ./crtools/crtools dump --tcp- established -t 12327  mitty@quantal:~$ ls -l *.img  エラーは出ているが、dump出来た  mitty@quantal:~$ sudo iptables-save | grep 12345 14
  • 15. restore from files  mitty@quantal:~$ sudo ./crtools/crtools restore --tcp- established -t 12327  mitty@quantal:~$ sudo lsof -i | grep 12345  復元された  iptablesの設定はdeleteしてくれない  mitty@quantal:~$ sudo iptables -D INPUT -s 192.168.10.222/32 -d 192.168.10.102/32 -p tcp -m tcp -- sport 58085 --dport 12345 -j DROP 15
  • 16. 既知の問題  なぜか0, 1, 2のファイルディスクリプタが 復元されない  クライアントが再接続すると、0や1のfdが再利 用されて、サーバのstdoutがクライアントに接 続されるという楽しいことになる 16