RFC1を読んでみた！

# RFC1を読んでみた！

## はじめに
IT技術(特にネットワーク)の勉強をしていると必ずと言っていいほどRFCというドキュメントが出現します．
例えば，[RFC793](https://datatracker.ietf.org/doc/html/rfc793)ではTCPの仕様が記述されています．(2022年8月に最新版[RFC9293](https://datatracker.ietf.org/doc/html/rfc9293)が発行されている)
このRFCにお世話になっているうちに，RFC1ってどんな内容なんだろう？と思い，RFC1を読んでみました．

## RFCとは
そもそも，RFCとはなんだという人もいるでしょう．
[RFC](https://www.ietf.org/process/rfcs/)はRequest For Commentsの略で，IETF(Internet Engineering Task Force)が発行している技術仕様書です．
RFCは技術仕様書だけでなく，プロトコルの仕様や標準化のための文書も含まれています．
RFCはIETFの標準化プロセスの一環として公開されており，RFCの番号は順次割り当てられています．
そのため，RFCは標準化の文書ではなく，あくまで技術仕様書であることに注意が必要です．
RFCは公開されると，その内容は変更されることはありません．
もし，更新がある場合はこのRFCの後継であることを明示した新しいRFCが発行されます．

## RFC1の中身
さて，本題のRFC1についてです．
[RFC1](https://datatracker.ietf.org/doc/html/rfc1)は1969年4月7日に発行されたRFCで，RFCの最初の文書です．
このRFC1は，「Host Software」というタイトルで，ARPANETのホストコンピュータ間の通信における基本的な考え方を示している文書です．
ARPANETはアメリカ国防総省の研究機関であるARPAがネットワークを通じてコンピュータ同士を接続し，通信を行うプロジェクトでした．
ホストとIMP(Internet Message Processor)の間での通信を行うための基本的な考え方が示されています．
RFC1はIMPソフトウェアの概要，ホスト間ソフトウェアに対する要件，ホスト側のソフトウェアの概要の構成で記述されています．

### IMPソフトウェアの概要
IMPは現在でいうところのルータに当たるもので，遠くに離れたホスト同士を接続するために作られたソフトウェアでした．
RFC1で書かれているIMPの概要は次のとおりです．

| 項目 | 説明 |
|----------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| **メッセージ** | 情報はホスト間で「メッセージ」と呼ばれる単位で送信される．各メッセージは最大8,080ビットのデータと16ビットのヘッダーで構成され，ヘッダーには以下のフィールドが含まれる．<br>- **宛先 (Destination)**: 5ビットで宛先のホストを指定 <br>- **リンク (Link)**: 8ビットでホスト間の論理的な全二重接続を識別 <br>- **トレース (Trace)**: 1ビットで、トレースを有効にするとIMPがステータス情報を記録しUCLAのNMCに送信 <br>- **予備 (Spare)**: 2ビット（未使用） |
| **リンク** | 各ホスト間には最大32の論理的な全二重接続（リンク）が存在し，両方向にメッセージ送信が可能．ただし，一つのリンク上で連続して2つのメッセージを送るには，相手側IMPからのRFNM（Request for Next Message）を待つ必要がある．これにより特定ホストへの過負荷を防ぐ． |
| **IMPの送信とエラーチェック** | IMPはメッセージ送信時にエラーチェックを実施する．受信したメッセージのチェックサムを確認し，エラー検出時は再送要求を行い，ネットワーク内のデータ整合性を確保する． |

### ホスト間ソフトウェアに対する要件
ホスト間ソフトウェアに対する要件は次のとおりです．

| 項目 | 説明 |
|----------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| **使いやすさ** | 幅広いユーザがすぐに簡単に使用でき，TTY端末やダイヤルアップのように任意のリモートホストを利用できる機能を提供する必要がある．多少異なる方法でファイル転送をする機能も必要になってくる． |
| **遅延** | ネットワーク経由でコンピュータに接続し，操作する時の遅延に課題がある．シンプルな操作でも遠くのホストからの応答が約500msかかってしまう問題があり，これはユーザ体験に悪影響を及ぼす可能性を懸念している． |
| **エラー処理** | ソフトウェアのインターフェースや通信ハードウェアの境界でエラーチェックを行うことで，問題の発生時の混乱を回避でき，結果的に信頼性が向上する． |

### ホスト側のソフトウェア

ホストのソフトウェアについても言及されおり，概要は次のとおりです．

| 項目 | 説明 |
|----------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| **コネクションの確立** | ホスト間通信ではダイヤルアップのように片方のホストがもう片方のホストに対してコネクションを張り始める．32の論理的なリンクが用意されており，0番はホストのOS同士の通信管理に使われ，1から31番のリンクはユーザが利用する． |
| **大量のデータの転送** | 端末(TTY)を使った接続では大量のデータを送信するときに非効率であるため，ファイル転送用リンクを新たに定義することで，効率的に大量にデータを送信できるようにする． |
| **最低限の機能** | 各ホストがユーザに最低限提供すべき機能は次の6つ． <br>a. 相手ホストとのTTYのような基本的な接続を開始する機能 <br>b. 接続を切断する機能 <br>c. TTY接続を使って文字の送受信をする機能 <br>d. TTY接続とは別にファイル転送など専用リンクを並列して作る機能 <br>e. ファイル転送用リンクを終了させる機能 <br>f. ファイル転送用リンクを使ってデータの送受信をする機能 |
| **エラー処理** | メッセージにはメッセージ番号，長さ，チェックサムを含め，IMPがメッセージを生成するときに起きるエラーも検出できるようにする． |
| **インタラクティブな操作** | 遠くのホストに対して一文字づつやりとりしていると500msの遅延が出てしまい，ユーザにストレスとを与えてしまう．この問題を解決するため，ローカルの操作とリモートの操作に分けて処理を行う．例えば，"HELLO"を"HELP"に変更するときに，一文字ごとに操作を送信するのではなく，最終結果の"HELP"のみリモートホストへ送信する．[RFC](https://www.ietf.org/process/rfcs/)はRequest For Commentsの略で，IETF(Internet Engineering Task Force)が発行している技術仕様書です．[RFC](https://www.ietf.org/process/rfcs/)はRequest For Commentsの略で，IETF(Internet Engineering Task Force)が発行している技術仕様書です．[RFC](https://www.ietf.org/process/rfcs/)はRequest For Commentsの略で，IETF(Internet Engineering Task Force)が発行している技術仕様書です． |


## まとめ
RFCはインターネットの技術仕様書であり，RFC1はその最初の文書です．
RFC1はARPANETのホストコンピュータ間の通信における基本的な考え方を示している文書であり，今後のRFCの基礎となるものでした．
いつかRFCの発行に寄与してみたいものです．