Apple Filing Protocol




Apple Filing Protocol(またはAppleTalk Filing ProtocolAFP)は、アップルが開発した、Classic Mac OS / macOSのファイル共有 (AppleShare) のためのプロトコルである。初期はAppleTalkの複数のプロトコルのうちのひとつとして存在した。 AFP 2.2以降ではAppleTalkではなくTCP/IP上で動くプロトコル (AFP over TCP) になっている。




目次






  • 1 概要


  • 2 歴史


    • 2.1 AFP 1.0


    • 2.2 AFP 1.1/2.0


    • 2.3 AFP 2.1/2.2


    • 2.4 AFP 2.3


    • 2.5 AFP 3.x




  • 3 OSI参照モデル


  • 4 ファイル名の扱い


  • 5 非公開コマンド


  • 6 AFPサーバのブラウジング


  • 7 実装例


  • 8 参照


  • 9 関連項目





概要


Classic Mac OSやmacOSは、「パーソナルファイル共有」または単に「ファイル共有」の設定を行なえば、AFPサーバとして動作させることができる。ただし、同時接続10ユーザ迄、10ボリューム迄、10フォルダ迄といった制限がある[1]。Classic Mac OSでは別途購入のソフトウェアAppleShareをインストールすることで大規模なAFPサーバとして動作させることができた。macOSの場合は、サーバ版であるmacOS Serverにて大規模AFPサーバを構成できる。


こうしたAFPによるファイル共有のことをAppleShareと呼ぶ場合がある。


Mac OS X v10.5以降ではバックアップのためのソフトウェアTime Machineが追加されたが、これを使ってネットワーク上のドライブにバックアップする場合、通常はAFPが利用される[2]


Mac以外でもAFPを実装するソフトウェアがいくつかあり、異なるOSとの間でファイル共有を実現することができる。これの具体例に関しては下の「実装例」に記述する。


極めて古いMacはAppleTalkのAFPのみをサポートするため、最近のTCP/IPのみのAFPサーバには接続できない。また、その逆に最近のMacは極めて古いAFPサーバに接続できないという問題がある。しかしながら、AppleTalk自体が過去のものになりつつあるため、近年はさほど問題視されない。


Classic Mac OSのローカルファイルシステムであるHFSやHFS+は、独自のファイル属性やリソースフォーク、タイプ/クリエータ等を有しており、Mac OSの仕様変更、仕様拡張と共に進化してきた。AFPもこれと同等の機能を提供するために度重なるバージョンアップを繰り返してきている。


Mac OS 9迄は、AFPがOS標準サポートの唯一のファイル共有サービスであったが、macOSではAFPの他に、SMB (CIFS)、NFS、FTP、WebDAVといったさまざまなファイルサービスも利用できるようになった。しかし、これらを用いた場合、HFSやHFS+独自のメタデータは欠落するか、またはAppleDouble Header Fileとして別ファイルで扱われることになる(このファイル名は「._」で始まる)。このため、AFPはmacOSにとって重要な意味をもつファイル共有プロトコルと言えた。


しかしながら、macOSのSMBのサーバ及びクライアント機能の実装も改良が続けられ、メタデータは代替データストリームとして保存できるようになった。OS X MavericksはSMB2の機能を実装し、AFPよりもSMB2を優先するようになった。ただしTime Machineに関してはAFPのままである。


Mac OS以外のオペレーティングシステム (OS) でAFPを実装する場合、HFS、HFS+特有の情報をどのようにして保存するかが問題となる。
Windows Server 2003迄のバージョンのSFM (Service for Macintosh) ではNTFSの代替データストリームを用いていたが、Windows Server 2008以降ではSFM自体が廃止されている。UNIX上でAFPを実装するnetatalkでは、.AppleDoubleという名称のディレクトリをつくり、この中にAppleDouble Header fileを保存する仕様である。データフォークのみを扱う実装も実在する。



歴史



AFP 1.0


リリースされなかった。



AFP 1.1/2.0


初期のClassic Mac OSでは、ネットワーク機能はAppleTalkと呼ばれる独自のプロトコル群を用いていた。これについては書籍「Inside AppleTalk[3]」や「Inside Macintosh[4]」に各種仕様が載っている。
AFP 1.1および2.0はこれに載っているプロトコルのひとつであった。この時点での正式名称はAppleTalk Filing Protocolである。



AFP 2.1/2.2


AFP 2.1および2.2はアップルによるドキュメント「AppleTalk Filing Protocol
Version 2.1 and 2.2[5]」で仕様が公開されている。
AppleTalkとTCP/IPの両方をサポートする。AFP 2.1がAppleTalkベースであり、AFP 2.2がTCP/IPベースである。TCP上でAFPを使うためのData Stream Interface (DSI) の仕様もこの文書に載っている。


AFP 2.1では、サーバメッセージ (FPGetSrvrMsg)、ファイルID (FPCreateID, FPDeleteID, FPResolveID, FPExchangeFiles)、ファイル名検索 (FPCatSearch) といったコマンドが追加され、ファイルのアクセス権の概念が導入された。また、ユーザ認証方法 (UAM) として双方向乱数交換 (Two-Way Random Number Exchange) が導入された。


AFP 2.2ではTCP/IPのサポートのためにサーバ情報取得 (FPGetSrvrInfo)、ボリューム情報取得 (FPGetVolParms, FPOpenVOL) が拡張されている。



AFP 2.3


AFP 2.3は、クライアントがスリープに入ることをサーバに通知するコマンド (FPZzzzz) が追加されたのみである。



AFP 3.x


現在のアップルのドキュメント[6][7]は、主にmacOSのためのAFP 3.xを解説している。


ついにAppleTalkのサポートがなくなり、TCP/IPベースのみとなった。AFPはApple Filing Protocolの略とされ、AppleTalkという名称が削除された格好である。


AFP 3.0では、UNIXスタイルのPOSIXパーミッションモデル、Unicodeファイル名 (AFPName) のサポートが追加され、最大共有数と最大ファイルサイズ(2GiB以上)が拡張された。


AFP 3.1では、ディレクトリリストの拡張 (FPEnumerateExt2)、サーバおよびクライアントのクラッシュへの対応、再接続への対応、ユーザ認証方法の追加 (Kerberos, DHX2,R econnect)、IPv6対応、Unicodeサーバ名等が追加されている。


AFP 3.2では、ACL対応 (FPAccess, FPGetACL, FPSetACL)、拡張属性 (FPGetExtAttr, FPListExtAttrs, FPRemoveExtAttr)、Time Machine対応 (FPSyncDir, FPSyncFork)、ファイル名の大文字小文字を区別する拡張 (kCaseSensitive) 等が追加された。


AFP 3.3では、サーバからの返答をキャッシュする機能 (AFP Replay Cache) が追加された。


AFP 3.4では、任意の名前の拡張属性が存在しなかった場合のエラーコードが変更されたのみである。



OSI参照モデル


AppleTalkベースとTCP/IPベースの差異は、OSI参照モデルを適用すると理解しやすい。



AppleTalkの場合、AFP over ASP over ATP over DDPという構造となる。


TCP/IPの場合、AFP over DSI over TCP over IPという構造となる。つまりASPをDSIに置き換えることにより、AppleTalkとの差異を吸収した。DSIのデフォルトのポート番号は548であり、IANAではこのポートにafpovertcpというキーワードを与えている。ポート番号は変更することもできる。AppleTalkベースと区別するためにAFP over TCPと称する場合もある。



ファイル名の扱い


AFPでは、3種類のファイル名を扱うことができる。



  • Short Name(MS-DOS互換の8.3形式、AFP 1.1以降)

  • Long Name(HFS互換の31バイト制限、AFP 1.1以降)

  • AFPName(実質的に長さ制限なし、AFP 3.0以降)


Short NameとLong Nameは最初のAFP 1.1から定義されているが、現在Short Nameをサポートする実装は稀であろう。


Mac OS 9迄はファイル名に31バイトの制限があり、一般には「短いファイル名」と呼ばれているが、仕様上は「Long Name」であることに注意されたい。ファイル名に使われる文字コードはMac OSの言語によって異なる。日本語版のMac OS(或は漢字Talk)ではMacJapaneseが使われる。


macOSのためのAFP 3.xでは、AFPNameが使えるようになった。ファイル名に使われる文字コードはUnicodeであるため、さまざまな言語を混ぜて使うことができる。31バイトを越えることができるため、一般に「長いファイル名」と呼ばれるのはこれである。


ファイル名に使えない文字は制御文字NULLとコロン「:」の2文字である。


大文字小文字の区別は元々なかったが、AFP 3.2から区別する機能も追加された。



非公開コマンド


AFPでは各コマンドに番号を与えており、アップルのサイトで公開されている文書で確認できる。


Mac OS X v10.5以降は76という番号が振られたコマンドを発行するが、これはSpotlightのためのFPSpotlightRPCというコマンドであることだけが公開されている。アップルのプライベートなコマンドであり詳細は非公開である。



AFPサーバのブラウジング


AFPサーバのブラウジングは、AFPとは別のプロトコルで行なわれる。


初期はAppleTalkのNBP (Name Binding Protocol) を用いて行なわれた。NBP over AppleTalkにてサーバを発見し、AFP over AppleTalkでファイル共有を実現したわけである。


その後、AFPがTCP/IPに移植されたため、NBPにてサーバを発見してからAFP over TCPで接続することが可能になった。


更にTCP/IPのポート427を用いるService Location Protocol (SLP) でブラウジングが可能となった。この時点でAppleTalkの必要性が薄らいだわけである。


Mac OS X v10.2以降ではBonjour (Zeroconf) が導入された。Mac OS X v10.5ではAppleTalkとSLPによるAFPサーバのブラウジング機能が削除され、Bonjourのみで可能となっている。


こうしたプロトコルの変更の結果、新しいMacから古いMacが発見できない、またはその逆といった問題が発生する。この場合はIPアドレスやhostnameを直接指定することで接続ができる。



実装例




  • AppleShare - Classic Mac OS用の製品

  • パーソナルファイル共有 - Classic Mac OSおよびmacOSの標準機能

  • macOS Server - 標準機能


  • Microsoft Windows Server - Service for Macintosh (SFM)

  • NetWare

  • PC MACLAN - ディアイティ社によるWindows用AFPサーバ/クライアント

  • HELIOS UB+ (EtherShare) - HELIOS社によるファイル・プリントサーバ


  • CAP (Columbia AppleTalk Package) - Unix系OS用オープンソースAppleTalkソフト


  • netatalk - Unix系OS用オープンソースAFPサーバ


  • afpfs-ng - Unix系OS用オープンソースAFPクライアント


  • ExtremeZ-IP - Windows用AFPサーバ


  • jaffer - JavaによるAFPサーバ



参照




  1. ^ Mac OS 8 and 9: パーソナルファイル共有のユーザ制限


  2. ^ Time Machine Network Interface Specification (TMNIS)


  3. ^ Inside AppleTalk Second Edition (pdf)


  4. ^ Inside Macintosh: Networking / Chapter 9 - AppleTalk Filing Protocol (AFP)


  5. ^ AppleTalk Filing Protocol Version 2.1 and 2.2 (pdf)


  6. ^ Apple Filing Protocol Programming Guide


  7. ^ Apple Filing Protocol Reference



関連項目



  • AppleTalk

  • TCP/IP

  • 通信プロトコル

  • CAP

  • netatalk




Popular posts from this blog

How to make a Squid Proxy server?

Is this a new Fibonacci Identity?

19世紀