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 reconfigure Docker Trusted Registry 2.x.x to use CEPH FS mount instead of NFS and other traditional...

is 'sed' thread safe

How to make a Squid Proxy server?