RFC 740
NETRJS Protocol
RFC 740 is the NETRJS Protocol π by R. Braden at UCLA-CCN, dated 22 November 1977, NIC 42423 (the header also says RTB 42423, 22 Nov 77). It's part of the Network Working Group series and it obsoletes RFC 189 and RFC 599 π This is part 1 of 4, so more is coming bestie π«Ά
A. Introduction β¨
okay so NETRJS is a private protocol for remote job entry service π₯οΈ The UCLA Campus Computing Network (CCN) made it and used it for batch job submission to an IBM 360 Model 91. CCN's NETRJS server lets a remote user, or a daemon process working for a user, reach CCN's RJS ("Remote Job Service") subsystem. RJS gives remote job entry to real remote batch (card reader/line printer) terminals over direct communications lines, and also over the ARPANET πΈ
a batch user at a remote host needs a NETRJS user process to talk to the NETRJS server at the batch host. an active NETRJS user process pretends to be a "Virtual Remote Batch Terminal", or "VRBT" π¦
a VRBT can have virtual card readers, printers, and punches. every VRBT also has a virtual remote operator console π with a virtual card reader, a Network user can send a stream of card images with one or more batch jobs, JCL ("job control language") and all, to the batch server host. the NETRJS server spools those jobs into the batch system to run by priority. NETRJS then sends the print and/or punch output images back to the virtual printer and/or card punch of the VRBT that submitted the job. the batch user can wait for output, or sign off and sign on again later to pick it up π
to start a NETRJS session, the user process has to run a standard ICP to a fixed socket at the server. that sets up a full-duplex Telnet connection for the virtual remote operator console, so the VRBT can sign on to RJS β¨ then the console is used to send commands to NETRJS and to get status, confirmation, and error messages from the server. the most important remote operator commands are summarized in Appendix D π
different VRBTs are told apart by 8-character terminal ids, which the server site assigns to individual batch users or user groups π§
B. Connections and Protocols π
the protocol uses up to five connections between the user and server processes. the operator console uses one full-duplex Telnet connection. the data transfer streams for the virtual card reader, printer, and punch each use their own simplex connection, under a data transfer protocol defined in Appendix A. this doc calls one of those simplex data transfer connections a "channel", and calls a connection "input" or "output" based on the server's point of view π¦
a channel only needs to be open while it's in use, and different channels can be used one after another or all at once. CCN's NETRJS server supports running a virtual card reader, a virtual printer, and a virtual punch at the same time (on top of the operator console) on the same VRBT process π the NETRJS protocol could easily be extended to any number of simultaneously-operating virtual card readers, printers, and punches π
the NETRJS server plays the passive role when it comes to opening the data channels. the server only "listens" for an RFC from the user process π NETRJS uses an 8-bit byte size on all data channels π
some NETRJS user processes are daemons running in the background to submit jobs from a list of user requests π€ others are interactive, run directly under terminal control by remote users. in the interactive case, the VRBT process usually splits the user's terminal between NETRJS (acting as the remote operator console) and local VRBT commands. those local commands let the user pick the files holding job streams to send to the server, and pick the files that will receive job output from the server π other local commands can tell the VRBT to open data transfer channels to the NETRJS server, or to close them to free buffer space or abort transmission π
the user process gets to choose one of three ICP sockets to set the VRBT's character set: ASCII-68, ASCII-63, or EBCDIC π the server translates the data on the card reader and printer channels to match. (in CCN's implementation of NETRJS, an EBCDIC VRBT sends and receives "transparent" streams of 8-bit bytes with no translation, since CCN is an EBCDIC installation π) the punch stream is always transparent, outputting "binary decks" of 80-byte records untranslated. the operator console connections always use Network ASCII, as defined by the Telnet protocol β¨
NETRJS does data compression too, swapping repeated blanks or other characters for repeat counts πΈ but when the terminal id is assigned, a particular network VRBT can be set to use no data compression. in that case NETRJS just truncates trailing blanks and sends records in a simple "op code-length-data" form, called "truncated format" (see Appendix A) π
C. Starting and Terminating a Session πͺ
the remote user connects to the NETRJS server by running an ICP to contact socket 71 (decimal) for EBCDIC, socket 73 (decimal) for ASCII-68, or socket 75 (decimal) for ASCII-63. a successful ICP gives a pair of connections, and those are the NETRJS operator console connections. NETRJS sends a READY message over the operator output connection π«Ά
the user (process) now has to enter a valid signon command, SIGNON terminal-id, through the virtual remote operator console. RJS normally acknowledges the signon with a console message. but if there's no NETRJS server port free, NETRJS says no by closing both operator connections π if the user doesn't enter a valid signon within 3 minutes, NETRJS closes the operator connections too β° and if the VRBT tries to open data transfer channels before the signon is accepted, those channels get refused, with an error message sent to the VRBT operator console π
ββοΈ
say S is the even number sent in the ICP. then the NETRJS connections have sockets at the server with a fixed relation to S, shown in this table π
Channel Server Socket User Socket
------- ------------- -----------
Remote Operator Console Input S U + 3 Telnet
Remote Operator Console Output S + 1 U + 2 Telnet
Data Transfer - Card Reader #1 S + 2 any odd number
Data Transfer - Printer #1 S + 3 any even number
Data Transfer - Punch #1 S + 5 any even number
once the VRBT has a valid signon, it can open data transfer channels and start input and output operations, as the following sections explain π to end the session, the VRBT can close all connections. or it can send a SIGNOFF command through the virtual remote operator console. when NETRJS gets a SIGNOFF, it waits until the current job output streams are finished, then ends the session itself by closing all connections π
D. Input Operations π₯
a job stream for the NETRJS server is a series of logical records, and each one is a card image of at most 80 characters π the user can send a "stack" of jobs one after another through the card reader channel, with no end-of-job marker between them. NETRJS can parse the JCL well enough to spot where each job begins π§
to submit a batch job or a stack of jobs, the user process first has to open the card reader channel by issuing an Init for foreign socket S+2 and the right local socket. NETRJS is listening on socket S+2, and it sends back an RTS command to open the channel. once the channel is open, the user can start sending the job stream using the protocol defined in Appendix A. for each job that's spooled successfully, NETRJS sends a confirming message to the remote operator console β
at the end of the job stack, the user process must send an End-of-Data transaction to start processing the last job. then NETRJS closes the channel (so it isn't holding buffer space for no reason) π§Ή at any point during the session, the user process can re-open the card reader channel and send another job stack. it can also end the session and sign on later to get the output π
if the user process leaves the channel open for 5 minutes without sending any bits, the server aborts (closes) the channel β³ the user process can abort the card reader channel any time by closing it. NETRJS then throws away the last partially spooled job ποΈ if NETRJS hits an error (like a transaction sequence number error or a dropped bit), it aborts the channel by closing it early, and it also tells the user process that the job was discarded. that's how the race between End-of-Data and aborting gets sorted out π the user process should retransmit only the jobs in the stack that haven't been completely spooled π
β οΈ if the user's process, NCP, or host, or the Network itself fails during input, RJS throws away the job being transmitted. a message telling the user that this job was discarded gets made and sent to them the next time they sign on π but jobs whose receipt was acknowledged on the operator's console are not affected by the failure, and the server still runs them π«Ά
E. Output Operations π¦
The VRBT MAY wait to set up a virtual printer or punch and open its channel until a STATUS message from NETRJS says output is ready π. Or it MAY leave the output channel(s) open for the whole session, ready to catch output the moment it shows up πΈ. The VRBT can also pick which of several available jobs gets sent back, just by typing the right operator commands π―.
To be ready for printer (or punch) output from its jobs, the VRBT sends an Init to foreign socket S+3 for printer output or S+5 for punch output, respectively. NETRJS is listening on those sockets and SHOULD immediately return an STR β¨. Hmm, it's possible NETRJS will say no because of a buffer shortage, and then it returns a CLS instead. If that happens, just try again later π«Ά.
When NETRJS has job output for a particular virtual terminal and an open output channel to go with it, it sends the output as a series of logical records using the protocol in Appendix A π¦. The first record is the job name (8 characters), then a comma, then the ID string from the JOB card (if there is one). In the printer stream, the first column of every record after the first is an ASA carriage control character (see Appendix C) π¨οΈ. A virtual printer in NETRJS has 254 columns, not counting carriage control, so NETRJS sends up to 255 characters of a logical record it finds in a SYSOUT data set π. If the user wants to reject or fold records longer than some smaller record size, they can do that in their VRBT process π .
NETRJS sends an End-of-Data transaction and then closes an output channel at the end of the output for each complete batch job. After that, the remote site MUST send a new RFC to start output for another job π. This gives the remote site a chance to allocate a new file for each job without breaking up the output within a job π§.
If the batch user wants to cancel (or backspace or defer) the output of a particular job, they can enter the right NETRJS commands on the operator input channel (see Appendix D) π.
If NETRJS runs into a permanent I/O error while reading the disk data set, it tells the user through their console, skips forward to the next set of system messages or SYSOUT data set in the same job, and keeps going π οΈ. If the user's process stops accepting bits for 5 minutes, the server aborts the channel β°. No matter what, the user gets a notice that output transfer has ended for each job, through a remote console message π£.
If the user spots an error in the stream, they can send a Backspace (BSP) command from their console to repeat the last "page" of output π. They can also send a Restart (RST) command to repeat from the last SYSOUT data set or from the beginning of the job π. Or they can abort the channel by closing their socket πͺ. If they abort the channel, NETRJS simulates a Backspace command, and when the user reopens the channel, the job starts sending again from an earlier point in the same data set π¬. This still works even if the user ends the current session first and reopens the channel in a later session, because RJS saves the state of every incomplete output stream πΎ. Before reopening the channel, though, they can defer this job for later output, restart it at the beginning, or cancel its output (see Appendix D) π« . Heads up: aborting the channel only does anything if NETRJS hasn't sent the End-of-Data transaction yet β οΈ.
If the user's process, NCP, host, or the Network itself fails during an output operation, NETRJS acts as if the channel was aborted and the user signed off π±. NETRJS only discards a job's output after it gets the RFNM from the last data transfer message (the one containing an End-of-Data) π¬. In no case SHOULD a NETRJS user lose output from a batch job π.
APPENDIX A: Data Transfer Protocol in NETRJS π
1. Introduction
The records in the data transfer channels (for virtual card reader, printer, and punch) are usually grouped into transactions, and each transaction comes after a header π. The transaction header has a sequence number and the length of the transaction π’. Network byte size MUST be 8 bits in these data streams π.
A transaction is the unit of buffering inside the server software, and it's capped at 880 8-bit bytes π§±. Transactions can be as short as one record, but sites that care about efficiency SHOULD send transactions as close as possible to the 880 byte limit ποΈ.
Logical messages and physical message boundaries have no required relationship with transactions. The NCP can split a transaction into physical messages wherever it likes πͺ. The CCN server starts each transaction at the beginning of a new physical message, but that isn't a requirement of the protocol π.
Every logical record in a transaction starts with an "op code" byte that holds the channel identification, so its value is unique to each channel but stays the same within a channel π. This gives the receiver an easy way to check bit-synchronization, and it also leaves room for a future extension to true "multi-leaving" (multiplexing all channels within one connection in each direction) π.
The only transmission error checks in the current NETRJS protocol are (1) the "op code" byte, to verify bit synchronization, and (2) the transaction sequence number π. Under the NETRJS protocol, a data transfer error MUST abort the entire transmission, and there is no provision for restart π.
2. Meta-Notation
The NETRJS data transfer protocol is described using a formal notation derived from the one proposed in RFC 31 by Bobrow and Sutherland π§ . The notation is a set of productions for bit string variables. Each variable name for a fixed length field is followed by its length in bits, like SEQNUMB(16). Numbers in quotes are decimal, unless a leading X says they're hex. Each hex digit is 4 bits, so hex numbers don't show the length explicitly. For example, '255'(8) and X'FF' both represent a string of 8 one bits π.
The meta-syntactic operators are:
| :alternative string
[ ] :optional string
( ) :grouping
+ :catenation of bit strings
The numerical value of a bit string (read as an integer) is written as a lower case identifier in front of the string expression, separated by a colon. For example, in "i:FIELD(8)", i stands for the numeric value of the 8 bit string FIELD π’.
Last one: Bobrow and Sutherland's symbol for repeating a sub-string is (STRING-EXPRESSION = n). That means n occurrences of STRING-EXPRESSION, catenated together implicitly. Here, any n greater than or equal to 0 is assumed, unless n is explicitly restricted π.
3. Protocol Definition
Here's the first production, STREAM π:
STREAM ::= (TRANSACTION = n) + [END-OF-DATA]
So STREAM, the whole sequence of data on one open channel, is n TRANSACTIONS followed by an END-OF-DATA marker. The marker is left out if the sender aborts the channel π«.
TRANSACTION ::= THEAD(72) + (RECORD = r) + ('0'(1) = f)
A transaction is a 72 bit header, r records, and f filler bits. It can't go over 880*8 bits π.
THEAD ::= X'FF'+f:FILLER(8)+SEQNUMB(16)+LENGTH(32)+X'00'
Transactions are numbered in order using the SEQNUMB field, starting at 0 for the first transaction after the channel is (re)opened π’. The 32 bit LENGTH field is the total length in bits of the r RECORDs that follow. For convenience, the using site can add f extra filler bits at the end of the transaction to hit a convenient word boundary on its machine. The value of f is sent in the FILLER field of THEAD π§©.
RECORD ::= COMPRESSED | TRUNCATED
RJS accepts a mix of COMPRESSED and TRUNCATED RECORDs in an input stream π₯°. In the printer and punch streams going to a given VRBT, RJS sends just one of the two formats. The choice is made for each terminal id π―.
COMPRESSED ::= '2'(2) + DEVID(6) + (STRING = p) + '0'(8)
STRING ::= ('6'(3) + i:DUPCOUNT(5)) |
This form represents a string of i consecutive blanks πͺΆ.
('7'(3) + i:DUPCOUNT(5) + TEXTBYTE(8)) |
This form represents a string of i consecutive duplicates of TEXTBYTE π―.
('2'(2) + j:LENGTH(6) + (TEXTBYTE(8) = j))
This form represents a string of j characters π¬.
TRUNCATED ::= '3'(2) + DEVID(6) + n:COUNT(8) + (TEXTBYTE(8)=n)
DEVID(6) ::= DEVNO(3) + t:DEVTYPE(3)
DEVID identifies a specific virtual device, which means it identifies a channel π€οΈ. DEVTYPE says what kind of device it is, like this π:
t = 1: Output to remote operator console
2: Input from remote operator console
3: Input from card reader
4: Output to printer
5: Output to card punch
6,7: Unused
DEVNO identifies the particular device of type t at this remote site. Right now, only DEVNO = 0 is possible π«§.
END-OF-DATA ::=X'FE'
This marks the end of a job's output (or the end of a job stack, for input) π.
APPENDIX B: Telnet for VRBT Operator Console π
The remote operator console connections use the ASCII Telnet protocol. Here's how it works π»:
- Three EBCDIC graphics don't have an ASCII equivalent, so they get a one-to-one character mapping, shown below π:
ASCII in Telnet | NETRJS
----------------------------------------------------
broken vertical bar | solid vertical bar
tilde | not sign
back slash | cent sign
- Telnet controls get ignored π.
- If an operator console input line goes over 133 characters (not counting CR LF), NETRJS truncates it βοΈ.
- NETRJS accepts BS (Control-H) to delete a character, and CAN (Control-X) to delete the current line ποΈ. The sequence CR LF ends each input and output line. HT (Control-I) gets translated to a single space π«§. ETX (Control-C) ends (aborts) the session π. All other ASCII control characters get ignored π.
- NETRJS turns the six ASCII graphics that have no EBCDIC equivalent into a question mark ("?") on input β.
APPENDIX C: Carriage Control π
The carriage control characters that NETRJS sends in a printer channel follow IBM's extended USASI code. The table below shows what each one does π¨οΈ:
CODE ACTION BEFORE WRITING RECORD
---- ----------------------------
Blank Space one line before printing
0 Space two lines before printing
- Space three lines before printing
+ Suppress space before printing
1 Skip to channel 1
2 Skip to channel 2
3 Skip to channel 3
4 Skip to channel 4
5 Skip to channel 5
6 Skip to channel 6
7 Skip to channel 7
8 Skip to channel 8
9 Skip to channel 9
A Skip to channel 10
B Skip to channel 11
C Skip to channel 12
APPENDIX D β¨
okay so this section is basically a cheat sheet for the RJS Operator Commands π it gives a quick overview, but if you want the full form and parameter specs, go check out references 2 and 3 π
Terminal Control and Information Commands
SIGNON: literally the first command of a session. It identifies the VRBT by giving its terminal id πSIGNOFF: the last command of a session. RJS waits for any data transfer in progress to finish, then closes all connections πͺSTATUS: outputs a complete list (or a summary) of all jobs in the system for this VRBT on the remote operator console, with an indication of their processing status in the batch host πALERT: outputs an"Alert"message on the remote operator console, if there is one from the computer operator π¨ The Alert message also gets sent automatically when the user does aSIGNON, or whenever the message changes πMSG: sends a message to the computer operator or to any other RJS terminal (real or virtual) π A message from the computer operator or another RJS terminal pops up on the remote operator console automatically πΈ
Job Control and Routing Commands
Under CCN's job management system, the default destination for output is the input source π¦ So a job submitted under a given VRBT gets sent back to that VRBT (same terminal id), unless the user's JCL overrides the default destination π
RJS puts print and punch output for a particular remote terminal into either an Active Queue or a Deferred Queue. When the user opens their print or punch output channel, RJS immediately starts sending job output from the Active Queue, and keeps going until that queue is empty πββοΈ Deferred Queue output is different. It has to be called for by job name (using a RESET command from the remote operator) before RJS will send it π Whether a job's output lands in Active or Deferred depends on the deferral status of the VRBT when the job is entered. That status gets set to Active when the user signs on, but the SET command can change it π
SET: lets the remote user change certain properties of their VRBT for the duration of the current session β¨- (a) May change the default output destination to be another (real or virtual) RJS terminal or the central facility.
- (b) May change the deferral status of the VRBT.
DEFER: moves the print and punch output for a specified job or set of jobs from the Active Queue to the Deferred Queue. If the job's output is being transmitted over a channel right now, RJS aborts the channel and saves the current output location before moving the job π A laterRESETcommand will return it to the Active Queue with an implied Backspace (BSP) πRESET: moves specified job(s) from Deferred to Active Queue so they can be sent to the user. A specific list of job names, or all jobs, can be moved with oneRESETcommand π§ΊROUTE: re-routes the output of specified jobs (or all jobs) waiting in the Active and Deferred Queues for the VRBT πΊοΈ The new destination can be any other RJS terminal or the central facility π’ABORT: cancels a job which was successfully submitted and is awaiting execution, or is currently executing π
Output Stream Control Commands
BSP(BACKSPACE): "backspaces" the output stream within the current sysout data set. The actual amount backspaced depends on sysout blocking, but it's roughly equivalent to a page on the line printer πCAN(CANCEL):- (a) On an output channel,
CANcauses the rest of the output in the sysout data set currently being transmitted to be omitted. Alternatively, it may omit the rest of the sysout data sets for the job currently being transmitted; however, the remaining system and accounting messages will still be sent. - (b) On an input channel,
CANcauses RJS to ignore the job currently being read. However, the channel is not aborted as a result, and RJS will keep reading in jobs on the channel π₯ - (c)
CANcan delete all sysout data sets for specified job(s) waiting in the Active or Deferred Queue ποΈ
- (a) On an output channel,
RST(RESTART):- (a) Restarts a specified output stream at the beginning of the current sysout data set or, optionally, at the beginning of the job.
- (b) Marks as restarted specified job(s) whose transmission was earlier interrupted by system failure or user action (e.g.,
DEFERcommand or aborting the channel). When RJS transmits these jobs again, it will start at the beginning of the partially transmitted sysout data set or, optionally, at the beginning of the job. This function may be applied to jobs in either the Active or the Deferred Queue; however, if the job was in the Deferred Queue,RSTalso moves it to the Active Queue. If the job was never transmitted,RSThas no effect other than this queue movement. π
REPEAT: sends additional copies of the output of specified jobs πEAM: echoes the card reader stream back in the printer and/or punch stream π
APPENDIX E π
When you define a brand-new NETRJS virtual terminal, you get some options to pick from. They're listed below π
- Truncated/Compressed Data Format: a VRBT may use either the truncated data format (default) or the compressed format for printer and punch output. Check out Reference 9 for the virtues of compression ποΈ
- Automatic Coldstart Job Resubmission: if
"R"(Restart) is specified in the accounting field on the JOB card and this option is chosen, RJS will automatically resubmit the job from the beginning if the server operating system gets "coldstarted" before all of the job's output has come back π Otherwise, the job will be lost and must be resubmitted from the remote terminal in case of a coldstart π - Automatic Output RESTART: with this option, printer output that's interrupted by a broken connection always starts over at the beginning. Without it, the output is backspaced approximately one page when restarted, unless the user forces the output to start over from the beginning with a
RESTARTcommand when the printer channel is re-opened and before printing begins π¨οΈ - Password Protection: this option lets a password be supplied when a terminal is signed on, which prevents unauthorized use of the terminal ID π
- Suppression of Punch Separator and Large Letters.: this option suppresses both the separator cards RJS normally puts in front of each punched output deck, and the separator pages on printed output that contain the job name in large block letters. These separators are a handy operational aid when output goes to a real printer or punch, but they're generally undesirable for an ARPA user who's saving the output in a file for on-line examination ποΈ
APPENDIX F π
Character translation time! A VRBT declares its character set for job input and output by the initial connection socket it chooses. It can be ASCII-68, ASCII-63, or EBCDIC π€ The ASCII-63 mapping was added to NETRJS at the request of users whose terminals have keyboards like the ones on the model 33 Teletype β¨οΈ
Since CCN operates an EBCDIC machine, its NETRJS server translates ASCII input to EBCDIC and translates printer output back to ASCII π Here's how that translation works π
For ASCII-68, these rules apply:
- There is a one-to-one mapping between the three ASCII characters broken vertical bar, tilde, and back slash (which aren't in EBCDIC) and the three EBCDIC characters vertical bar, not sign, and cent sign (respectively), which aren't in ASCII.
- The other six ASCII graphics not in EBCDIC are translated on input to unused EBCDIC codes, shown in the table below.
- The ASCII control
DC4is mapped to and from the EBCDIC controlTM. - The other EBCDIC characters not in ASCII are mapped in the printer stream to the ASCII question mark.
For ASCII-63, the same rules apply, except that the ASCII-63 codes X'60' and X'7B' - X'7E' are mapped as in the following table.
EBCDIC | ASCII-68 VRBT | ASCII-63 VRBT
---------------------------------------------------------------
vertical bar X'4F' | vertical bar X'7C' | open bracket X'5B'
not sign X'5F' | tilde X'7E' | close bracket X'5D'
cent sign X'4A' | back slash X'5C' | back slash X'5C'
underscore X'6D' | underscore X'5F' | left arrow X'5F'
. X'71' | up arrow X'5E' | up arrow X'5E'
open bracket X'AD' | open bracket X'5B' | . X'7C'
close bracket X'BD' | close bracket X'5D' | . X'7E'
. X'8B' | open brace X'7B' | . X'7B'
. X'9B' | close brace X'7D' | . X'7D'
. X'79' | accent X'60' | . X'60'
APPENDIX G π
REFERENCES β¨
- "Interim NETRJS Specifications", R. T. Braden. RFC #189: NIC #7133, July 15, 1971.
okay so this is the basic system programmer's definition doc π the proposed changes mentioned on the first page of RFC #189 never got implemented, bc the DTP that was super in vogue back then became obsolete π
- "NETRJS Remote Operator Commands", R. T. Braden. NIC #7182, August 9, 1971
this one + references 3 and 8 are the remote operator (aka user) command language for NETRJS π they're basically the core user docs for NETRJS at CCN, so main character energy π
- "Implementation of a Remote Job Service", V. Martin and T. W. Springer. NIC #7183, July, 1971.
- "Remote Job Entry to CCN via UCLA Sigma 7; A scenario", UCLA/CCN. NIC #7748, November 15, 1971.
this one described the first NETRJS user implementation on a server host π§ it's no longer of general interest tho, so we're moving on bestie
- "Using Network Remote Job Entry", E. F. Harslem. RFC #307: NIC #9258, February 24, 1972.
ngl this one is out of date π but it gives you the general vibe of the Tenex NETRJS user process "RJS" π¦
- "EBCDIC/ASCII Mapping for Network RJS", R. T. Braden. RFC #338: NIC #9931, May 17, 1972.
the ASCII-63 mapping in here is no longer correct π but CCN's standard ASCII-68/EBCDIC mapping is described correctly, and that info is accurately covered in Appendix F of the current document π«Ά
- "NETRJT--Remote Job Service Protocol for TIP's", R. T. Braden. RFC #283: NIC 38165, December 20, 1971.
this was an attempt to define an rje protocol to handle TIPs πΈ NETRJT never got implemented, but a lot of its features ended up in the current Network standard RJE protocol, which is so iconic β¨
- "CCN NETRJS Server Messages to Remote User", R. T. Braden. NIC #20268, November 26, 1973.
- "FTP Data Compression", R. T. Braden. RFC #468: NIC #14742, March 8, 1973.
- "Update on NETRJS", R. T. Braden. RFC #599: NIC #20854, December 13, 1973.
this one updated reference 1, and the current document combines the two π
- "Network Remote Job Entry -- NETRJS", G. Hicks. RFC #325: NIC 9632, April 6, 1972.
- "CCNRJS: Remote Job Entry between Tenex and UCLA-CCN", D. Crocker. NUTS Note 22,
[ISI]<DOCUMENTATION>CCNRJS.DOC, March 5, 1975. - "Remote Job Service at UCSB", M. Krilanovich. RFC #477: NIC #14992, May 23, 1973.
π¦ where this page comes from
- ietf: rfc740 1977-11
- π girlified by claude-haiku-5-5 on : a language model's rewrite of the original, under its terms