NetBIOS(/ ˈnɛtbaɪɒs /)、またはNetwork Basic Input/Output Systemは、 OSIモデルのセッション層に関連するサービスを提供するAPIであり、ローカルエリアネットワークを介して別々のコンピュータ上のアプリケーションが通信できるようにします。NetBIOSはネットワークプロトコルではありません。NetBIOS APIのリクエストとレスポンスは、複数のプロトコルを介して転送できます。
NetBIOSフレームプロトコルは、 IEEE 802.2 LLC上でNetBIOS APIの要求と応答を伝送するもので、1980年代から1990年代にかけて、 DOSおよびMicrosoft Windowsネットワークのレイヤーの一つとして広く使用されていました。LAN Manager、LAN Server、Windows for Workgroups、Windows 95、Windows NTなど、多くのネットワークオペレーティングシステムでサポートされていました。
NetBIOS over IPX/SPX (NBX) プロトコルは、Novell NetwareのIPX/SPXプロトコルを介して NetBIOS API の要求と応答を転送します。
現代のネットワークでは、NetBIOSの要求と応答は通常、 TCP/IP上でNetBIOS over TCP/IP (NBT)プロトコルを介して転送されます。NetBIOS over TCP/IPは、Windows上のTCP/IPネットワークでシステム名を識別するためにも使用されます。
NetBIOSは、コンピュータ上のアプリケーションがローカルエリアネットワーク(LAN)を介して相互に通信できるようにするオペレーティングシステムレベルのAPIです。このAPIは、 IBM PC Network LANテクノロジーを介したソフトウェア通信のために、1983年にSytek Inc.によって作成されました。[1][2]:1-1 IBM PC Networkでは、API単体として、 NetBIOSは有線通信のためにSytek独自のネットワークプロトコルに依存していました。[ 3 ] [ 2 ]: 1-1
1985 年、IBM はトークン リングネットワーク スキームを進め、 PC ネットワーク時代の NetBIOS 対応アプリケーションが IBM の新しいトークン リング ハードウェア上で動作できるように、Sytek の NetBIOS API のエミュレータを作成しました。[2]:1-1このIBMエミュレータはNetBIOS Extended User Interface (NetBEUI) と呼ばれ、[2]:2-2 Sytekが作成した基本 NetBIOS API を拡張し、とりわけトークン リングのより大きなノード容量に対応できるようにしました。[ 2 ] : 2-17 NetBEUI API がトークン リング上で、具体的にはIEEE 802.2論理リンク制御レイヤーでサービスを提供できるように、同時に新しいネットワーク プロトコル NetBIOS Frames (NBF) が作成されました。NetBIOS/NetBEUIネームサービスとデータグラムサービスを提供するために802.2タイプ1モードを使用し、NetBIOS/NetBEUIセッションサービス(仮想回線)を提供するために802.2タイプ2モードを使用する。[ 2 ]: 3-8-3-10
1985年、マイクロソフトは自社のMS-Netネットワーク技術向けにNetBIOS APIの独自の実装を作成しました。IBMのトークンリングの場合と同様に、マイクロソフトのNetBIOS実装のサービスは、NBFプロトコルによってIEEE 802.2論理リンク制御層上で提供されました。[ 4 ]しかし、MS-NetはOEMにのみ提供され、実際には完全な製品ではなく、配布された形式ではネットワーク上で通信できる状態ではありませんでした。OSIレイヤー1から4(物理層、データリンク層、ネットワーク層、トランスポート層)の実装が欠けており、 OEMは自社バージョンのMS - Netを完全なすぐに使用できる製品にするために、これらの実装(NetBIOSパーツの形で)を提供することが期待されていました。 MS-Net は、Microsoft 独自の NetBIOS のバリアントを介してネットワークにアクセスしました。このバリアントは 2 つの部分に分かれており、OEM が提供する下位レベルの部分は、レイヤー 1~4 に依存する NetBIOS 呼び出しを実装し、Microsoft が提供する上位レベルの部分は、ハードウェアとプロトコルに依存しませんでした。この NetBIOS 実装は、完全な NetBIOS API をサポートしていましたが、 IBM の標準割り込み 0x5C ではなく、 x86割り込み 0x2A を呼び出すことによって呼び出されました。NetBIOS の一部を OEM が実装することに依存していたため、MS-Net と NetBIOS の異なる OEM バージョン間では、一般的に通信できないという残念な副作用がありました。[ 5 ]
1986年、ノベルはAdvanced Novell NetWare 2.0をリリースした。このバージョンでは、同社独自のNetBIOS APIエミュレーションが採用されていた。NetWareのサービスは、NetBIOS over IPX/SPX (NBX)プロトコルを用いて、 NetWareのIPX/SPXプロトコル内にカプセル化されていた。
1987年、 TCPおよびUDPパケット上でNetBIOSサービスを提供する方式であるNetBIOS over TCP/IP(NBT)が発表されました。これはRFC 1001(「TCP/UDPトランスポート上のNetBIOSサービスのためのプロトコル標準:概念と方法」)およびRFC 1002(「TCP/UDPトランスポート上のNetBIOSサービスのためのプロトコル標準:詳細仕様」)で説明されています。NBTプロトコルは、「TCP/IPプロトコルスイートが利用可能なほぼすべてのタイプのシステム上で[NetBIOSアプリケーションの]実装を構築できるようにする」こと、および「インターネット上でNetBIOSの相互運用を可能にする」ことを目的として開発されました。
1987年にPS/2コンピュータが市場に出回った後、IBMはNetBIOS APIを提供するドライバを含むPC LANサポートプログラムをリリースしました。NBFプロトコルは、 Windows 2000までのほぼすべてのバージョンのWindowsでMicrosoftによって公式にサポートされていましたが[ 6 ]、NBTの開発以来、その使用は急速に減少しました。MicrosoftはWindows XPから公式にサポートを終了しましたが[ 7 ]、Windows XP CD-ROMに含まれており、手動でインストールできます。[ 8 ] Windows VistaにはNetBEUI(つまりNBF)のサポートは全く含まれていませんが、Windows XPのNetBEUIサポートドライバを使用できます。[ 9 ]
NetBIOSとNetBEUIという名称には多少の混乱が見られます。NetBEUIは、もともとはIBMがToken Ring向けに1985年に開発した拡張NetBIOSエミュレータの名称として使われていました。当時、他社のNetBIOS実装は、Token Ringのエミュレータに搭載されているAPI拡張機能の有無に関わらず、単にNetBIOSと呼ばれていたため、NetBEUIという名称はそこで消滅するはずでした。しかし、MicrosoftはMS-Netにおいて、NBFプロトコルの実装に「NetBEUI」という名称を採用しました。これは、IBMの拡張APIバージョンにちなんでトランスポートプロトコルの実装に名前を付けたものです。そのため、Microsoftのイーサネット経由のファイルおよびプリンタ共有は、今でもNetBEUIと呼ばれることが多く、NetBIOSという名称はTCP/IP経由のファイルおよびプリンタ共有を指す場合にのみ一般的に使われています。より正確には、前者はNetBIOSフレーム(NBF)、後者はTCP/IP経由のNetBIOS(NBT)です。
NBFプロトコルはルーティングできないため、同じブロードキャストドメイン内のデバイスとの通信にのみ使用できますが、ブリッジ可能であるため、ブリッジを介して相互に接続されたネットワークセグメントとの通信にも使用できます。ルーティング可能なネットワークをサポートしていないため、NBFは小規模から中規模のネットワークにのみ適しており、TCP/IPに比べて設定がほとんど不要であるという利点があります。NetBIOS/NetBEUIサービスは、インターネットワークで使用するために、IPXやTCP/IPなどの他のプロトコルの上に実装する必要があります(上記を参照)。[ 10 ]
IBMの技術参考書に最初に掲載されて以来、NetBIOS API仕様は、当初はLAN内で最大80台のPCしかサポートしていなかったにもかかわらず、業界の事実上の標準となっています。この制限は、NBFからNBTへの移行によって業界全体で一般的に克服されました。例えば、Microsoftは、以前はWindowsクライアント/サーバーネットワークでそのような名前を解決するためにLANセグメントで区分けされたNBFプロトコル自体を使用していましたが、この移行によりNetBIOSホスト名の解決にドメインネームシステム(DNS)に切り替えることができました。[ 1 ]
NetBIOSは3つの異なるサービスを提供します。
(注:上位レイヤーであるSMBは、セッションサービスとデータグラムサービス上で動作するサービスであり、NetBIOS自体の必須かつ不可欠な部分とは混同しないでください。SMBは現在、各SMBメッセージに長さフィールドを追加する小さな適応レイヤーを介してTCP上で動作できます。これは、TCPがメッセージ境界の概念を持たないバイトストリームサービスのみを提供するため必要です。)
セッションを開始したりデータグラムを配信したりするには、アプリケーションは名前サービスを使用してNetBIOS名を登録する必要があります。NetBIOS名は16オクテットの長さで、実装によって異なります。多くの場合、16番目のオクテットはNetBIOSサフィックスと呼ばれ、リソースの種類を示し、システムが提供するサービスの種類を他のアプリケーションに伝えるために使用できます。NBTでは、名前サービスはUDPポート137で動作します(TCPポート137も使用できますが、ほとんど使用されません)。
NetBIOSが提供する名前サービスプリミティブは以下のとおりです。
インターネットプロトコルバージョン6(IPv6)はNetBIOS名前解決プロトコルではサポートされていません。[ 11 ]
データグラムモードはコネクションレス型であり、エラー検出と回復はアプリケーション側で行います。NBTでは、データグラムサービスはUDPポート138で動作します。
NetBIOSが提供するデータグラムサービスプリミティブは以下のとおりです。
セッションモードでは、2台のコンピュータが接続を確立でき、メッセージが複数のパケットにまたがって送信され、エラー検出と回復機能が提供されます。NBTでは、セッションサービスはTCPポート139で動作します。
NetBIOSが提供するセッションサービスプリミティブは以下のとおりです。
PCネットワーク上でNetBIOSサービスを実装するために使用されていた元のプロトコルでは、セッションを確立するために、開始側のコンピュータがOpen要求を送信し、それに対してOpen確認応答が返されます。セッションを開始したコンピュータは次にSession要求パケットを送信し、それに対してSession AcceptパケットまたはSession Rejectパケットが応答されます。
確立されたセッション中は、送信された各パケットに対して、肯定応答(ACK)または否定応答(NAK)のいずれかが返されます。NAKが返された場合は、データの再送信が促されます。セッションは、開始していないコンピュータがクローズ要求を送信することで閉じられます。セッションを開始したコンピュータはクローズ応答を返信し、これにより最後のセッション終了パケットが送信されます。
NetBIOSがインターネットプロトコル(NBTなど)と連携して実行される場合、各コンピュータは複数の名前を持つことができます。1つ以上のNetBIOSネームサービス名と1つ以上のインターネットホスト名です。
NetBIOS 名は 16 文字の ASCII 文字ですが、Microsoft はホスト名を 15 文字に制限し、16 文字目を NetBIOS サフィックスとして予約しています。[ 12 ]このサフィックスは、ホスト レコード、マスター ブラウザー レコード、ドメイン コントローラー レコード、その他のサービスなど、サービスまたは名前レコードの種類を表します。ホストのホスト名 (または短いホスト名) は、ホストに Windows ネットワークがインストールまたは構成されるときに指定されます。登録されるサフィックスは、ホストが提供する個々のサービスによって決定されます。TCP/IP を実行しているコンピューターに NetBIOS 名で接続するには、名前をネットワーク アドレスに解決する必要があります。現在では、これは通常IP アドレスです (NetBIOS 名から IP アドレスへの解決は、多くの場合、ブロードキャストまたはWINSサーバー (NetBIOS ネーム サーバー)によって行われます)。コンピューターの NetBIOS 名は、多くの場合、そのコンピューターのホスト名 (下記参照) と同じですが、15 文字に切り詰められます。ただし、完全に異なる場合もあります。
NetBIOS名は英数字の並びです。以下の文字は明示的に使用できません。\/:*?"<>|Windows 2000以降、NetBIOS名もDNS名の制限に従う必要がありました。つまり、数字だけで構成することはできず、ハイフン("-"))またはピリオド(".")文字を最初または最後の文字として使用することはできません。Windows 2000以降、MicrosoftはNetBIOS名にピリオド(".")文字を含めないように推奨しており、アプリケーションはピリオドの有無を使用してドメイン名とNetBIOS名を区別できます。[ 12 ]
WindowsのLMHOSTSファイルは、WINSサーバーを使用しない小規模ネットワークで使用できるNetBIOS名前解決方法を提供します。
Windows マシンの NetBIOS 名は、コンピュータのインターネット ホスト名と混同してはいけません (コンピュータが NetBIOS ノードであることに加えてインターネット ホストでもあることを前提としていますが、必ずしもそうである必要はありません)。一般的に、インターネット プロトコルを実行しているコンピュータ (Windows マシンであるかどうかにかかわらず) には、ホスト名 (マシン名とも呼ばれます) があります。元々は、これらの名前はhosts ファイルに格納され、そこから提供されていましたが、現在では、そのような名前のほとんどは階層型ドメイン ネーム システム(DNS)の一部となっています。
一般的に、Windows コンピューターのホスト名は、NetBIOS 名とプライマリ DNS サフィックスを組み合わせたもので、これらは両方とも [システムのプロパティ] ダイアログボックスで設定します。接続固有のサフィックスが存在する場合もあり、これらは [コントロール パネル] → [ネットワーク] → [TCP/IP] → [詳細設定] の [DNS] タブで表示または変更できます。ホスト名は、 telnet、ftp、Web ブラウザーなどのアプリケーションで使用されます。TCP/IP プロトコルを実行しているコンピューターにホスト名を使用して接続するには、ホスト名をIP アドレスに解決する必要があります。これは通常、DNS サーバーによって行われます。(上記 3 つのアプリケーションを含め、多くの TCP/IP ベースのアプリケーションを IP アドレスのみで操作することも可能ですが、これは一般的ではありません。)
Windows環境では、ネットワーク接続されたコンピュータのノードタイプは、 NetBIOS名をIPアドレスに解決する方法に関係します。これは、NetBIOSノードにIPアドレスが存在することを前提としており、NetBIOSがNBT上で動作する場合にのみ保証されます。したがって、ノードタイプはNetBIOS自体の特性ではなく、Windows OS環境におけるNetBIOSとTCP/IP間の相互作用の特性です。ノードタイプは4種類あります。
使用中のノードの種類は、コマンドプロンプトを開いて「ipconfig /all」と入力することで確認できます。Windowsコンピューターのレジストリによっては、ノードの種類が「不明」と表示されるように設定されている場合もあります。
NetBIOSサフィックス(別名NetBIOS終了文字(endchar))は、NetBIOS名の16番目の文字であり、登録された名前のサービスタイプを示します。レコードタイプの数は255に制限されています。よく使用される値には以下のようなものがあります。
ユニークな名前の場合:
グループ名の場合:
以下の表は、NetBIOSとその関連プロトコルの簡単な歴史を示しています。NetBIOSは、主にSMBプロトコルを利用していました。SMBは、Windowsのファイルおよびプリンター共有機能を実現します。
[RFC1002] で定義されている NetBIOS プロトコルは、NetBIOS 名と IPv6 アドレス間のマッピングをサポートしていないため、リモート管理インターフェイス: WINS プロトコルは IPv4 アドレスにのみ適用されます。IPv6 アドレスには適用されません。