通信の世界のプロトコル
道路を歩くときは交通ルールに従うように、通信の世界でもルール(プロトコル)に従う必要がある。実際にパソコンでインターネットが使えるのは当たり前だけど、トラブルが発生したときの切り分けの一つとしてのプロトコル(例:https、http)について整理してみた。
プロトコルとはなんだ
パソコン同士が通信をする際の手順や規約などの約束事。
双方が理解できる同じプロトコルを使わないと通信は成立しない。そのため、インターネットのプロトコルはRFCで技術仕様が公開されている。
例えば、インターネットへの接続にはTCP/IPプロトコルが用いられ、Webページを閲覧するためにはWebサーバとWebブラウザ間でやり取りするHTTPプロトコルが使われる。
ネットワークとはなんだ
一般に通信は、要求(リクエスト)を行うパソコンのことをクライアントと呼ぶ
クライアントからの要求を受けて応答(レスポンス)を行うパソコンのことをサーバと呼ぶ。
届いているかどうかの確認
IPアドレスはネットワーク上の住所と考える。IPはパケットを運ぶ機能があるが、IPはパケットが相手に届くかどうかは担保していない。TCP/UDPは、住所のXX号室という、部屋番号に相当するっポート番号をIPアドレスと共に使って通信を行う機能を提供してくれる。
例えば、WebサイトのIPアドレスの80番に通信を行っている。
1つのIPアドレスには複数のポート番号を付けることができて、全部で0~65535までの数値を使うことができる。
相手にパケットが届いているかどうかはTCP、UDP機能で実施する。
TCP:ブラウザがWebサイトと通信する場合(物品購入)
パケット送信した相手がパケット受信した返事をもらう
UDP:動画配信、1秒に50枚のうち1枚がなくなっても気づかない。連続した即時性のある情報を伝えることを優先。
ネットワークの階層(OSI参照モデル)
パソコン同士でメーカが異なっていても通信できるのは、利用している機能が同じだから。IPやTCP、LANケーブルで、アプリケーションレベルの通信を行う場合、異なるパソコンのOSや機種でも通信を行うことができる。LANケーブルからアプリケーションまでを階層化したものがOSI参照モデルだ。
HTTPをOSI参照モデルの要素に当てはめると
第5~7層:HTTP
第4層:TCP
第3層:IP
第2層:LAN
第1層:物理的な媒体
パケットキャプチャー(wireshark)
シーケンス(順序)を見ることができる。シーケンスとは「自分と相手との間で行われる、通信の流れや手順」のことを指す。ほとんどの通信は決まった手順で通信を行い、自分から相手にパケットが届くまで数ミリ秒(1秒の1000分の1:0.001秒)だ。
プロトコルを作るにはどうすればいいのか
作りたいプロトコル 「例:チャットができたり会話できるアプリケーション」
参考書として:RFC(Request for Coments)
世界中の人達がネットワークを通じて仕様を決めて共有している
概要を決める
(1つのRFCを元にたくさんの人がプロトコルスタックを実装していく。ある人は、最低限必要なる部分でいいのかもしれない。ある人は全て欲しているかもしれない。そうなると互いに通信できなるなる可能性があるので、ルールを決める。RFCでは「これは必ず実装する必要がある:MUST」「これは行ってはいけない:MUST NOT」「してもよい(MAY)」機能は処理単位で明示的に示している)
・プロトコルで実現したい概要をイメージする
・概要を実現するために、細かいプロトコル実装を検討する
何から、整理する必要があるのか、
基本となるデータ、自分と相手、OSI参照モデルについて整理することでネットワークに参加して、データを送受信することができる。
1)通信プロトコルはどんなデータを使うのか
例:リアルタイムに伝わる、マルチメディアデータ(文字、音声、ビデオ)を扱うことができる
2)自分と相手の関係は
例:電話の場合だと、自分から相手にかけて切るまでの時間(セッション)相手に接続をかけるときは、何らかの個体情報を付与し、自分や相手という存在はお互いに識別される
3)OSI参照モデルのどの層の役割をもつか
例:チャットのアプリケーション機能を持たせるのであれば、第5層~第7層のHTTPと同じようにする。ということは、第4層とのインターフェースを決めればネットワークに参加することができる。第4層にはTCP/UDPがある。チャット通信に信頼性を持たせるのであれば、TCPを使う。
プロトコルの作り方の全体を決めていく
「ここまでは、このプロトコルでできる」というプロトコルの規定範囲を決める。つまり、OSI参照モデルの役割に基づいた基本的な構造を考える。「このときは、どういった通信が発生しているのか」というイメージを持つ。
プロトコルは、構造や動く順番を考えることで便利で快適は機能や動作を付け加えることができる。
送信側 送信データを作成する、データを送信する
受信側 データを受信する データの中身を確認する
1)プロトコル通信を行うときの構造を決定する
エンコーディング、トンランスポート、トンランザクション
2)プロトコル通信を行うときの基本的な流れを決定する
会話に誘う、返事をもらう、届いた通知をもらう、会話を行う、会話の終わりを告げる、相手から返事をもらう
ここまでで、通信プロトコルを考える上で、細かい部分よりまず先に全体像をイメージすることで、プロトコルの構造に基づいた機能と、基本的な通信の流れを決めることができる。
障害が発生して切り分けを考える際、OSI参照モデルの第何層まで大丈夫かと順次切り分けていく必要がある。パソコンでインターネット接続できるのはなぜかというとこの復習もたまにはした方がよいのかもしれない。
おまけ1:我が家のおせち料理(2021年1月1日)
朝から、さっそく、雑煮とおせち料理を食べました。
おまけ2:リビングで娘がお手本を参考にしながら書初め