rfc333.txt

来自「RFC 的详细文档!」· 文本 代码 · 共 1,460 行 · 第 1/5 页

TXT
1,460
字号
   +-------------+-------------+
4  |  MESSAGE    |             |
   |   TYPE      |             |
   +-------------+             |
5  |        FROM PORT ID       |
   |                           |
   +-------------+-------------+
6  |  TABLE      | /////////// |
   |  POSITION   | /////////// |
   +-------------+-------------+
7  |  SOURCE     | RENDEZVOUS  |
   |   HOST      |   HOST      |
   +-------------+-------------+
8  |        BIT COUNT          |
   |                           |
   +-------------+-------------+
   |                           |
9  |           DATA            |
   //                         //
   |                           |
   +-------------+-------------+

         16-bit Host Format

   +-------------+
   |             |            ////////// = unused
   |             |            //////////
   +-------------+
       8 bits




Bressler, et al.            Experimentation                    [Page 11]

RFC 333          MESSAGE SWITCHING PROTOCOL EXPERIMENT          May 1972


   0             8            16            24            32     36
   +-------------+-------------+-------------+-------------+------+
0  | HOST/IMP    |   FOREIGN   |    LINK     | ////////////////// |
   |  FLAGS      |   HOST      |             | ////////////////// |
   +------+------+-------------+-------------+-------+-----+------+
1  | //// |        TO PORT ID                        |  MESSAGE   |
   | //// |                                          |   TYPE     |
   +------+------+-------------+-------------+-------------+------+
2  |               FROM PORT ID              |   TABLE     | //// |
   |                                         |   POSITION  | //// |
   +------+-------------+-------------+------+-------------+------+
3  | //// |   SOURCE    | RENDEZVOUS  |          BIT COUNT        |
   | //// |    HOST     |  HOST       |                           |
   +------+-------------+-------------+---------------------------+
   |                                                              |
4  |                                                              |
   //                          DATA                              //
   |                                                              |
   |                                                              |
   +-------------+-------------+-------------+-------------+------+

                         36-bit Host Format


   +-------------+-------------+-------------+-------------+
0  | HOST/IMP    |   FOREIGN   |    LINK     | /////////// |
   |  FLAGS      |   HOST      |             | /////////// |
   +-------------+-------------+-------------+-------------+
1  | /////////// |             TO PORT ID                  |
   |             |                                         |
   +-------------+-------------+-------------+-------------+
2  |  MESSAGE    |             FROM PORT ID                |
   |   TYPE      |                                         |
   +-------------+-------------+-------------+-------------+
3  |  TABLE      | /////////// |  SOURCE     | RENDEZVOUS  |
   |  POSITION   | /////////// |   HOST      |   HOST      |
   +-------------+-------------+-------------+-------------+
   |        BIT COUNT          |                           |
   |                           |                           |
   +-------------+-------------+                           |
   |                                                       |
   //                   DATA                              //
   |                                                       |
   +-------------+-------------+-------------+-------------+

                         32-bit Host Format





Bressler, et al.            Experimentation                    [Page 12]

RFC 333          MESSAGE SWITCHING PROTOCOL EXPERIMENT          May 1972


   The fields within the Host/IMP leader are already familiar to NCP
   programmers however, two points about these fields are worth
   mentioning.  First, the destination field originally contains the
   number of the rendezvous Host.  After rendezvous at a intermediate
   site, the destination field contains the source of the message
   rendezvous with.  Second, the link field for the MSP experiment can
   only contain link number 192-195.  We have not taken the time to
   figure out a sensible allocation of these four links among all the
   messages which might be sent using the MSP.  One alternative is to
   cycle over the links to increase the bandwidth of the "pipe" between
   any two Hosts. For the time being, until further consideration is
   given to this issue, we suggest each Host at a site using one
   (unique) link for all its communication.

   The message types we have to represent in the message type field are
   few now: we suggest message type 2 for SEND or OUT messages and
   message 3 for RECEIVE or IN messages.  Message type 4 is the FLUSH
   message, if FLUSH is used.

   The rendezvous Host field needs no comment.  Except that the field is
   unnecessary after the rendezvous has taken place and could then be
   used for something else.

   The bit count is a count of data bits in an OUT message or the size
   of the input buffer (not including the header) in an IN message.
   Thus the sender process can tell from the IN message bit count when
   it receives the IN message how much of the data in the OUT message
   was accepted by the receiver process and can use this knowledge to
   retransmit the remainder of the message if so desired.  After the
   rendezvous, we recommend that all of the data in the message be sent
   on the source of the IN message even if the OUT bit count was greater
   than the IN bit count.  Thus, at the receiver Host the monitor has
   the option (if it wants to take it) of discarding the message for
   being too long, sending the number of bits the receiver process has
   done an IN for into the receiver process and discarding the rest, or
   queuing the rest of the bits and somehow notify the receiver process
   that there are more bits which the receiver process can ask for.

   The to- and from-port-id fields are 24-bit numbers.  This size was
   chosen to help the TIPs.  The first eight bits of a port Id should be
   the number of the Host at which this port id was created.  Note well,
   that this is not necessarily the Host at which the port is being
   used.  This is necessary since rendezvous take place at intermediate
   sites and because ports may move from site to site.  We suggest that
   all port ids with the first eight bits all zero be reserved for
   network-wide use.  In particular, a port id with all 24 bits zero
   will be used to mean "ANY".  This gives us the options of:




Bressler, et al.            Experimentation                    [Page 13]

RFC 333          MESSAGE SWITCHING PROTOCOL EXPERIMENT          May 1972


            RECEIVE from ANY to SPECIFIC

            RECEIVE from SPECIFIC to SPECIFIC

            SEND from SPECIFIC to ANY

       and  SEND from SPECIFIC to SPECIFIC

   Examples of the use of these options will be given below.

   The other options (RECEIVE to ANY) and (SEND from ANY) we feel are
   kind of useless but would not prohibit them.  We believe that in the
   absence of explicit specification of rendezvous Host, the use of an
   ANY port id in the user's system call should affect the default
   rendezvous site as follows:

      RECEIVE from ANY--rendezvous in receiver

      RECEIVE from SPECIFIC--rendezvous in sender

      SEND to ANY--rendezvous in sender

      SEND to SPECIFIC--rendezvous in sender

   The less significant 16 bits of the id can be used however a Host
   wants to.  For instance, eight bits might be used as a process id and
   eight bits might be used as a channel specification within the
   specified process.  We suggest that each Host reserve the port ids
   with the middle eight bits all zero for special uses as well known
   ports.

   The table position field is included to help prevent costly table
   searches at interrupt level.  Hosts sending INs and OUTs, put in the
   table position field the rendezvous table position of the SEND or
   RECEIVE associated with the IN or OUT.  At an intermediate Host
   rendezvous, the table position fields in the matching IN and OUT are
   swapped so that when the messages arrive at the opposite end, the
   matching SEND and RECEIVE can be found quickly.  The MSP must do the
   swap at the rendezvous, but of course the MSPs need not fill in the
   table position field when first transmitting an IN or OUT in which
   case the information arriving in an IN or OUT will be meaningless.
   The general algorithm, then, is to check the table position as
   specified in this field and if that fails, search the whole table.

   The source field is filled in INs and OUTs by the MSP which
   originally sends these messages.  At the rendezvous the source of
   each message is preserved in the message being forwarded to the final
   Host.  When an IN or OUT arrives at a process, the process can use



Bressler, et al.            Experimentation                    [Page 14]

RFC 333          MESSAGE SWITCHING PROTOCOL EXPERIMENT          May 1972


   the source information to update its understanding of the rendezvous
   Host (e.g., when the destination Host and rendezvous Host are
   different).


EXAMPLES

The typical example.

   We envision communication normally taking place using specifications
   to and from ports and rendezvous at the sender.  For instance, the
   TIP would probably send to other Hosts using this method and would
   certainly receive from other Host until the TIP asks for it.  In this
   "normal" method a monitor could even look at the bit count in the
   arriving IN-message, use that as an allocation and then simulate an
   OUT-message of the exact correct length.

The logging example

   Consider an example of SEND to SPECIFIC and RECEIVE from ANY with the
   rendezvous at the receiver.  This method might be used by some
   logging receiver process with a well-known to-port.  For instance, a
   measurements program to which statistics are sent from many processes
   throughout the net.

The program library example

   Suppose within a given time-sharing system there is a particular
   library routine which is available for use by any process in the
   network.  The library process has a RECEIVE from ANY always pending
   at a well-known port.  Eventually, some process sends a message to
   the library process' well-known-port.  This message includes the data
   to be processed, a port to use for sending the answer, and the money.
   The library process takes some of the money and sends it to the
   well-known port of the accounting process which itself has a RECEIVE
   from ANY pending.  The library process then processes the data and
   sends the answer back to the process which requested the service
   using a SEND to SPECIFIC message which rendezvous at the destination
   where there is already a RECEIVE from SPECIFIC pending.  Of course,
   in this message besides the answer, any change the requesting process
   has coming is returned.

A comment

   As can be seen from our examples, we think rendezvousing at an
   intermediate Host will seldom be done as the chief benefit of this
   comes when it is desirable to move a port (see reference 4 for a
   discussion of this).  We would like to see all Hosts provide some



Bressler, et al.            Experimentation                    [Page 15]

RFC 333          MESSAGE SWITCHING PROTOCOL EXPERIMENT          May 1972


   (meager) amount of buffering for this purpose but would not require
   it.  It shouldn't be too painful to provide a little of this kind of
   buffering-especially since a Host can throw away any message it can't
   handle.

   (THIS PAGE WILL BE REPLACED WITH A BETTER DESCRIPTION OF TELNET UNDER
   MSP IN A FEW DAYS--DCW)

TELNET

   Let us postulate a pair of Telnet programs that maintain two
   bidirectional communication paths, one for data and one for control.
   Let us also assume, for convenience that the port IDs are as follows:

      If the WRITE-CONTROL-ID is N, then --

         READ-CONTROL-ID=N+1,

         WRITE-DATA=N+2,

         READ-DATA=N+3.

   The initial state is the server Telnet sitting with a READ-FROM-ANY
   pending.

   The user Telnet now issues a SEND-TO-SPECIFIC with the data field
   containing the PORT-ID of the SERVER's WRITE-CONTROL-ID. This message
   is sent from the user-Telnet's WRITE-CONTROL-ID.

   Thus all port IDs are specified by the user Telnet, so, if desired,

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?