
企業のデータ連携基盤を支える「HULFT」を使うメリットや、安全、安心を支える技術について、インターネットインフラに造詣のある技術ライター「あきみち」氏が独自の視点でレポートする本コラム。「HULFT(ハルフト)の名前だけは知っている」といった方に向けて、基本機能やファイル転送の概要をわかりやすくご紹介します。
HULFTとは|ファイル転送の具体的な仕組みを見てみよう(前編)
HULFTとは、ファイルという形になった情報を転送し、その情報を転送する時に発生する前後の処理を統合的に扱うためのソフトウェアです。しかし、単に「ファイル転送を行うソフトウェアである」と表現してしまうと、昔からあるftpなどのファイル転送ソフトウェアと同じものであると誤解されがちです。何が違うのかは、HULFTがどのようにファイル転送を行っているのかを見るのがわかりやすいです。今回はHULFTによるファイル転送の具体的な仕組みを紹介します。
HULFT配信の流れ
まず最初に、HULFTの全体的な流れを見てみましょう。
HULFTでのファイル転送は、ファイルを送信する配信側ホストから、ファイルを受信する集信側ホストに向けてのTCP接続確立から開始します。

TCP接続確立後、配信側で必要に応じてコード変換、圧縮、暗号化などの前処理が行われます。配信側は、前処理が終わったファイルをTCP接続を通じて集信側へと送信します。
集信側は、ファイルを受け取ると暗号化されたデータの復号、圧縮されたデータの解凍、コード変換などの処理を必要に応じて行います。それらの処理が終了後、ジョブ連携が行われます。
ファイル転送終了後、TCP接続が切断され、HULFT配信が終了します。
このように、HULFTでのファイル転送は、転送が行われるごとにTCP接続が確立されます。
TCP接続と初期設定
次に、ひとつひとつの動作をもう少し詳しく見ていきましょう。
配信側ホストは、集信側ホストへとTCP SYNパケットを送信し、集信側ホストはTCP SYN+ACKパケットを返します。
集信側ホストからのTCP SYN+ACKを受け取った配信側ホストはTCP ACKを返し、TCPの3 way handshakeが完了します。
集信側ホストは、TCP接続を要求してきた配信側ホストが接続許可リストに登録された相手であるかどうかを確認します。接続許可リストに登録されていない相手からのTCP接続は、TCP接続確立直後に切断されます。

TCP接続確立後、配信側ホストはHULFT転送に必要な各種情報を集信側ホストに送信します。配信側ホストが最初に送信する情報には、転送されるファイルに関する情報の他に、暗号化に必要な情報などが含まれます。
配信側はTCP接続直後のやり取り終了後に、転送するファイルに対してロックをかけます。集信側も、受け取るファイルを書き出すためのファイルを生成したうえでロックをかけます。
これにより、配信側と集信側の双方で、他のプロセスがファイル転送中にファイルの内容を変更してしまうことによって発生する不具合などを防いでいます。ロックをかける作業は、一見地味であり忘れがちですが、ファイル転送を行うシステムを堅牢に実現するうえでは非常に重要なのです。
TCP接続によるファイル転送処理
TCPセッション確立後に、配信側から集信側へとファイルが転送されていきます。
ここでも、HULFTの工夫があります。
HULFTは、TCPを利用たセッションのうえで、ファイルを小分けにして送信しています。小分けにされたファイルデータが集信側に届くと、集信側はどこまで受信完了したのかに関する情報を、配信側に通知しています。
一般的なOSでは、アプリケーションはカーネルに対して、TCP接続で送信するデータを渡し、カーネルがTCPでデータを送信します。このとき、アプリケーションはカーネルに対してデータを渡した時点で、「TCPソケットへの書き込み完了」と認識しますが、これはネットワークを通じてTCP接続の相手にデータが届いたこととは別なのです。
ネットワークを通じてデータが届いたかどうかを知るには、通信相手が「どこまで届いたか」に関する通知を戻すようなプログラムを作成する必要がありますが、HULFTでは、そういった機能が最初から組み込まれています。
ファイル転送の進捗をゼロから作ると大変ですが、HULFTを利用することで、そういった部分も最初から考慮されたシステムを実現できます。
ファイル転送の完了とTCP接続の終了
配信側は、ファイルのすべてのデータを集信側へと送信後に、「これでファイルをすべて送信しました」という通知を送ります。その通知を受けた集信側は、受け取ったファイルサイズなどをチェックすることによって、ファイルが正しく転送されたかを確認します。
集信側は、ファイルに対する書き込みを終了後に、ファイル転送が正常に終了したことを配信側に伝えます。
ファイル転送に利用されるTCP接続は、配信側から切断されます。TCP接続の受付(listen)を行う集信側ではなく、接続(connet)を行う配信側からの切断を行うことで、集信側のTCPにおいてTIME_WAITの状態でTCPソケットに関する情報が残ってしまうことを防げます。
このように、ファイル転送の終了に関連する手順にも、様々なノウハウがあるのです。
後編に続きます
今回は、HULFTによるファイル転送を行うためのTCP接続の開始から終了までの大まかな流れを紹介しました。
次回は、ファイル転送前後に行われる処理、データ整合性検証、ジョブ連携など、ファイル転送に伴って行うことできる便利な処理を見ていきます。
著者プロフィール

小川 晃通 氏
「Geekなぺーじ」を運営するブロガー。
慶應義塾大学政策メディア研究科にて博士を取得。ソニー株式会社において、ホームネットワークにおける通信技術開発に従事した後、2007年にソニーを退職し、現在はブロガーとして活動。
著書多数「アカマイ知られざるインターネットの巨人」など。アルファブロガーアワード2011受賞。
さらに学びたい方はこちら
➡ HULFT Family製品をお試しいただけます。まずはお確かめください。
➡ HULFTやDataSpiderを中心に製品の体験ができるハンズオンセミナーを開催しています。