RFCs and a script to get them.

by Patrick Horgan

(Back to Stuff)

What are RFC, STD, FYI, BCP, and IEN?

These are the standards of the internet world. This is where the definitions for tcp and html and email were all first published. You can't think that you are a real geek unless you know about this stuff. If you want to know about how telnet or http works or any other internet stuff, this is where you go to get the specs.

I'm going to tell you what each of those TLAs (Three Letter Acronyms) mean, and I'm going to give you a script that will, on unix/linux boxes fetch them and cache them for you.

RFC

RFC stands for Request For Comments. When someone proposes a new standard for the internet it is done as a Request For Comment. An RFC can be superceded by a later RFC, and it can become an STD or BCP. Not all RFCs become standards. Many are experimental, or are just intended to share information. If an RFC becomes an STD, it still retains its number as an RFC. RFCs are never edited once out, so if a protocol changes, the new version gets a new number. As an example, the DNS RFCs, numbers 1034 DOMAIN NAMES - CONCEPTS AND FACILITIES and 1035 DOMAIN NAMES - IMPLEMENTATION AND SPECIFICATION each says that they obsolete RFCs 882 DOMAIN NAMES - CONCEPTS and FACILITIES, 883 DOMAIN NAMES - IMPLEMENTATION and SPECIFICATION, and 973 Domain System Changes and Observations, which are earlier versions

RFCs are still being published, and you might write them. For more information check out the rfc faq .

STD

STDs are the standards of the internet. Each of them corresponds to one or more RFCs, for example, STD 8, Telnet Protocol corresponds to two RFCs, RFC 854, Telnet Protocol Specification, and RFC 855, Telnet Option Specifications. STDs do change. As an example, STD 13, Domain Name System includes RFC 1034 and RFC 1035. It used to refer to earlier versions of the DNS specs, but as they were obsoleted, STD 13 was updated each time, to refer to the most current version. That means that you can always get the most current versions of things by checking the STD.

Of particular interest in STD 1, which tells you the status of all the RFCs, it tells you which have become standards and which have not.

FYI

FYIs are For Your Information. They are a subseries of the RFCs, the ones that have status INFORMATIONAL. Examples are FYI 8 Site Security Handbook, (also RFC 2196 which obsoletes RFC 1244), and STD 29 Catalogue of Network Training Materials (also RFC 2007). Like STDs, they always refer to the most current version for RFCs obsoleted by other RFCs.

BCP

BCPs are the Best Current Practices of the internet. They form a subset of the RFCs, including all of the RFCs with the status BEST CURRENT PRACTICE. Like STDs, they always refer to the most current version for RFCs obsoleted by other RFCs. Examples include BCP 19, IANA Charset Registration Procedures, and BCP 35, Guidelines and Registration Procedures for New URI Schemes.

IEN

IENs are Internet Experiment Notes. Examples include IEN 45, TCP Checksum Function Design, and IEN 197, A Host Monitoring Protocol. These are early documents by the people that created the internet. When ARPANET became the internet, the discussion switched to RFCs. In general, these documents preceed RFC, and cover the dates July 1977 - September 1982.

The Script

The rfc script, (just click if you can't wait, or right click if you want to save a copy), will fetch all of the above documents for you.

$ chmod +x rfc $ ln -s rfc std $ ln -s rfc fyi $ ln -s rfc bcp $ ln -s rfc ien

You save it somewhere in your path as rfc, (I keep it in ~/bin, and have ~/bin in my path), make sure it's executable, and then make symbolic links to it from each of the other names.

ftpuser='' # Your password for anonymous ftp # (usually blank or a email address) docdir=~/docs # Where you want to save cached copies textviewer="less" # What you want to view text with #textviewer="emacs -nw" # What you want to view text with #textviewer="vim" # What you want to view text with psviewer=evince # What you want to view postscript with pdfviewer=evince # What you want to view pdfs with ftp=ftp # ftp program to use printer=lpr # The printing command you use.

At the top of your copy of rfc, there are a few variables you'll want to check.

How to use the script

To use the script, you just type one of its names followed by a number. As an example, if you wanted to see the DNS standard, you'd type std 13. "But wait!", you say, "How do I know the numbers?" Each of the document series has an index, so if you wanted to know what all of the RFCs are, you could type rfc index, and you'll get a document that has a list of all of the rfcs and their numbers.

Normally, you will only have to fetch a document once. The script creates local caches of documents, and if you ask for the same document again, it will immediately load from your cache. The exception to this is the index documents which always try first to load via ftp before trying the cache in case the index has changed. If you'd rather not ftp it, the -f option forces the script to use the cached version. Conversely, the -n argument forces the script to go get a new copy. You might use this with std scripts, since they can change. The only other argument is -p which asks the script to send the document to a printer.

Examples

std index Get a copy of the index for the internet standards std -f index Use a local copy of the index without trying to fetch first std 7 Get a copy of internet standard 7 Transmission Control Protocol std -n 7 Get a new copy even if one is cached
(Back to Stuff)