RFC 2

Host software

πŸ“… published April 1969, from ietf

RFC 2 πŸŽ€ is from the Network Working Group, and it was written by Bill Duvall at SRI πŸ’–

Heads up, bestie: page 1 is missing from the original, so the title didn't survive. It's [unknown title] 😭 The original doesn't list a category, date, or anything it obsoletes or updates, so there's nothing to report there ✨


  • 1a1 Okay so logical link 0 is the control link πŸ¦‹ It's a control link between any two HOSTs on the network.
    • 1a1a Only one control link may exist between any two HOSTs. So if there are n HOSTs on the network, there are n-1 control links from each HOST πŸ’…
  • 1a2 The control link is mainly used for communication between HOSTs for:
    • 1a2a Establishing user links
    • 1a2b Breaking user links
    • 1a2c Passing interrupts about the status of links and/or the programs using them
    • 1a2d Monitor communication
  • 1a3 IMPs in the network may automatically trace all messages sent on link 0 πŸ‘€
  • 1b1 A user at a given HOST may have exactly 1 primary link to each of the other HOSTs on the network πŸ’œ
    • 1b1a The primary link must be the first link established between a HOST user and another HOST.
    • 1b1b Primary links are global to a user, i.e. a user program may open a primary link, and that link stays open until it's specifically closed.
    • 1b1c The remote HOST treats a primary link like a teletype connected over a normal data-phone or direct line, i.e. the remote HOST considers a primary link to be a normal teletype user πŸ–₯️
    • 1b1d The primary link carries (user) control information to the remote HOST. For example, it's used for logging in to the remote host using the remote host's standard login procedure πŸ”‘
  • 1c1 A user program may establish any number of auxiliary links between itself and a user program in a connected HOST ✨
    • 1c1a These links may be used for either binary or character transmission.
    • 1c1b Auxiliary links are local to the sub-system that establishes them, so they're closed when that subsystem is left 🌸

  • 2a1 The control link is established at system load time πŸŽ€
  • 2a2 The status of a control link may be active or inactive.
    • 2a2a The status of the control link should reflect the relationship between the HOSTs 🫢

2b1 Primary links are established by a user or executive call to the monitor πŸ“ž

  • 2b1a The network identification number of the HOST to be linked to must be included in the call.
  • 2b1b An attempt to establish more than one primary link to a particular HOST is regarded as an error, and the request gets defaulted πŸ™ˆ
  • 2b1c Standard Transmission Character Set
    • 2b1c1 There will be a standard character set for transmitting data over the primary links and control links.
      • 2b1c1a This will be full (8 bit) ASCII πŸ”€
  • 2b1d (get link) This is the protocol for establishing a link to HOST B from HOST A πŸ¦‹
    • 2b1d1 A selects a currently unused link to HOST B from its allocation tables.
    • 2b1d2 A transmits a link-connect message to B over link 0.
    • 2b1d3 A then waits for:
      • 2b1d3a A communication regarding that link from B
      • 2b1d3b A certain amount of time to elapse ⏳
    • 2b1d4 If a communication regarding the link is received from B, it gets examined to see if it is:
      • 2b1d4a A verification of the link from B.
        • 2b1d4a1 This results in a successful return from the monitor to the requestor. The link number is returned to the requestor, and the link is established πŸŽ‰
      • 2b1d4b A request from B to establish the link. This means that B is trying to establish the same link as A, independently of A.
        • 2b1d4b1 If the network ID number of A (A(Na)) is greater than that of B (Nb), then A ignores the request and keeps waiting for confirmation of the link from B.
        • 2b1d4b2 If, on the other hand, Na<Nb, A:
          • 2b1d4b2a Honors the request from B to establish the link,
          • 2b1d4b2b Sends verification as required,
          • 2b1d4b2c Aborts its own request, and repeats the allocation process πŸ”„
      • 2b1d4c Some other communication from B regarding the link.
        • 2b1d4c1 This is an error condition, meaning that either:
          • 2b1d4c1a A has faulted by selecting a previously allocated link for allocation,
          • 2b1d4c1b B is transmitting information over an un-allocated link,
          • 2b1d4c1c Or a message regarding allocation from B to A has been garbled in transmission πŸ’€
        • 2b1d4c2 In this case, A's action is to:
          • 2b1d4c2a Send a link disconnect message to B concerning the attempted connection
          • 2b1d4c2b Consider the state of HOST B to be in error and initiate entry to a panic routine (error) 🚨
    • 2b1d5 If no communication regarding the link is received from B in the prescribed amount of time, HOST B is considered to be in an error state.
      • 2b1d5a A link disconnect message is sent to B from A.
      • 2b1d5b A panic routine is called (error) 😭

2c1 Auxiliary links are established by a call to the monitor from a user program πŸ’–

  • 2c1a The request must specify pertinent data about the desired link to the monitor.
    • 2c1a1 The number of the primary link to B.
  • 2c1b The request for an auxiliary link must be made by a user program in each of the HOSTs (A and B).
  • 2c1c If Na > Nb, then HOST A goes ahead and establishes a link to HOST B the way we outlined above (getlink) 🧚
  • 2c1d If Na<Nb, then A waits:
    • 2c1d1 For HOST B to establish the link (after checking whether B has already established the corresponding link).
    • 2c1d2 For a specified amount of time to elapse.
      • 2c1d2a This means that HOST B did not respond to the request of HOST A.
      • 2c1d2b The program in HOST A and B should be able to specify the amount of time to wait for the timeout ⏰

4 MONITOR FUNCTIONS πŸ’–

okay the monitor is literally the main character of this whole section πŸ’… it handles the network I/O, keeps track of status, and basically makes everything else work 🫢

4a Network I/O drivers πŸ”Œ

4a1 Input πŸ“¨

  • 4a1a Input message from IMP.
  • 4a1b Do error checking on message πŸ”
    • 4a1b1 Verify checksum,
    • 4a1b2 Send "message recieved" acknowledgement over control link if acknowledge mode is in effect.
  • 4a1c (trans)character translation πŸ”€
    • 4a1c1 There is a strong possibility that the character translation may be done in the IMP.
    • 4a1c2 This needs to be explored further with BBN.
    • 4a1c3 There are two main considerations
      • 4a1c3a Should the translation be done by table or algorithm?
        • 4a1c3a1 Initially it seems as though the best way to go is table.
      • 4a1c3b How should we decide which messages should be translated, i.e. is it desirable to not translate everything (YES!!) and by what means can we use to differentiate?
  • 4a1d Decode header, and pass message to correct recipient as identified by source, and link. 🎯

4a2 Output πŸ“€

  • 4a2a Build header
  • 4a2b Character translation
    • 4a2b1 See remarks under the section on output translation (trans).
  • 4a2c Create checksum
  • 4a2d Check status of link
    • 4a2d1 If there has not been a RFNM since the last message transmitted out the link, wait for it.
  • 4a2e Transmit message to IMP
  • 4a2f If acknowledge mode is in effect, wait for
    • 4a2f1 RFNM from destination IMP.
    • 4a2f2 Response from destination HOST over control line 0.

4b Network status 🚦

4b1 Maintain status of other HOSTs on network πŸ‘€

  • 4b1a If an IMP is down, then his HOST is considered to be down.
  • 4b2 Maintain status of control lines.
  • 4b3 Answer status queries from other HOSTs.
  • 4b4 Inform other HOSTs as to status of primary and auxiliary links on an interrupt basis.
  • 4b5 Inform other HOSTs as to status of programs using primary and secondary links

5 EXECUTIVE PRIMITIVES ⚑

5a1 These require the HOST number as a parameter.

  • 5a1a Establish primary link
  • 5a1b Connect controlling teletype to primary link
  • 5a1c INPUT/OUTPUT over primary link
  • 5a1d Interrogate status of primary link
    • 5a1d1 Don't know what, exactly, this should do, but it seems as though it might be useful.
  • 5a1e Disconnect controlling teletype from primary link
  • 5a1f Kill primary link
  • 5b1a requires the HOST number as a parameter
  • 5b1b It returns a logical link number which is similar to a file index. It is this number which is passed to all of the other Auxiliary routines as a parameter.
  • 5b2 INPUT/OUTPUT over auxiliary link
  • 5b3 Interrogate status auxiliary link.
    • 5b3a Don't know what, exactly, this should do, but it seems as though it might be useful.
  • 5b4 Kill auxiliary link.

5c Special executive functions πŸͺ„

  • 5c1a This may be used to do block I/O transfers over a link
  • 5c1b The function of the monitor in this instance is to transfer a buffer directly to its IMP
  • 5c1c It does not modify it in any way
    • 5c1c1 This means that the header and other control information must be in the buffer.
  • 5c1d The intended use of this is for network debugging. πŸ›

6 INITIAL CHECKOUT πŸ§ͺ

6a Simulated data-phone checkout πŸ“ž

The network will be initially checked out using the links in a simulated data-phone mode.

  • 6a1 All messages will be one character in length.
  • 6a2 Links will be transparent to the monitor, and controlled by user program via a special executive primitive.
    • 6a2a The initial test will be run from two user programs in different HOSTs, e.g. DDT to DDT.
    • 6a2b It will be paralleled by a telephone link or similar.
[  This RFC was put into machine readable form for entry  ]
[  into the online RFC archives by Robbie Bennet 10/1998  ]
[  This RFC was nroffed by Kelly Tardif, Viagenie 10/1999 ]
πŸ“¦ where this page comes from