経路制御について<基本>

経路制御について、基本的なことを整理してみました。

<経路制御表を作成・管理する方法>

経路制御表を作成・管理する方法には以下の2種類があります。

スタティックルーティング

ルーターやホストに固定的に経路情報を設定する方法。

ダイナミックルーティング

ルーティングプロトコルを動作させて、自動的に経路情報を設定する方法。

<ルーティングプロトコル>

経路を制御する範囲によって以下の2つに大別されます。

IGP(Interior Gateway Protocol)

組織内で完結する経路情報をやりとりする。

EGP(Exterior Gateway Protocol)

インターネット上で組織間の経路情報をやりとりする。

<経路制御アルゴリズム>

代表的なものは以下の2つです。

距離ベクトル型(Distance-Vector)

距離(メトリック)と方向によって目的のネットワークやホストの位置を決定する方法。

リンク状態型(Link-State)

ルーターがネットワーク全体の接続状態を理解して経路制御表を作成する方法。

TCPにおける通信

TCP(Transmission Control Protocol)は、トランスポート層プロトコルです。

<特徴>

TCPは、信頼性のある通信を実現しています。
トランスポート層にはUDP(User Datagram Protocol)というプロトコルもありますが
こちらは信頼性は保障されません。
シンプルな処理により高速な通信を実現しています。

<通信方法>

通信方法について説明します。
f:id:mrKomanetin:20210627130915p:plain

コネクションの確立

TCPでは、コネクションを確立してから通信を開始します。
コネクションの確立は以下の手順で行います。
①SYN(コネクション確立要求)を送信
②ACK(確認応答)を返却
③SYN(コネクション確立要求)を送信
④ACK(確認応答)を返却

簡単に言うと
①A「送信してもいい?」
②B「いいよー」
③B「送信してもいい?」
④A「いいよー」
ということですね。
この手順のことを3ウェイハンドシェイクといいます。
ちなみに。。
SYN はSynchronize(同期する)
ACKはAcknowledge(認める)
の略です。

データの送受信

データは、1オクテッドごとにシーケンス番号というものが付けられています。
データ送信時には、この番号も併せて送信し、
受信側では、次に受信すべき番号を確認応答として返します。
このように、確認応答とシーケンス番号によって、再送制御、重複制御を実現しています。
詳細は次項で説明します。

コネクションの切断

コネクションの切断も、確立時と同じような方法となります。

<再送制御、重複制御について>

データのシーケンス番号、確認応答により、再送制御、重複制御を実現しています。

再送制御

確認応答をしないとしたら、
例えばデータ(1~1000)がホストBに届く前に喪失した場合に、
データ1~1000を再送するべきか次のデータを送信するべきか、判断がつきません。
確認応答により再送するべきかどうかの判断をしています。

重複制御

送信されるデータにシーケンス番号がないとしたら、
例えばデータ(1~1000)がホストBに届けられ、
直後の確認応答がホストAに届かなかったとします。
この時、ホストAは確認応答が返ってこなかったため、データ1~1000を再送します。
ホストBでは、データ1~1000を重複して受信することになりますが、
シーケンス番号がないと重複しているかどうかがわかりません。
このように、シーケンス番号により重複してデータを受信しないように制御しています。
ちなみに、重複して受信した場合は後からきたデータを破棄する仕組みとなっています。

QAチケットの粒度をどうするか問題

システム開発で、QAの管理をBacklog等で管理することがあるかと思います。
この時、どういった 粒度でチケットを起票するか、よく悩みます。
今までの経験をもとに改めて考えてみたので、その結果を記載します。

結論

チケットは、質問内容をタイトルに表せられる程度の粒度にするのがベストだと思います。

理由

どのチケットで質問したか探しにくくなるのを防ぐため。

例えば、とある画面設計書の項目Aに対するバリデーションチェックについてQAを投げるとします。
その時、タイトルは「項目Aのバリデーションチェックの確認」みたいになると思いますが、
後から項目Bのバリデーションチェックでも確認することが見つかり、
同じチケットで追加で質問するとします。
そうした場合、タイトルからは項目Bの確認をしていることが推測できません。
起票した本人ならなんとなく覚えているかもしれませんが
他の人であればまずわからないと思います。

細かくしすぎてチケットの数が膨大になるのを防ぐため。

例えば、項目Aの必須チェックに関する質問と、上限値チェックに関する質問がある場合、
それぞれチケットを起票するという手もあると思います。
しかし、粒度を細かくしすぎると、チケットの数が膨大になり
その分管理が大変になるというデメリットがあります。
この例であれば、「項目Aのバリデーションチェックの確認」といったタイトルのチケットで
まとめて確認するのが良いかと思います。
タイトルから質問内容も推測できますし、チケットが膨大になるのを防ぐこともできます。

補足

1つのチケットには1つの質問だけ みたいな話をしばしば聞いてきました。
これはこれで良いことだと思います。
そのチケットのクローズ条件が明確になる といったメリットがあると思うので。
ただ、理由の2点目にあげたように、チケットの数が膨大になってしまうことを考えると
まとめられるものはまとめても良いのかなと思います。

ただ、これはあくまでも私個人の考えであり、
何がベストかはそれぞれのプロジェクトメンバー全員で話し合って
方針を決めるのが良いと思っています。

DHCPによるIPアドレスの割り当て

DHCPの仕組みについて説明します。

 DHCPとは

DHCP(Dynamic Host Configuration Protocol)とは
コンピューターがインターネットに接続するために必要なIPアドレス等の情報を
自動的に割り当てる仕組みのことです。
その仕組みを担うコンピューターをDHCPサーバーと呼びます。

DHCPの仕組み

DHCPによるIPアドレスの割り当ての流れを説明します。

f:id:mrKomanetin:20210612164511p:plain

DHCPサーバーの設定

DHCPサーバーに配布するIPアドレス等の情報を設定しておきます。
IPアドレスサブネットマスク、経路制御の情報、DNSサーバーのアドレスなどを設定します。

DHCP発見パケット

IPアドレス等の情報を要求します。

②ICMPエコー要求パケット(ping)

IPアドレスが重複することを防ぐため、
割り当てようとしているIPアドレスにIPパケットが到達するかどうかを確認します。
※到達することを確認するのに、ICMP(Internet Control Message Protocol)という仕組みを利用します。
ICMPエコー要求パケットは、この仕組みを利用したものです。
pingコマンドでもこの仕組みを利用しています。

DHCP提供パケット

使用してよいネットワークの設定を通知します。

DHCP要求パケット

通知された設定を使用したいことを通知します。

DHCP確認応答パケット

使用することを許可する旨を通知します。

ARP要求パケット

割り当てられたIPアドレスが使われていないか確認するため、
IPアドレスに対してARP要求パケットを送信し、応答がこないことを確認します。
ARP(Address Resolution Protocol)という仕組みを利用します。
ARPは、IPアドレスが割り当てられているMACアドレスを教えてくれます。

DNSによるIPアドレスの問い合わせ

Webブラウザで何かサイトを見るとき、https://blog.hatena.ne.jpのようなURLでアクセスしますが
裏側ではDNSIPアドレスに自動的に変換しています。

DNSとは

DNS(Domain Name System)とは、ホスト名とIPアドレスの関係を管理してくれるシステムです。
ネームサーバという言葉もありますが、恐らくDNSのシステムを持つサーバーのことで
ほぼ同義かと思います。

ドメイン名の構造

DNSの仕組みを理解するには、まずドメインの構造を理解する必要があります。
ドメイン名とは、ホストを特定するための階層的な名前のことです。
頂点にroot、その下に国等を表すドメイン、その下に組織種別や地域を表すドメインがあります。
さらにその下にも組織を表すドメインが続きます。

f:id:mrKomanetin:20210605115923p:plain
ドメインの階層構造

DNSの仕組み

DNSサーバーはこのドメイン毎に設置されます。
jpのDNSサーバー、neのDNSサーバー、hatenaのDNSサーバー といった具合です。
DNSサーバーは設置された階層のドメインに関する情報と
直下の階層のDNSサーバーのIPアドレスが登録されています。

DNSによる問い合わせ

具体的な問い合わせについて図にしました。
yusaku.godai.ac.jpドメインの中のコンピュータが
ietf.orgドメインの中のkyokoというホスト名のサーバーにアクセスしようとする場合の流れです。

f:id:mrKomanetin:20210605121620p:plain

ルートネームサーバーがietf.orgのDNSサーバーを返せたのは
前述したように、直下の階層のDNSサーバーのIPアドレスが登録されているためです。
また、ietf.orgのDNSサーバーがkyoko.ietf.orgのIPアドレスを返せたのは
その階層のドメインに関する情報、つまりkyokoというホスト名に対応するIPアドレスが登録されているためです。

ネットワークの媒体共有型と媒体非共有型について

ネットワークは通信媒体の使い方によって媒体共有型と媒体非共有型に分けられます。

媒体共有型

  • 通信媒体を複数のノードで共有するネットワーク
  • 初期のイーサネット等で使われていたネットワーク
  • 送信している間は受信できず、受信している間は送信できない。
    送受信で回線を共有している。これを半二重通信と呼ぶらしい。

<具体的な仕組み>

以下の方式があります。

  • コンテンション方式

    • データの送信権を競争で奪い取る方式。
    • CSMA方式とも呼ばれる。

      • Carrier Sense Multiple Accessの略

        • Carrier Sense(キャリアセンス)とは、送信を開始する前に回線が使われていないか確認して
          使用中だったら違う周波数で送信して他の通信を干渉しない仕組み
          みたいな意味があるらしい。
          なので、CSMAはキャリアセンスによる複数のアクセス とかって意味になるっぽい?。。
    • CSMAを改良したCSMA/CD方式というものもある。

      • 衝突を見つけて素早く通信路を解放する制御をしてくれる。
        • Carrier Sense Multiple Access/Collision Detectionの略(※2)

          • Collision Detectionは、Collision(衝突)をDetection(発見する)みたいな意味。
            ちなみに、CSMA/CA(Collision Avoidance)という方式もあるが、これは衝突をAvoidance(回避する)みたいな意味で
            衝突を回避するように頑張ってくれる方式。
  • トークンパッシング方式

    • トークンと呼ばれるパケットを巡回させて、送信権を制御する。
    • トークンを持ってる人だけが送信できる。

媒体非共有型

  • 通信媒体を専有するネットワーク
  • 今はこっちが主流っぽい
  • 送受信でそれぞれ専用の回線がある。これを全二重通信と呼ぶらしい。