📄 rfc91.txt
字号:
Network Working Group George H. MealyRequest for Comments: 91 Harvard University December 27, 1970 A PROPOSED USER-USER PROTOCOLINTRODUCTION:There are many good reasons, and maybe one or two bad ones, for makingit appear that communication over the Network is only a special case ofinput/output -- at least as far as user programming is concerned. Thus,for instance, the Harvard approach toward implementing the HOST-HOSTprotocol and Network Control Program treats each link as a "logicaldevice" in PDP-10 terminology. Setting up a connection is similar tolocal device assignment, and communication over a link will make use ofthe standard system input/output UUO's. This makes it possible to sueexisting programs in conjunction with the Network without modification-- at least if other PDP-10's are being dealt with.This takes us only so far, however. The notion of a "logical device"does not exist on the PDP-10; it does on the IBM 360 (I am speaking hereat the level of the operating system -- user program interface).Furthermore, in the absence of a Network standard requiring fixedrepresentations for integers, reals, etc. (which I would oppose), anypair of user processes must arrive at a local agreement, and one or bothmust assume the burden of data conversion where necessary. Any standardprotocol should allow such agreements to be given expression and shouldaccommodate at least the minimum of control information that will allowsuch agreements to function in practice. Finally, we must note that theIMP-IMP and HOST-HOST protocols do not provide for a check that anaction requested by a user process is actually accomplished by the otherprocesses; this type of issue has always been regarded as subject totreatment at the USER-USER protocol level.This proposal is intended to face the above three types of issue only toa certain extent. I can best explain that extent by stating thecriteria I would use to judge any USER-USER protocol proposal: 1. The notion of a (logical) record should be present, and the notion of a message should be suppressed. (To a FORTRAN programmer, that which is written using one WRITE statement with no accompanying FORMAT is a record; to an OS/360 machine language programmer, PUT writes a record). [Page 1] 2. It should be possible to so implement the protocol in HOST systems and/or library routines that now existing user programs can access files anywhere in the Network without program modification. (Initially, at least, this ability must be restricted to HOST systems of the same type). 3. The protocol should be implementable (not necessarily implemented) in any HOST system at the SVC or UUO level. Specific knowledge of the characteristics of the other HOST involved should be unnecessary.It should be noted that the above imply that some user programs must beaware of the nature of the other HOST -- at least in each case where thesecond criterion fails. As we make progress in (or give up on) the caseswhere the failure now occurs, the burden of accommodating systemdifferences will shift toward implementation in protocols (i.e., theHOST systems) or, by default, in user programs.Quite clearly, any proposal initiated today should be suspect as to theextent to which it "solves" ultimate problems. How ambitious to be isstrictly a matter of taste. At this stage, I prefer to try somethingwhich I believe can be used by all of us (and, hence, is worth doing),goes a reasonable distance towards solving our short-range problems, iseasy to do, and offers hope of viability in the long range view. In thefollowing, I intend to describe the proposal itself with, I hope, propermotivational arguments for its pieces. I will then sketch the specificimplementation we at Harvard are making for the PDP-10 and describe howwe intend to apply it in the specific case of storage of files on otherPDP-10's in the Network.USER-USER PROTOCOL (PROPOSAL)The following protocol is intended to apply to the data bits in messagesbetween the end of the marking bits and the beginning of the paddingbits.The present IMP-IMP and HOST-HOST protocols are unaffected by thisproposal.The general principle is that each segment (this is not a technicalterm) of data is preceded by control information specifying its natureand extent. The basic scheme has been evolved from that used in the SOSbuffering system (see the papers in JACM, April 1959 and especially thatby O.R. Mock).Our point of view is that a link is a carrier of information. [Page 2]Information is carried in segments of a fixed maximum length calledmessages*.That this is so is an accident, from the user's point of view; when hewishes to transmit a contiguous stream of data, he will in general,segment it in a different (from the IMP-IMP or HOST-HOST protocol view)manner -- we will call his segment a record. It should be clear thatthis is entirely analogous between the notion of (physical) block and(logical) record. On the side, file storage systems also make use ofcontrol and status information; we will also.At the USER-USER protocol level, all information transmitted over thelink is a sequence of flags followed by (possibly null) data blocks.The general format will be: OPERATION COUNT DATAThe OPERATION field is always present and is four bits long. The COUNTfield, when present, gives the number of data bytes following in thedata block. The bytes size is set be the last preceding SIZE flag (inmost cases). The byte may be between zero and 255 bits long (Yes,Virginia, zero is zero even when you have a System/360). The OPERATIONfield and the COUNT field (when present) are called the flag and thedata bytes (when present) the data block. Flags followed by data blocks(even when null due to a zero count) are called block flags, and otherflags are called whyte* flags.It is to be noted that, since the SIZE flag sets the byte size for thefollowing blocks, byte size may be set at that "natural" for the sendingor for the receiving HOST, depending on local agreement between thesending and receiving processes. It is specifically required that a SIZEflag appear in each message prior to any block flag (except the ASCIIflag); the SIZE flag may be introduced on a default basis by theroutine(s) implementing the protocol and is intended partially as ameans of detecting certain classes of error.The COUNT field is 8 bits in length (except in the EOM flag, where it is16 bits long). The flags are as follows: [Page 3]Whyte Flags: 0 - NUL No operation (consider next flag) 1 - RS Record Separator (end of record) 2 - GS Group Separator (end of group) 3 - FS File Separator (end of file) 4 - ESC Escape to local convention for flags 5 - (reserved for later assignment) 6 - EOM N End of Message (M is total bit count) 7 - SIZE N Byte size is N bits 8 - IGNORE N Ignore following data bitsBlock Flags: 9 - SYS N N bytes of data for receiving HOST system10 - CONTROL N N bytes of control data follow11 - STATUS N N bytes of status data follow12 - LABEL N N bytes of identification data follow13 - KEY N N bytes of key data follow14 - ASCII N N (8-bit) bytes of ASCII data follow15 - BLOCK N N bytes of data followI have already mentioned the requirement for SIZE. Absence of the SIZEfloag in any message containing block flags (except ASCII) is a definiteerror. EOM is partially another error-checking device and partially adevice for bypassing the padding conundrum. A user program should neversee EOM on input; the user may write an EOM to force transmission. EOMdelimits the end of the useful information in the message and restatesthe total number of bits in the message, starting with the first bitfollowing the marking and ending with the last bit of the EOM countfield, to check possible loss of information. This is a check againsterrors in the IMP-HOST electrical interface and in the HOST mushyware.EOM must appear at the end of each messager, unless ESC has apeared.ESC is intended as a (hopefully) unused [a]scape hatch, for nonuse bythose installations and/or applications wishing to avoid using more thanfour bits of the USER-USER protocol on any link. For instance, it may bedesired to use a link as a bit stream, ignoring even message boundaries.If and when anarchists can achieve local agreement, more power to them!NUL and IGNORE are intedned to be space fillers, in case it is helpfulto make the first bit of the subsequent data block occur on a convenientaddress boundary. (An especially helpful HOST interrupt routine mighteven paste a combination of NUL and IGNORE over the marking bits whenreceiving a message -- in which case, their bit count should betransmitted on to the GET rountines to correct the EOM bit count check).The separator operations introduce the notions of logical record, group,and file. Specifically, there is no requirement that a record be [Page 4]contained entirely within a message or that only a single record becontained in a message! In addition, there is no requirement that onlyone file be transmitted during a connection. For instance, a user mightwish to use a link to transmit a collection of rountines, and then dosomething else with the link. By local agreement, then, a single routinemight consist of a cumber of records forming a group, the wholecollection might form a file, and the link might remain connected afterthe FS flag is received.The interpretation of the various block flags is similarly open to localagreement. The two flags intended to convey pure data are ASCII andBLOCK; the difference between them is only (as far as the protocol isconcerned) that the byte size is implicit for ASCII (8 bits) andexplicit for BLOCK (the count field of the next preceding SIZE flag).Beyond this, however, the semantic content of the block following ASCIIis governed by the current standards for ASCII; EBCDIC information maynot be transmitted in an ASCII block!!CONTROL and STATUS are intended for communication of control informationbetween user processes, and the interpretation of their accompanyingdata blocks is open to local agreement. Generically, CONTROL means "tryto do the following" and STATUS means "but I feel this way, doctor." ACONTROL flag will prompt a returned STATUS flag, sooner or later, ornever. LABEL is intended for use in identifying the following unit(s) ofdata, at the file or group level. Again, the specific interpretation isa matter of local agreement. KEY is intended to mimic the notion ofaddress or key -- this is at the record, data item, or even physicalstorage block level. For the familiar with PDP-10 system and/or OS/360,the following parallels are offered for guidance:USER-USER protocol OS/360 PDP-10CONTROL OPEN OPEN CLOSE CLOSELABEL DSCB File retrieval informationKEY KEY USERI/USETO argumentCONTROL READ IN/INPUT WRITE OUT/OUTPUT ALLOCATE ? ENTER OPEN ? LOOKUPSTATUS ? GETSTSThe "?" notations above indicate lack of a very direct parallel. It isworth noting that the OS/360 GET and PUT have direct parallels in anyimplementation of the USER-USER protocol that embodies the notion ofrecord; our implementation of the protocol will lead to introduction ofthis notion for all PDP-10 input/output involving disc and tape storage,as well as IMP communication. [Page 5]If I know the MULTICS terminology, I could extend the set of parallelsabove with more precision. Although my terminology has been drawn fromsystems with explicit input/output imperatives, I wish to emphasize thatthis setup in intended to handle control and data communication ingeneral; MULTICS is a system in which the classical distinction betweenexternal and internal storage is blurred (from the user's point of view)in a manner I wish it blurred in the USER-USER protocol. I offer SYSwith only slight trepidation. The general notion is that one should beable to communicate directly with a foreign HOST rather than via aforeign user process as its intermediary, SYS is like a UUO or SVC, butfor the foreign HOST's consumption rather than my HOST's. From theHOST's point of view, the problem in implementation is in establishing aprocess context record unconnected with any local user process. This,however, is strongly associated with our current LOGON conundrum. On thePDP-10, for instance, users are more or less identified with localteletype lines, and any link is not one of those! Hence, subterfuge isnecessary to let a foreign user log on. OS/360 is as (actually, more)perverse in its own way.The process of logging a foreign process onto my local system is not(except possibly for MULTICS) a simple matter of having a special (!!)user job present which is responsible for doing it. When and ifanything else is possible, the HOST must provide a system instruction(UUO or SVC or whatever) that gives the requisite information
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -