250 likes | 421 Views
動的インタフェース調整機構について. 2003 年度春 タームプロジェクト. move! B3 skk@ht.sfc.keio.ac.jp. 25 Jul 2003. 23 Jul 2003. 18 Jul 2003. 11 Jul 2003. 本日のメニュー. 動機 想定環境 関連研究 システムについて 実装 今後. 動機. 無線環境の普及 同時に複数の異種無線を利用可能な環境 同時に複数のインタフェースからデータを流したいという要求 移動しても通信は切れないように. 想定環境. ネットワーク2 (802.11 とか ). ネットワーク1
E N D
動的インタフェース調整機構について 2003 年度春 タームプロジェクト move! B3 skk@ht.sfc.keio.ac.jp 25 Jul 2003 23 Jul 2003 18 Jul 2003 11 Jul 2003
本日のメニュー • 動機 • 想定環境 • 関連研究 • システムについて • 実装 • 今後
動機 • 無線環境の普及 • 同時に複数の異種無線を利用可能な環境 • 同時に複数のインタフェースからデータを流したいという要求 • 移動しても通信は切れないように
想定環境 ネットワーク2 (802.11 とか) ネットワーク1 (AirH”とか) a b c
関連研究 • SCTP • 相手先ホストまでの経路の多重化 • 相手先ホストでデータの統合は行わない • pTCP • ネットワークインタフェースの動的変更に対応していない • TCP のみ • MIBSocket • データ送信の多重化は行わない
要件 • ネットワークインタフェースの動的な個数の変更 • 相手先ホストでのデータ統合 • 無線に適したパラメータの制御
システム概要 process アプリケーション層 socket layer ソケット層 protocol layer protocol layer トランスポート層 interface layer interface layer wi0 cuaa0(ppp)
トランスポート層 (TCP/UDP) とソケット層の間での理由 • 再送制御 • フロー制御 • 既存アプリケーションへの影響を最小限に
アプリケーション層における実装との比較 • スピード • ネットワーク層の方が速い • プログラミング • アプリケーションの複雑化 • ミドルウェアならいいかも • 遅い • ユーザプログラマへの影響 • ネットワークそうならばない。 • ミドルウェアだと、それを使うアプリケーションだけ。 • スケールしない(by pTCP の論文) • ネットワーク層の問題への対応 • 再送が起きている時など、アプリケーション層では知りえない状況のとき、対応できない。
ネットワーク層 (IP) における実装との比較 • 再送/輻輳制御を行うことは出来ない • パケットの統合を行うのが難しい。(sequential number がないから)
実装1 - 実験環境 - • FreeBSD 5.1R • Thinkpad T30 • 802.11b x 2
実装2 - 目標 - • 一つの送信データを2つのインタフェースから UDP パケットで投げる データ 1 3 1 2 3 4 2 4 送信元ホスト 受信ホスト
実装3 - 関数の構造 - send() socket() so_type SOCK_DGRAM sosend() mbuf を free() するときに panic !! skk_usrreq socket layer protosw{} protocol layer skk_send() udp_send() udp_send() NIC1 NIC2
実装4 - 追加した関数 • socreate() (kern/uipc socket.c) • struct protosw inetsw[] (netinet/in proto.c) • netinet/skk usrreq.c • netinet/skk var.h
実装5 - コード紹介 - socreate() 内 if (type == SOCK_DGRAM && dom == PF_INET){ prp = pffindproto(dom, IPPROTO_SKK, SOCK_SKK); if (proto) global_prp = pffindproto(dom, proto, type); else global_prp = pffindtype(dom, type); } else if (proto) prp = pffindproto(dom, proto, type); else prp = pffindtype(dom, type);
実装5 - コード紹介2 - in_proto.c 内 struct protosw inetsw[] { SOCK_SKK, &inetdomain, IPPROTO_SKK, PR_ATOMIC|PR_ADDR, skk_input, 0, skk_ctlinput, ip_ctloutput, 0, skk_init, 0, 0, 0, &skk_usrreqs },
実装5 - コード紹介3 - skk_send() 内 static int skk_send(struct socket *so, int flags, struct mbuf *m, struct sockaddr *addr, struct mbuf *control, struct thread *td) { static int ret, ret2 ; struct ifnet *ima_ifp; struct inpcb *inp; ret = (*global_prp->pr_usrreqs->pru_send)(so, flags, m, addr, control, td); ima_ifp = find_next_ifnet(so); if(ima_ifp != NULL){ inp = sotoinpcb(so); inp->inp_route.ro_rt->rt_ifp = ima_ifp ; ret2 = (*global_prp->pr_usrreqs->pru_send)(so, flags, m, addr, control, td); } return ret2; }
評価 • 10MB のファイルを他のホストへ送信 • 使用インタフェース1つの場合 • 50 s • 使用インタフェース2つの場合 • 25 s
今後行う予定のこと • (今回の実装目標を終了させる) • ネットワークインタフェースが増減したとき、動的に送信インタフェースを増減 • UDP/TCP 両方ともに扱えるように • フロー制御