この文書はRFC814の日本語訳(和訳)です。 この文書の翻訳内容の正確さは保障できないため、 正確な知識や情報を求める方は原文を参照してください。 翻訳者はこの文書によって読者が被り得る如何なる損害の責任をも負いません。 この翻訳内容に誤りがある場合、訂正版の公開や、 誤りの指摘は適切です。 翻訳者はこの文書の配布を制限しません。
RFC: 814
NAME, ADDRESSES, PORTS, AND ROUTES
名前とアドレスとポートと経路
David D. Clark
MIT Laboratory for Computer Science
Computer Systems and Communications Group
July, 1982
1. Introduction
1. はじめに
It has been said that the principal function of an operating system
is to define a number of different names for the same object, so that it
can busy itself keeping track of the relationship between all of the
different names. Network protocols seem to have somewhat the same
characteristic. In TCP/IP, there are several ways of referring to
things. At the human visible interface, there are character string
"names" to identify networks, hosts, and services. Host names are
translated into network "addresses", 32-bit values that identify the
network to which a host is attached, and the location of the host on
that net. Service names are translated into a "port identifier", which
in TCP is a 16-bit value. Finally, addresses are translated into
"routes", which are the sequence of steps a packet must take to reach
the specified addresses. Routes show up explicitly in the form of the
internet routing options, and also implicitly in the address to route
translation tables which all hosts and gateways maintain.
オペレーティング・システムの主な機能は、同じオブジェクトに多くの異
なった名前を定義する事と言われ、それで異なった名前のすべての間の関係を記
録・追跡するのに忙しくなります。ネットワークプロトコルが幾分同じ特徴を持
つように思われます。TCP/IPで、物を参照するいくつかの方法があります。
人間の目に見えるインタフェースにおいて、ネットワークとホストとサービスを
識別するための文字列「名前」があります。ホスト名が32ビットのネットワー
ク「アドレス」に翻訳され、これはホストが接続するネットワークと、そのネッ
ト上のホストの位置を示します。サービス名が「ポート識別子」に変換され、こ
れはTCPで16ビット値です。最終的に、アドレスが「経路」に変換され、こ
れはパケットが指定されたアドレスに着くためにとらなくてはならないステップ
の連続です。経路が明示的にインターネットルーティングオプションのかたちで、
そして暗黙のうちにすべてのホストとゲートウェイが維持する経路翻訳テーブル
に現われます。
This RFC gives suggestions and guidance for the design of the
tables and algorithms necessary to keep track of these various sorts of
identifiers inside a host implementation of TCP/IP.
このRFCはTCP/IPのホスト実装中にこれらの種々種類の識別子を
記録・追跡するために必要なテーブルとアルゴリズムの設計のための提案と指導
を与えます。
2. The Scope of the Problem
2. 問題の範囲
One of the first questions one can ask about a naming mechanism is
how many names one can expect to encounter. In order to answer this, it
is necessary to know something about the expected maximum size of the
internet. Currently, the internet is fairly small. It contains no more
than 25 active networks, and no more than a few hundred hosts. This
makes it possible to install tables which exhaustively list all of these
elements. However, any implementation undertaken now should be based on
an assumption of a much larger internet. The guidelines currently
recommended are an upper limit of about 1,000 networks. If we imagine
an average number of 25 hosts per net, this would suggest a maximum
number of 25,000 hosts. It is quite unclear whether this host estimate
is high or low, but even if it is off by several factors of two, the
resulting number is still large enough to suggest that current table
management strategies are unacceptable. Some fresh techniques will be
required to deal with the internet of the future.
名前メカニズムに対する最初の問題は、いくつの名前に遭遇すると予期す
べきかです。これに答えるために、インターネットの予想される最大の大きさに
ついて何かを知ることが必要です。現在、インターネットはかなり小さいです。
これは25以上のアクティブなネットワークと数百のホスト以上の何も含んでい
ません。これは徹底的にこれらすべての要素をリストアップするテーブルを持つ
ことを可能にします。しかしながら、今開発している実装はは、ずっと大きいイ
ンターネットを仮定すべきです。現在推薦されたガイドラインは上限がおよそ
1,000のネットワークです。もし我々がネットワーク毎に平均25のホスト
数を想像するなら、これは25,000のホストの最大数を提案するでしょう。
このホスト見積もりが高いか低いかは非常に不明確です、しかしたとえこれが数
桁外れるとしても、その結果の数は現在テーブル管理戦略で受け入れ難いことを
示唆するのに十分大きいです。何らかの新しい技術が未来のインターネットを扱
うように要求されるでしょう。
3. Names
3. 名前
As the previous section suggests, the internet will eventually have
a sufficient number of names that a host cannot have a static table
which provides a translation from every name to its associated address.
There are several reasons other than sheer size why a host would not
wish to have such a table. First, with that many names, we can expect
names to be added and deleted at such a rate that an installer might
spend all his time just revising the table. Second, most of the names
will refer to addresses of machines with which nothing will ever be
exchanged. In fact, there may be whole networks with which a particular
host will never have any traffic.
前の章が示唆するように、インターネットは結局はホストが静的に名前か
らアドレスへの変換をするテーブルでもてないほどの数の名前を持つでしょう。
ホストがこのようなテーブルを持つことが望ましくない大きさ以外のいくつかの
理由があります。最初に、この多くの名前は、設置者が常にテーブルの修正をし
続けないといけないほどの頻度で名前の追加削除が予想されます。第二に、名前
の大部分は機械が通信を行わないアドレスに関するものでしょう。実際、特定の
ホストが通信をしないネットワークがあるかもしれません。
To cope with this large and somewhat dynamic environment, the
internet is moving from its current position in which a single name
table is maintained by the NIC and distributed to all hosts, to a
distributed approach in which each network (or group of networks) is
responsible for maintaining its own names and providing a "name server"
to translate between the names and the addresses in that network. Each
host is assumed to store not a complete set of name-address
translations, but only a cache of recently used names. When a name is
provided by a user for translation to an address, the host will first
examine its local cache, and if the name is not found there, will
communicate with an appropriate name server to obtain the information,
which it may then insert into its cache for future reference.
この広くいくらか動的な環境にうまく対処するために、インターネットは
現在のひとつのNICにより維持される全ホストに配布される名前テーブルから、
それぞれのネットワーク(あるいはネットワークグループ)がそれ自身の名前を
維持しそのネットワークの名前とアドレスの翻訳をするための「ネームサーバ」
を供給することに責任がある分散方式に移行します。それぞれのホストが名前ア
ドレス翻訳の全体を持つのではなく、ただ最近使われた名前のキャッシュだけを
持つと考えられます。アドレスに翻訳するために名前がユーザから供給される時、
ホストは最初にそのローカルなキャッシュを調べるでしょう、そして名前がそこ
になければ、適切なネームサーバと通信して情報を得て、将来の参照に備えて
キャッシュに挿入するかもしれません。
Unfortunately, the name server mechanism is not totally in place in
the internet yet, so for the moment, it is necessary to continue to use
the old strategy of maintaining a complete table of all names in every
host. Implementors, however, should structure this table in such a way
that it is easy to convert later to a name server approach. In
particular, a reasonable programming strategy would be to make the name
table accessible only through a subroutine interface, rather than by
scattering direct references to the table all through the code. In this
way, it will be possible, at a later date, to replace the subroutine
with one capable of making calls on remote name servers.
不幸にも、ネームサーバメカニズムはインターネットでまだ決定されてお
らず、それで差し当たり、すべてのホストですべての名前の完全なテーブルを維
持する古い戦略を使い続けることは必要です。実装者が、しかしながら、後にネー
ムサーバの方式に換えることが容易になる方法でこのテーブルを構造化するべき
です。特に、合理的なプログラム戦略は、コード内にテーブルの直接参照をまき
散らすのではなく、すべてコードで名前テーブルをサブルーチンインタフェース
を通して行うことでしょう。このようにして、サブルーチンを遠隔ネームサーバ
の呼び出しをするものに置き換えることは、後日可能であるでしょう。
A problem which occasionally arises in the ARPANET today is that
the information in a local host table is out of date, because a host has
moved, and a revision of the host table has not yet been installed from
the NIC. In this case, one attempts to connect to a particular host and
discovers an unexpected machine at the address obtained from the local
table. If a human is directly observing the connection attempt, the
error is usually detected immediately. However, for unattended
operations such as the sending of queued mail, this sort of problem can
lead to a great deal of confusion.
今日ARPANETで時折起こる問題は、ローカルホストテーブルでの情
報が、ホストの移動しNICからホストテーブルの修正がインストールされてい
ないため、時代遅れであるということです。この場合、特定のホストに接続しよ
うと試みて、ローカルテーブルから得られたアドレスで予期せぬ機械を発見しま
す。もし接続の試みを直接人が観察しているなら、エラーは通常すぐに検出され
ます。しかしながら、待ち行列に入れられたメールを送ることのような、人がい
ないオペレーションで、この種の問題は多くの混乱を導きます。
The nameserver scheme will only make this problem worse, if hosts
cache locally the address associated with names that have been looked
up, because the host has no way of knowing when the address has changed
and the cache entry should be removed. To solve this problem, plans are
currently under way to define a simple facility by which a host can
query a foreign address to determine what name is actually associated
with it. SMTP already defines a verification technique based on this
approach.
もしホストがいつアドレスが変化しキャッシュを削除すべきか知る方法を
持たずに、単にホストがローカルにに検索された名前とアドレスをキャッシュす
るなら、ネームサーバ案はこの問題を悪化するでしょう。この問題を解くために、
ホストが外部アドレスにその名前が何かを問い合わせる単純な機能を定義する計
画が現在進行中です。SMTPがすでにこのアプローチに基づく検証技術を定義
します。
4. Addresses
4. アドレス
The IP layer must know something about addresses. In particular,
when a datagram is being sent out from a host, the IP layer must decide
where to send it on the immediately connected network, based on the
internet address. Mechanically, the IP first tests the internet address
to see whether the network number of the recipient is the same as the
network number of the sender. If so, the packet can be sent directly to
the final recipient. If not, the datagram must be sent to a gateway for
further forwarding. In this latter case, a second decision must be
made, as there may be more than one gateway available on the immediately
attached network.
IPレイヤはアドレスについて何かを知っていなくてはなりません。特に、
データグラムがホストから送られている時、IPレイヤは、インターネットアド
レスに基づいていて、直接接続されたネットワーク上のどこにそれを送るべきか
決めなくてはなりません。機械的に、IPは受信ネットワーク番号が送信者のネッ
トワーク番号と同じであるかどうか見るために、最初にインターネットアドレス
をテストします。もしそうであるなら、パケットは直接最終受信者に送ることが
できます。もしそうでなければ、データグラムは以降おの転送のためにゲートウェ
イに送られなくてはなりません。この後の場合、直接接続するネットワーク上に
利用可能な複数のゲートウェイがあるかもしれないから、瞬間的な決断がされな
くてはなりません。
When the internet address format was first specified, 8 bits were
reserved to identify the network. Early implementations thus
implemented the above algorithm by means of a table with 256 entries,
one for each possible net, that specified the gateway of choice for that
net, with a special case entry for those nets to which the host was
immediately connected. Such tables were sometimes statically filled in,
which caused confusion and malfunctions when gateways and networks moved
(or crashed).
インターネットアドレスフォーマットが最初に指定された時、8ビットが
ネットワークを識別するために予約されました。初期の実装はそれで上記のアル
ゴリズムを、それぞれのネットワークのゲートウェイを指定する256個の要素
を持つテーブルで実装しました、ホストが接続しているネットは特別な場合の要
素です。このようなテーブルは時々静的に記入され、そしてゲートウェイとネッ
トワークが変わると混乱と故障(あるいは停止)を起こしました。
The current definition of the internet address provides three
different options for network numbering, with the goal of allowing a
very large number of networks to be part of the internet. Thus, it is
no longer possible to imagine having an exhaustive table to select a
gateway for any foreign net. Again, current implementations must use a
strategy based on a local cache of routing information for addresses
currently being used.
インターネットアドレスの現在の定義は、多数のネットワークがインター
ネットに参加できるように、ネットワーク番号に3つの異なる選択を供給します。
それで、どんな外のネットワークのためのゲートウェイを選択するために徹底的
なテーブルを持つと想像することは可能ではありません。現在の実装は、現在使
われているアドレスのために、ルーティング情報のローカルキャッシュに基づい
た作戦を使わなくてはなりません。
The recommended strategy for address to route translation is as
follows. When the IP layer receives an outbound datagram for
transmission, it extracts the network number from the destination
address, and queries its local table to determine whether it knows a
suitable gateway to which to send the datagram. If it does, the job is
done. (But see RFC 816 on Fault Isolation and Recovery, for
recommendations on how to deal with the possible failure of the
gateway.) If there is no such entry in the local table, then select any
accessible gateway at random, insert that as an entry in the table, and
use it to send the packet. Either the guess will be right or wrong. If
it is wrong, the gateway to which the packet was sent will return an
ICMP redirect message to report that there is a better gateway to reach
the net in question. The arrival of this redirect should cause an
update of the local table.
アドレスから経路への翻訳の推薦された戦略は次の通りです。IPレイヤ
が送信のために外行きのデータグラムを受け取る時、宛先アドレスからネットワー
ク番号を抽出し、そしてデータグラムを送る適当なゲートウェイを知っているか
どうか決定するためにそのローカルテーブルに問い合わせます。もしあれば仕事
をします。(どのようにゲートウェイ障害を扱うかの推薦について、RFC816
の障害隔離と回復を見てください)。もしローカルテーブルにこのような項目が
ないなら、ランダムにアクセス可能なゲートウェイを選択し、テーブルのその項
目を挿入し、パケットを送るためにそれを使います。推測は正しいか間違ってる
かです。もし間違っているなら、パケットが送られたゲートウェイはあて先ネッ
トに届くもっと良いゲートウェイがあると報告するICMPリダイレクトメッセー
ジを返すでしょう。このリダイレクトの到着はローカルテーブルの更新を起こす
べきです。
The number of entries in the local table should be determined by
the maximum number of active connections which this particular host can
support at any one time. For a large time sharing system, one might
imagine a table with 100 or more entries. For a personal computer being
used to support a single user telnet connection, only one address to
gateway association need be maintained at once.
ローカルテーブルの項目の数は、この特定のホストが一度にサポートでき
るアクティブな接続の最大数によって決定されるべきです。長時間の共有システ
ムで、100以上の項目のテーブルを想像するかもしれません。使われているパー
ソナル・コンピュータが一人のユーザのtelnet接続をサポートするために
は、同時にひとつのアドレスとゲートウェイの関連だけが維持されればよいです。
The above strategy actually does not completely solve the problem,
but only pushes it down one level, where the problem then arises of how
a new host, freshly arriving on the internet, finds all of its
accessible gateways. Intentionally, this problem is not solved within
the internetwork architecture. The reason is that different networks
have drastically different strategies for allowing a host to find out
about other hosts on its immediate network. Some nets permit a
broadcast mechanism. In this case, a host can send out a message and
expect an answer back from all of the attached gateways. In other
cases, where a particular network is richly provided with tools to
support the internet, there may be a special network mechanism which a
host can invoke to determine where the gateways are. In other cases, it
may be necessary for an installer to manually provide the name of at
least one accessible gateway. Once a host has discovered the name of
one gateway, it can build up a table of all other available gateways, by
keeping track of every gateway that has been reported back to it in an
ICMP message.
上記の戦略は実際には完全に問題を解いていませんが、しかしただ1レベ
ル下がっただけで、そして、インターネットの上に新たに登場したホストが、ア
クセス可能なゲートウェイのすべてを見いだすか、という問題はが生じます。意
図的に、この問題はインターネット体系内で解かれません。ホストに即時にネッ
トワーク上の他のホストを発見することを許すことに対して、理由は異なるネッ
トワークが劇的に異なった作戦を持っているということです。あるネットがブロー
ドキャスト機構を認めます。この場合、ホストがメッセージを送り、そして接続
したゲートウェイのすべてから返事が戻ることを期待できます。他の場合、特定
のネットワークが豊富にインターネットをサポートするツールを提供する場合、
ホストがゲートウェイがどこにあるか決定するために呼び出すことができる特別
なネットワークメカニズムがあるかもしれません。他の場合に、手作業で少なく
とも1つのアクセス可能なゲートウェイの名前を供給することは導入時に必要で
あるかもしれません。ホストが1つのゲートウェイの名前を発見したら、ICM
Pメッセージで報告されたすべてのゲートウェイを記録・追跡することによって、
すべての他の利用可能なゲートウェイのテーブルを増強することができます。
5. Advanced Topics in Addressing and Routing
5. アドレスとルーティングの進捗トピック
The preceding discussion describes the mechanism required in a
minimal implementation, an implementation intended only to provide
operational service access today to the various networks that make up
the internet. For any host which will participate in future research,
as contrasted with service, some additional features are required.
These features will also be helpful for service hosts if they wish to
obtain access to some of the more exotic networks which will become part
of the internet over the next few years. All implementors are urged to
at least provide a structure into which these features could be later
integrated.
前の議論は、インターネットを構成する種々のネットワークに運用上のサー
ビスアクセスを供給することだけをするように意図された実装、最小実装で必要
とされるメカニズムを記述します。将来の研究に参加するホストでは、サービス
と対比して、ある追加の特徴が必要とされます。これらの特徴は、もし次の数年
にわたってインターネットの一部になるであろういっそうエキゾチックなあるネッ
トワークにアクセスを得ることを望むなら、サービスホストのために同じく助け
になるでしょう。すべての実装者は少なくともこれらの特徴が後で統合化できる
構造体を供給するようしきりに促されます。
There are several features, either already a part of the
architecture or now under development, which are used to modify or
expand the relationships between addresses and routes. The IP source
route options allow a host to explicitly direct a datagram through a
series of gateways to its foreign host. An alternative form of the ICMP
redirect packet has been proposed, which would return information
specific to a particular destination host, not a destination net.
Finally, additional IP options have been proposed to identify particular
routes within the internet that are unacceptable. The difficulty with
implementing these new features is that the mechanisms do not lie
entirely within the bounds of IP. All the mechanisms above are designed
to apply to a particular connection, so that their use must be specified
at the TCP level. Thus, the interface between IP and the layers above
it must include mechanisms to allow passing this information back and
forth, and TCP (or any other protocol at this level, such as UDP), must
be prepared to store this information. The passing of information
between IP and TCP is made more complicated by the fact that some of the
information, in particular ICMP packets, may arrive at any time. The
normal interface envisioned between TCP and IP is one across which
packets can be sent or received. The existence of asynchronous ICMP
messages implies that there must be an additional channel between the
two, unrelated to the actual sending and receiving of data. (In fact,
there are many other ICMP messages which arrive asynchronously and which
must be passed from IP up to higher layers. See RFC 816, Fault
Isolation and Recovery.)
体系の一部になったるかもしくは開発下のいくつかの機能があり、これら
はアドレスと経路の関係の変更か拡張に使われます。IPソース経路オプション
はホストが明示的に一連のゲートウェイを通してデータグラムを外のホストに向
けることを許します。ICMPリダイレクトパケットの代わりの形式が提案され、
そしてこれは宛先ネットではなく特定の宛先ホストに固有な情報を返すでしょう。
最終的に、追加のIPオプションがインターネットの中の特定の到達できない経
路を識別するために提案されました。これらの新しい機能を実行することでの困
難さはメカニズムがIPの範囲内に完全に入らないということです。すべての上
記のメカニズムは特定の接続に適用するよう意図されます、それでそれらの使用
はTCPレベルにおいて指定されなくてはなりません。それで、IPとその上の
レイヤの間のインタフェースは、この情報を前後に渡す機構を持ち、TCP(あ
るいはUDPのような同レベルの他のプロトコル)はこの情報を保管する準備が
必要です。IPとTCPの間の情報の通過は情報のいくつかが、特定のICMP
パケットで、いつでも到着できるという事実によってより複雑にされます。TC
PとIPの間に想像された標準的なインタフェースは、パケットを送るか受取る
かです。非同期のICMPメッセージの存在は、データを実際に送ったり受け取っ
たりすることと無関係で、2者間に追加のチャネルがあるにことを意味します。
(実際、IPからより高いレイヤまで非同時的に到着すり渡さなければならない
多くの他のICMPメッセージがあります。RFC816のか着ると回復を参照
してください)。
Source routes are already in use in the internet, and many
implementations will wish to be able to take advantage of them. The
following sorts of usages should be permitted. First, a user, when
initiating a TCP connection, should be able to hand a source route into
TCP, which in turn must hand the source route to IP with every outgoing
datagram. The user might initially obtain the source route by querying
a different sort of name server, which would return a source route
instead of an address, or the user may have fabricated the source route
manually. A TCP which is listening for a connection, rather than
attempting to open one, must be prepared to receive a datagram which
contains a IP return route, in which case it must remember this return
route, and use it as a source route on all returning datagrams.
ソースルートはインターネットですでに使用中で、そして多くの実装がそ
れらを利用することが可能であることを望むでしょう。次の種類の使用は認めら
れるべきです。最初に、ユーザが、TCP接続を始める時、TCPにソースルー
トを渡すことが可能であるべきで、そしてTCPはすべての外向データグラムで
IPにソースルートを渡さなくてはなりません。ユーザは、アドレスの代わりに
ソースルートを返すような異なる種類のネームサーバに問い合わせることで初め
にソースルートを得るかもしれません、あるいはユーザは手作業でソースルート
を造りあげたかもしれません。接続を待つTCPが、1つを開く試みより、IP
返送経路を含むデータグラムを受け取る用意ができているに違いありません、そ
の場合TCPはこの応答経路を覚えていて、そしてすべての返すデータグラムで
これをソースルートとして用いなくてはなりません。
6. Ports and Service Identifiers
6. ポートとサービス識別子
The IP layer of the architecture contains the address information
which specifies the destination host to which the datagram is being
sent. In fact, datagrams are not intended just for particular hosts,
but for particular agents within a host, processes or other entities
that are the actual source and sink of the data. IP performs only a
very simple dispatching once the datagram has arrived at the target
host, it dispatches it to a particular protocol. It is the
responsibility of that protocol handler, for example TCP, to finish
dispatching the datagram to the particular connection for which it is
destined. This next layer of dispatching is done using "port
identifiers", which are a part of the header of the higher level
protocol, and not the IP layer.
体系のIPレイヤはデータグラムを送る宛先ホストを指定するアドレス情
報を含んでいます。実際、データグラムは特定のホストのためだけを意図せず、
ホスト内の特定のエージェントや、プロセスや、実際のデータの生成元や蓄積元
であるエンティティも意図します。IPは非常に単純な処理を行い、データグラ
ムが目標ホストに到着した途端に特定のプロトコルにそれを送ります。特定の接
続にデータグラムを対応付けるのは、例えばTCPなどのプロトコルハンドラの
責任です。この次のレイヤの対応付けは「ポート識別子」を使ってされ、そして
これはIPレイヤではなく、もっとレベルが高いプロトコルのヘッダの一部です。
This two-layer dispatching architecture has caused a problem for
certain implementations. In particular, some implementations have
wished to put the IP layer within the kernel of the operating system,
and the TCP layer as a user domain application program. Strict
adherence to this partitioning can lead to grave performance problems,
for the datagram must first be dispatched from the kernel to a TCP
process, which then dispatches the datagram to its final destination
process. The overhead of scheduling this dispatch process can severely
limit the achievable throughput of the implementation.
2層の体系はある特定の実装の問題を起こしました。特に、ある実装がI
Pレイヤをオペレーティング・システムのカーネルとして、TCPレイヤをユー
ザードメインアプリケーションプログラムとして置くことを望みました。この分
割の厳密な維持は性能の問題を導きます、なぜならデータグラムは最初にカーネ
ルからTCPプロセスに渡され、TCPプロセスがデータグラムをその最終の宛
先プロセスに渡します。この転送プロセスをスケジューリングするオーバーヘッ
ドはひどく実装の達成可能なスループットを制限します。
As is discussed in RFC 817, Modularity and Efficiency in Protocol
Implementations, this particular separation between kernel and user
leads to other performance problems, even ignoring the issue of port
level dispatching. However, there is an acceptable shortcut which can
be taken to move the higher level dispatching function into the IP
layer, if this makes the implementation substantially easier.
RFC817のプロトコル実装のモジュール性と効率インプリメンテーショ
ンで論じられるように、このカーネルとユーザ間の特定の分離はポートレベルの
対応付けの問題を無視しても他性能問題に導きます。しかしながら、受入れ可能
な手段があります、もしこれで実装が十分に容易になるなら、IP層の中に上位
レベル分析関数を動かすことが出来ます。
In principle, every higher level protocol could have a different
dispatching algorithm. The reason for this is discussed below.
However, for the protocols involved in the service offering being
implemented today, TCP and UDP, the dispatching algorithm is exactly the
same, and the port field is located in precisely the same place in the
header. Therefore, unless one is interested in participating in further
protocol research, there is only one higher level dispatch algorithm.
This algorithm takes into account the internet level foreign address,
the protocol number, and the local port and foreign port from the higher
level protocol header. This algorithm can be implemented as a sort of
adjunct to the IP layer implementation, as long as no other higher level
protocols are to be implemented. (Actually, the above statement is only
partially true, in that the UDP dispatch function is subset of the TCP
dispatch function. UDP dispatch depends only protocol number and local
port. However, there is an occasion within TCP when this exact same
subset comes into play, when a process wishes to listen for a connection
from any foreign host. Thus, the range of mechanisms necessary to
support TCP dispatch are also sufficient to support precisely the UDP
requirement.)
原則として、すべての上位レベルプロトコルが異なる配達アルゴリズムを持つ
ことができます。この理由は下記に論じられます。しかしながら、今日実装されてい
るサービス提供に関係しているプロトコル、TCPとUDPで、配達アルゴリズムは
正確に同じで、そしてポートフィールドは正確にヘッダの同じ場所に位置しています。
それ故に、これ以上のプロトコル研究に参加することに興味を持たないなら、ただ1
つだけの上位レベル配達アルゴリズムがあります。このアルゴリズムはインターネッ
トレベルの外のアドレスと、プロトコル番号と、上位レベルヘッダのローカルと外の
ポートを考慮に入れます。このアルゴリズムは、他の上位レベルプロトコルが実装さ
れない限り、IPレイヤ実装の一種の付属物として実装することができます。(実際
に、上記の文は、UDP配達機能がTCP配達機能の下位グループであるという点で、
ただ部分的に本当です。UDP配達はプロトコル番号とローカルポートだけに依存し
ます。しかしながら、TCP内にこの正確に同じ下位グループが活動する機会があり
ます、プロセスが外のホストからの接続を待つときです。それで、TCP配達をサポー
トするために必要なメカニズムは同じく正確にUDP必要条件をサポートすることに
十分です。)
The decision to remove port level dispatching from IP to the higher
level protocol has been questioned by some implementors. It has been
argued that if all of the address structure were part of the IP layer,
then IP could do all of the packet dispatching function within the host,
which would lead to a simpler modularity. Three problems were
identified with this. First, not all protocol implementors could agree
on the size of the port identifier. TCP selected a fairly short port
identifier, 16 bits, to reduce header size. Other protocols being
designed, however, wanted a larger port identifier, perhaps 32 bits, so
that the port identifier, if properly selected, could be considered
probabilistically unique. Thus, constraining the port id to one
particular IP level mechanism would prevent certain fruitful lines of
research. Second, ports serve a special function in addition to
datagram delivery: certain port numbers are reserved to identify
particular services. Thus, TCP port 23 is the remote login service. If
ports were implemented at the IP level, then the assignment of well
known ports could not be done on a protocol basis, but would have to be
done in a centralized manner for all of the IP architecture. Third, IP
was designed with a very simple layering role: IP contained exactly
those functions that the gateways must understand. If the port idea had
been made a part of the IP layer, it would have suggested that gateways
needed to know about ports, which is not the case.
IPから上位レベルプロトコルまでの配達で、ポートを削除する決定はあ
る実装者で問題にされました。もしアドレス構造体のすべてがIP層の一部なら、
IPはホスト内ですべてのパケットの配達が可能で、より単純なモジュール性に
導くであろうと論じられました。3つの問題がこれと同一視されました。最初に、
すべてのプロトコル実装者がポート識別子の大きさについて合意することができ
たわけではありません。TCPはかなり短いポート識別子、16ビットを、ヘッ
ダサイズを減らすよう選びました。設計されている他のプロトコルは、しかしな
がら、より大きいポート識別子、多分32ビットを欲しました、それでポート識
別子は、もし正確に選択されるなら、確率的にユニークであると思うことができ
ました。それで、ポートIDを1つの特定のIPレベルメカニズムに限定するこ
とは研究可能性を妨げるでしょう。第二に、ポートがデータグラム配達のほかに
特別な機能を果たします:ある特定のポート番号が特定のサービスを識別するた
めに予約されます。それで、TCPポート23はリモートログインサービスです。
もしポートがIPレベルにおいて実装されたなら、機知ポートの割当てはプロト
コル基礎上ですることができず、IP体系のすべてのために中央集権化された方
法でされなければならないでしょう。第三に、IPが非常に単純なレイヤの役割
で設計されました:IPが正確にゲートウェイが理解しなくてはならない機能を
含んでいます。もしポートの考えがIP層の一部にされたなら、それはゲートウェ
イがポートについて知る必要があることを示唆しますが、このような場合はあり
ません。
There are, of course, other ways to avoid these problems. In
particular, the "well-known port" problem can be solved by devising a
second mechanism, distinct from port dispatching, to name well-known
ports. Several protocols have settled on the idea of including, in the
packet which sets up a connection to a particular service, a more
general service descriptor, such as a character string field. These
special packets, which are requesting connection to a particular
service, are routed on arrival to a special server, sometimes called a
"rendezvous server", which examines the service request, selects a
random port which is to be used for this instance of the service, and
then passes the packet along to the service itself to commence the
interaction.
もちろん、これらの問題を避ける他の方法があります。特に、「既知ポー
ト」問題は、既知ポートを指定するために、ポートの配達と異なる2番目のメカ
ニズムを考案することによって解くことができます。いくつかのプロトコルが、
文字列フィールドのような一般的なサービス記述子を、接続を準備するパケット
に含めるアイデアを採用しました。特定のサービスに接続を求めているこれらの
特別なパケットは、時々「ランデブーサーバ」と呼ばれる特別なサーバに送られ、
そしてサーバはサービスの要求を調べて、このサービスに実際に使われるはずで
ある任意のポートを選び、そして次に対話を開始するサービス自身にパケットを
伝え送ります。
For the internet architecture, this strategy had the serious flaw
that it presumed all protocols would fit into the same service paradigm:
an initial setup phase, which might contain a certain overhead such as
indirect routing through a rendezvous server, followed by the packets of
the interaction itself, which would flow directly to the process
providing the service. Unfortunately, not all high level protocols in
internet were expected to fit this model. The best example of this is
isolated datagram exchange using UDP. The simplest exchange in UDP is
one process sending a single datagram to another. Especially on a local
net, where the net related overhead is very low, this kind of simple
single datagram interchange can be extremely efficient, with very low
overhead in the hosts. However, since these individual packets would
not be part of an established connection, if IP supported a strategy
based on a rendezvous server and service descriptors, every isolated
datagram would have to be routed indirectly in the receiving host
through the rendezvous server, which would substantially increase the
overhead of processing, and every datagram would have to carry the full
service request field, which would increase the size of the packet
header.
インターネット体系で、この戦略はすべてのプロトコルが同じサービスパ
ラダイムに入ると仮定した重大な欠陥を持っていました:初期設定フェーズで、
これはランデブーサーバ経由の間接ルーティングのような何らかのオーバーヘッ
ドをもち、対話の続くパケットでサービスを供給するプロセスに直接流れます。
不幸にも、すべてのインターネットの上位レベルプロトコルがこのモデルに合う
ことを期待されたわけではありません。これの最も良い例はUDPを使う孤立デー
タグラム交換です。UDPでの最も単純な交換はひとつのデータグラムを送る1
つのプロセスです。特にローカルネットで、ネットに関連したオーバーヘッドが
非常に低時に、この種類の単純なひとつのデータグラム交換は、ホストで、非常
に効率的で、非常に低いコストです。しかしながら、これらの個別のパケットが
確立された接続の一部ではないであろうから、もしIPがランデブーサーバとサー
ビス記述子に基づいた作戦をサポートしたなら、すべての孤立データグラムがラ
ンデブーサーバを通る間接的経路を使用し、これは処理のコストを増やし、そし
てすべてのデータグラムが完全なサービス要求フィールドを運ばなければならな
いであろうから、パケットヘッダの大きさを増やすでしょう。
In general, if a network is intended for "virtual circuit service",
or things similar to that, then using a special high overhead mechanism
for circuit setup makes sense. However, current directions in research
are leading away from this class of protocol, so once again the
architecture was designed not to preclude alternative protocol
structures. The only rational position was that the particular
dispatching strategy used should be part of the higher level protocol
design, not the IP layer.
一般に、もしネットワークが「仮想回路サービス」、あるいはそれに類似
しているもののために意図されるなら、回路設定のために特別な高いオーバーヘッ
ドメカニズムを使うことは意味をなします。しかしながら、研究での現在の方向
は、この種のプロトコルから離れていっており、それで体系は代わりのプロトコ
ル構造体を妨げないよう意図されました。唯一の合理的な見解は使われた詳細を
対応付ける戦略がもっとレベルが高いプロトコルデザインの一部であるべきであ
り、IP層ではないということでした。
This same argument about circuit setup mechanisms also applies to
the design of the IP address structure. Many protocols do not transmit
a full address field as part of every packet, but rather transmit a
short identifier which is created as part of a circuit setup from source
to destination. If the full address needs to be carried in only the
first packet of a long exchange, then the overhead of carrying a very
long address field can easily be justified. Under these circumstances,
one can create truly extravagant address fields, which are capable of
extending to address almost any conceivable entity. However, this
strategy is useable only in a virtual circuit net, where the packets
being transmitted are part of a established sequence, otherwise this
large extravagant address must be transported on every packet. Since
Internet explicitly rejected this restriction on the architecture, it
was necessary to come up with an address field that was compact enough
to be sent in every datagram, but general enough to correctly route the
datagram through the catanet without a previous setup phase. The IP
address of 32 bits is the compromise that results. Clearly it requires
a substantial amount of shoehorning to address all of the interesting
places in the universe with only 32 bits. On the other hand, had the
address field become much bigger, IP would have been susceptible to
another criticism, which is that the header had grown unworkably large.
Again, the fundamental design decision was that the protocol be designed
in such a way that it supported research in new and different sorts of
protocol architectures.
この回路設定メカニズムについての同じ議論は同じくIPアドレス構造体
の設計に当てはまります。多くのプロトコルがすべてのパケットの一部として完
全なアドレスフィールドを伝達します、しかしソースから宛先までの回路設定の
一部として生成される短い識別子を伝達しません。もし完全なアドレスがただ長
い交換の最初のパケットでだけで運ばれる必要があるなら、非常に長いアドレス
フィールドを運ぶことのオーバーヘッドは容易に正当化できます。このような状
況下で、本当に贅沢なアドレスフィールドを作ることができ、そしてこれは想像
可能なほとんどのエンティティのアドレスのために拡大することができます。し
かしながら、この戦略は仮想回路ネット、伝達されているパケットが確立された
シーケンスの一部である場合にだけ有用です、さもなければこの大きい贅沢なア
ドレスはすべてのパケット上で送られなくてはなりません。インターネット体系
上で明示的にこの制限を拒絶したので、すべてのデータグラムで送られるらけの
小さなアドレスフィールドを思い付くことが必要でしたが、一般に前の設定フェー
ズなしで異種ネットを通して正確にデータグラムの経路を決めれば十分でした。
32ビットのIPアドレスは結果として生じた妥協です。明らかにただ32ビッ
トだけで宇宙で面白いものすべてを扱うには、実質的な量の靴直しを必要としま
す。他方、もしアドレスフィールドがずっとより大きくなっていたなら、IPは
もう1つの批判の可能性があったでしょう、それはヘッダが使い勝手が悪く大き
くなっていたということです。再び、基本的なデザイン決定はプロトコルが新し
く異なる種類のプロトコル体系の研究をサポートする方法で設計されるというこ
とでした。
There are some limited restrictions imposed by the IP design on the
port mechanism selected by the higher level process. In particular,
when a packet goes awry somewhere on the internet, the offending packet
is returned, along with an error indication, as part of an ICMP packet.
An ICMP packet returns only the IP layer, and the next 64 bits of the
original datagram. Thus, any higher level protocol which wishes to sort
out from which port a particular offending datagram came must make sure
that the port information is contained within the first 64 bits of the
next level header. This also means, in most cases, that it is possible
to imagine, as part of the IP layer, a port dispatch mechanism which
works by masking and matching on the first 64 bits of the incoming
higher level header.
もっと上位レベルプロセスによって選択されたポートメカニズム上にIP
デザインによって課されたある限定された制限があります。特に、パケットがイ
ンターネット上のどこかで変になる時、問題のパケットはICMPパケットの一
部として、エラー表示とともに、返されます。ICMPパケットが元のデータグ
ラムのIPレイヤと次の64ビットだけを返します。それで、どのポートから特
定の問題のデータグラムが来たかについて考ることを望む上位レベルプロトコル
が次レベルヘッダの64ビット内にポート情報を含めることを確実にしなければ
なりません。これは同じく、たいていの場合に、IP層の一部として、入ってく
る上位ヘッダの最初の64ビットを取り出して比較するポート識別メカニズムを
想像することが可能であることを意味します。