Porting PicoTCP WIP
This commit is contained in:
763
kernel/picotcp/RFC/rfc0814.txt
Normal file
763
kernel/picotcp/RFC/rfc0814.txt
Normal file
@ -0,0 +1,763 @@
|
||||
|
||||
RFC: 814
|
||||
|
||||
|
||||
|
||||
NAME, ADDRESSES, PORTS, AND ROUTES
|
||||
|
||||
David D. Clark
|
||||
MIT Laboratory for Computer Science
|
||||
Computer Systems and Communications Group
|
||||
July, 1982
|
||||
|
||||
|
||||
1. Introduction
|
||||
|
||||
|
||||
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.
|
||||
|
||||
|
||||
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.
|
||||
|
||||
2
|
||||
|
||||
|
||||
2. The Scope of the Problem
|
||||
|
||||
|
||||
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.
|
||||
|
||||
|
||||
3. Names
|
||||
|
||||
|
||||
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
|
||||
|
||||
3
|
||||
|
||||
|
||||
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.
|
||||
|
||||
|
||||
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
|
||||
|
||||
4
|
||||
|
||||
|
||||
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.
|
||||
|
||||
|
||||
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.
|
||||
|
||||
|
||||
4. Addresses
|
||||
|
||||
|
||||
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
|
||||
|
||||
5
|
||||
|
||||
|
||||
made, as there may be more than one gateway available on the immediately
|
||||
|
||||
attached network.
|
||||
|
||||
|
||||
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).
|
||||
|
||||
|
||||
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.
|
||||
|
||||
|
||||
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
|
||||
|
||||
6
|
||||
|
||||
|
||||
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.
|
||||
|
||||
|
||||
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.
|
||||
|
||||
|
||||
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
|
||||
|
||||
7
|
||||
|
||||
|
||||
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.
|
||||
|
||||
|
||||
5. Advanced Topics in Addressing and Routing
|
||||
|
||||
|
||||
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
|
||||
|
||||
8
|
||||
|
||||
|
||||
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.)
|
||||
|
||||
|
||||
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.
|
||||
|
||||
9
|
||||
|
||||
|
||||
6. Ports and Service Identifiers
|
||||
|
||||
|
||||
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.
|
||||
|
||||
|
||||
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.
|
||||
|
||||
|
||||
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
|
||||
|
||||
10
|
||||
|
||||
|
||||
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.
|
||||
|
||||
|
||||
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.)
|
||||
|
||||
|
||||
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,
|
||||
|
||||
11
|
||||
|
||||
|
||||
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.
|
||||
|
||||
|
||||
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
|
||||
|
||||
12
|
||||
|
||||
|
||||
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.
|
||||
|
||||
|
||||
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.
|
||||
|
||||
|
||||
In general, if a network is intended for "virtual circuit service",
|
||||
|
||||
13
|
||||
|
||||
|
||||
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.
|
||||
|
||||
|
||||
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
|
||||
|
||||
14
|
||||
|
||||
|
||||
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.
|
||||
|
||||
|
||||
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.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user