OSI基本参照モデルについて勉強している

# はじめに

基本情報技術者試験に申し込んだので過去問を解いてみたのだが、初見では半分しか解けなかった。ネットワークについての知識が不十分のようだ。

というわけで、OSI基本参照モデルをベースに知識を増やしていく。これはそのメモ書きだ。

ニコニコ動画ユーザー非公式交流Slackで質問に答えてくれた皆様に感謝を。

なお、基本情報技術者試験では問われないレベルの内容も多数含んだメモ書きである。

# OSI基本参照モデルの前に

## パケットとデータグラムと

パケットという概念はOSI参照モデルより古い概念である。

> [パケット - Wikipedia](https://ja.wikipedia.org/wiki/%E3%83%91%E3%82%B1%E3%83%83%E3%83%88)
>
> パケット単位で小分けにして通信を行うことにより、回線を連続して占有することができないため、複数の端末からの送受信データを1本の回線に集められる（多重化）、大容量のデータのうち１か所が破損・喪失した際に、ひとつのパケットを再送するだけで足りる等の利点がある。

ではデータグラムとはなにか。

> [データグラム - Wikipedia](https://ja.wikipedia.org/wiki/%E3%83%87%E3%83%BC%E3%82%BF%E3%82%B0%E3%83%A9%E3%83%A0)
>
> 「データグラム」は「パケット」と同義語として扱われることが多いが、ニュアンスは若干異なる。 「データグラム」は一般に、宛先に届かない場合でもユーザに通知しない、信頼できないサービスでのパケットを意味する。 一方「パケット」は、パケットとしてフォーマットされたメッセージ一般を指す。

ところでOSI基本参照モデルにおいてパケットといえば、第三層の話である。これはどういうことか。

> [データグラム - Wikipedia](https://ja.wikipedia.org/wiki/%E3%83%87%E3%83%BC%E3%82%BF%E3%82%B0%E3%83%A9%E3%83%A0)
>
> | OSIレイヤー            | データグラムの名前    |
> |------------------------|-----------------------|
> | Layer 4                | データセグメント      |
> | Layer 3                | データパケット        |
> | Layer 2                | フレーム (IEEE 802.3)<br>フレーム (IEEE 802.11)<br>セル (ATM) |
> | Layer 1                | チップ（英語版）      |

slackで聞いてみた。

> 実体としておなじものでも、それぞれのレイヤーから見ると別の名前がついている、という感じですね

## イーサネット

イーサネットはOSI参照モデルの下位2つの層である物理層とデータリンク層に関して規定している。 現代の有線LANは、OSI参照モデルの下位2層に相当するイーサネットとそれ以上の層を規定した「TCP/IPプロトコル」の組み合わせが一般的である。

イーサネットの規格名の大体の付け方を下に示す。

$$
\begin{pmatrix}
10 \\
100 \\
1000 \\
10G \\
\end{pmatrix}
\begin{pmatrix}
BASE \\
BROAD \\
\end{pmatrix}
\begin{pmatrix}
2 \\
5 \\
-TX \\
-FX \\
etc \\
\end{pmatrix}
$$

## ネットワーク・トポロジー

![NetworkTopologies.png](https://upload.wikimedia.org/wikipedia/commons/9/96/NetworkTopologies.png)  
パブリック・ドメイン, [リンク](https://commons.wikimedia.org/w/index.php?curid=644883)

イーサネットはバス型構成であったが、10BASE-Tからはケーブル形状の変更で物理的にはスター型トポロジーとなった

ところでバス型がぴんとこない。slackで聞いてみた。

> バス型ってどういうことなのかイマイチぴんとこないです。航空無線みたいなものをイメージすればいいんでしょうか？(同じ帯域を聞いている人間全員に伝わる

こんな返事が。

> そうですね、まさに航空無線のようなものです。あれも、複数人が同時に話そうとするとスキール音になって全員が通信失敗しますよね。  
> だから、CSMA/CDみたいな仕組みがEthernetにはあるんですよね。

# OSI基本参照モデル

| 番号 | 名称                 | 役割                                   | 具体例             |
|------|----------------------|----------------------------------------|--------------------|
| 7    | アプリケーション層   | 個々のアプリケーション                 | WWW、メール        |
| 6    | プレゼンテーション層 | データの表現形式                       | HTML               |
| 5    | セッション層         | 通信手段                               | HTTP               |
| 4    | トランスポート層     | End-End間の通信制御                    | TCP、UDP           |
| 3    | ネットワーク層       | データを送る相手を決め最適な経路で送る | IP                 |
| 2    | リンク層             | 隣接機器同士の通信を実現する           | Ethernet           |
| 1    | 物理層               | 物理的な接続、電気信号                 | 光ファイバ、電話線 |

アプリケーション層はJISの訳語では「応用層」らしい。

> [プロフェッショナルIPv6](https://professionalipv6.booth.pm/items/913273) p.45
>
> ![IPv4とIPv6の両方が同時に存在する場合](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/94177/6d0b1d19-48cd-beb0-1461-22cf560da574.png)
> CC BY-NC-SA

以下は[OSI参照モデルまとめ - Qiita](https://qiita.com/tatsuya4150/items/474b60beed0c04d5d999)を基に、引っかかった部分などを追記していく。

## レイヤー1：物理層

### L1ハブ

[OSI参照モデルまとめ - Qiita](https://qiita.com/tatsuya4150/items/474b60beed0c04d5d999)の物理層のネットワーキングデバイスにハブが出てくるがどういうものだろうか。slackで聞いてみた。

> というかL1ハブは自分でも作れるレベルのものですね  
> コネクタ同士を電気的に結線するだけw  
> なんの制御もしないものです

ああ、だからリピーターと同列に書いてるのか。

> [OSI 7層モデル:Geekなぺーじ](https://www.geekpage.jp/technology/ip-base/osi7.php)
>
> 「１．みんなに送るけど自分に関係ない通信は無視してね！なハブ」を「リピーターハブ」と言います。

### メディアコンバーター

物理層において，異なる伝送媒体を接続し，信号を相互に変換する機能のことらしいです(過去問より)。

> [メディアコンバータ｜スイッチングハブ(HUB)｜パナソニックLSネットワークス株式会社｜Panasonic](https://panasonic.co.jp/ls/plsnw/product/lan/mc.html)
>
> メディアコンバータ（メディコン）は、UTPケーブルから光ファイバに変換することで、UTPケーブルでは100ｍまでに限られている伝送距離を延長するための変換装置です。スイッチングハブと接続して使用します。
光ファイバはノイズに強いので、工場などのノイズ発生源が多い環境下における通信障害対策に有効です。

## レイヤー2：データリンク層

> [OSI 7層モデル:Geekなぺーじ](https://www.geekpage.jp/technology/ip-base/osi7.php)
>
> ![img](https://www.geekpage.jp/technology/ip-base/layer2-3.png)

この図がわかりやすい。

ネットワークデバイスにはMACアドレスが振られており、これがノードを識別するキーになる。

### フレーム

宛先のMACアドレス、送信元のMACアドレス、データ長orタイプ、データ本体、FCS(CRCによるチェック)という構成のフレーム(byte列)が流れていく。

![イーサネットのフレームのつながり.PNG](https://upload.wikimedia.org/wikipedia/commons/thumb/7/7c/%E3%82%A4%E3%83%BC%E3%82%B5%E3%83%8D%E3%83%83%E3%83%88%E3%81%AE%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%81%AE%E3%81%A4%E3%81%AA%E3%81%8C%E3%82%8A.PNG/1200px-%E3%82%A4%E3%83%BC%E3%82%B5%E3%83%8D%E3%83%83%E3%83%88%E3%81%AE%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%81%AE%E3%81%A4%E3%81%AA%E3%81%8C%E3%82%8A.PNG)  
[Tosaka](//commons.wikimedia.org/w/index.php?title=User:Tosaka&amp;action=edit&amp;redlink=1) - 投稿者自身による作品, [CC 表示-継承 3.0](https://creativecommons.org/licenses/by-sa/3.0/), [リンク](https://commons.wikimedia.org/w/index.php?curid=2934539)による

タイプとは上層位のプロトコル種別を表している。結局「データ長orタイプ」の構成は以下のようになる。

> [DIX 規格のフレームフォーマット – Tech Knowledge](https://blog.longest-road.com/contents/?p=827)
>
> | タイプ (16 進数表記) | 意味                                          |
> |----------------------|-----------------------------------------------|
> | 0x0000 ~ 05DC        | IEEE802.3 規格のデータ長 (DIX 規格では未使用) |
> | 0x05DD ~ 05FF        | 未使用                                        |
> | 0x0800               | IPv4                                          |
> | 0x86DD               | IPv6                                          |
> | 0x0806               | ARP                                           |
> | 0x8035               | RARP                                          |
> | 0x8100               | IEEE802.1Q (VLAN)                             |
> | 0x8808               | IEEE802.3x (フロー制御)                       |
> | 0x8809               | IEEE802.3ad (リングアグリゲーション)          |
> | 0x8137               | PPPoE Discovery Stage                         |
> | 0x8864               | PPPoE Session Stage                           |

受信側でFCSを用いてフレームの検査が行われ、誤りがある場合は単に破棄する。

### 衝突への対応

> [イーサネット - Wikipedia](https://ja.wikipedia.org/wiki/%E3%82%A4%E3%83%BC%E3%82%B5%E3%83%8D%E3%83%83%E3%83%88)
>
> 初期のイーサネットは論理的、物理的ともにバス型構成であり、複数の端末が1本の同軸ケーブルに接続されていた。多数の端末が繋がっている場合には、任意の端末AとBとの「1対1」の排他的な通信は不可能であり、端末Aから送出されたデータは、同じイーサネットの配線に繋がっている全端末へ届けられる「1対全」の通信方式である。「1対全」の通信であるため、既に端末AとBが通信している時に端末Cが新たに送信したい場合は、伝送路の空きを待つ必要がある。複数の端末が接続されている時に、ほぼ同時に送信が行われた場合、衝突することがあり、その場合データが損失する。これを衝突（コリジョン）と呼

この方式としてCSMA/CDとCSMA/CAが挙げられる。

まずCSMAの意味合いは次のとおりである。

1. 搬送波感知（Carrier Sense）

    通信を開始する前に、一度受信を試みることで現在通信をしているホストが他にあるかどうか確認する。

2. 多重アクセス（Multiple Access）

    複数のクライアントは同じ回線を共用し、他者が通信をしていなければ自分の通信を開始する。

#### CSMA/CD

イーサネットにおいて用いられている。ただし、スイッチングハブで通信制御を行うことが一般的になったため(物理的にスター型になった)、必要性はなくなり、10GbEthernetなど、Ethernet規格の中でも比較的新しいものでは衝突検出をサポートしていない。

- 衝突検出（Collision Detection）

  複数の通信が同時に行われた場合はそれを検知し、ランダムな時間待ってから再び送信手順を行う。

#### CSMA/CA

無線LANの通信規格であるIEEE 802.11において用いられている。これは無線通信では信頼できる衝突検出がないためである。

- 衝突回避（Collision Avoidance）

    搬送波感知の段階で通信中のホストが存在した場合、通信終了と同時に送信を試みると衝突する可能性が高い。そのため、他のホストの送信終了を検知した場合は自分が送信を開始する前にランダムな長さの待ち時間をとる。なお、永久に送信できない事態を防ぐため、この待ち時間は徐々に短くされてゆく。

## レイヤー3：ネットワーク層

ようやくIPアドレスの出番がやってきた。IPv4だとかIPv6とかはこのレイヤーの話になる。ネットワーク層では隣の機器だけではなく離れた機器の通信も扱う。ここでルーターが大事になってくる。

ルータが通信経路の決定に関わる(経路選択機能)。

IPv4とIPv6の詳細は[プロフェッショナルIPv6](https://professionalipv6.booth.pm/items/913273)を後でのんびり眺める。

なおICMPはIPv6時代ではICMPv6になったが、もはや別物と言っていい進化を遂げたらしい。つまり、もはや`ping`や`traceroute`が主要な用途だった時代は終わったということらしい。知らんけど。

> [プロフェッショナルIPv6](https://professionalipv6.booth.pm/items/913273) p.102 表6.1 さまざまな機能のICMPv6 への統合
>
> |機能                                 |IPv4 における手段|IPv6 における手段|
> |-------------------------------------|-----------------|------------------|
> |エラーメッセージ、情報メッセージなど |ICMP            |ICMPv6            |
> |IP アドレスからリンク層アドレスの解決|ARP             |近隣探索（ICMPv6）|
> |リンク層アドレスからIP アドレスの解決|RARP            |近隣探索（ICMPv6）|
> |マルチキャストの機能                 |IGMP            |MLD（ICMPv6）      |
>
> CC BY-NC-SA

## レイヤー4：トランスポート層

ほとんどの通信はTCPが用いられるが、そのほかにもUDPがある。また、TCPだと機能が多すぎるけどUDPだと少なすぎるという用途のためにSCTPとかQUICがある。

SCTPがすでにあるのにそれに似たQUICというUDP上で構築されたものが出てきたのは

> [SCTPとは - Qiita](https://qiita.com/urakarin/items/dd1cb2f25e2c80178e5d#comment-121be4bc7bde1f27f790)
>
> QUICの動機として分析があるけど、結局、TCP/UDPじゃないと通信を通してもらえるか怪しくなる、はあるんでしょうね。
>
> **QUICのoverUDPはオーバーヘッドと現実解としての利便では利便が勝つってことでしょうし**

というコメントを見かけた

# ハブとかスイッチがどのレイヤーかわかりにくい問題

まずハブと言う言葉はL1でもL2でも見かける。L1のハブとは単に通信線をつなげただけのものに過ぎなかった。L2ハブではスイッチング機能(=MACアドレスを見て特定の機器にのみ伝える)を持つものが一般的になっている(スイッチングハブ)。

L2スイッチはスイッチングハブの機能に加えて、VLANを構成できる。

L3スイッチはVLAN間の通信の制御ができるルーター機能を持つ。

・・・と思ったが早速slackでツッコミが入った。

>VLANを構成できる機能はL2、L3と関係ないです。VLAN間の通信制御ができないL3SWもあります。VLANは中級編くらいなので、今は意識しなくて良いです。VLANが構成できるルータはポートVLANとタグVLANがあって・・・と説明すると長くなります。

> L2スイッチはあくまでもOSIのレイヤー2をみて通すということしか言ってない

VLANまわり理解することを諦めた。いつかきっとまた勉強しよう。

と言っていたら、slackでさらにコメントが付いて

> L2SWとL3SWに関しては、それぞれ、第2層（macアドレス）・第3層（IPアドレス）を元に流す先を決める…っていう程度の理解で問題ないと思いますー

> VLANはこの図を見てもらうのがなんとなくわかってもらえそう
> そしてとりあえずそのなんとなくレベルで今は良さそう
>
> ![img](https://milestone-of-se.nesuke.com/wp-content/uploads/2017/10/tag-vlan-1.png)

さらに

- [【図解】初心者にも分かる VLAN 入門〜仕組み,メリットや必要性について〜│SEの道標](https://milestone-of-se.nesuke.com/nw-basic/ethernet/vlan/)
- [【図解】トランクポートとアクセスポートの違い、trunk port に access port や PC を接続するとどうなるか│SEの道標](https://milestone-of-se.nesuke.com/nw-basic/ethernet/vlan-access-trunk/)

を見ると良いと言われた。あと実際に手を動かして勉強するためには
[CISCOスイッチ/ルータの無料エミュレーターの紹介 | Netassist Blog](https://milestone-of-se.nesuke.com/nw-basic/ethernet/vlan/)
のようなシュミレーターがあるらしい。

あとVLANのメリットは

> 1つのスイッチで複数のネットワークが使えて、切り替えられるのがメリットと考えてますー
>
> もしこれをVLAN使わずにそれぞれ分けたネットワークで構成するなら、ネットワークの数だけスイッチが必要になるところを、VLANを使えば1つで済ませられます
>
> さらに、アップリンク（上流側）はトランクポートにすることで、「VLAN=10」「VLAN=20」みたいなタグをつけて流すことができるので、複数のネットワークで同じ線を共有することができるようになりますー
>
> さっきの図だと、VLAN使わなければ営業部と開発部と幹部とで上下それぞれ3つずつスイッチが必要になる上に、それぞれを結線しないといけないのでスイッチ間の線も3本になるところが、VLANのおかげでスイッチ2つの線1本で済むっていう感じです

とのこと。

# 参考資料

- [OSI参照モデルまとめ - Qiita](https://qiita.com/tatsuya4150/items/474b60beed0c04d5d999)
- [OSI 7層モデル:Geekなぺーじ](https://www.geekpage.jp/technology/ip-base/osi7.php)
- [プロフェッショナルIPv6](https://professionalipv6.booth.pm/items/913273)
- [ダムハブ (dumb hub)とは｜「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典](https://wa3.i-3-i.info/word15164.html)
- [ダムハブとは (dumb hub)： - IT用語辞典バイナリ](https://www.sophia-it.com/content/%E3%83%80%E3%83%A0%E3%83%8F%E3%83%96)
- [L2スイッチとスイッチングハブの違い | 社内SEの教科書](https://shanai-se.net/l2%E3%82%B9%E3%82%A4%E3%83%83%E3%83%81%E3%81%A8%E3%82%B9%E3%82%A4%E3%83%83%E3%83%81%E3%83%B3%E3%82%B0%E3%83%8F%E3%83%96%E3%81%AE%E9%81%95%E3%81%84/)
- [L2スイッチとL3スイッチの違い | 社内SEの教科書](https://shanai-se.net/l2%e3%82%b9%e3%82%a4%e3%83%83%e3%83%81%e3%81%a8l3%e3%82%b9%e3%82%a4%e3%83%83%e3%83%81%e3%81%ae%e9%81%95%e3%81%84/)
- [5. 航空無線へのCDMA方式の適用可能性](https://www.enri.go.jp/report/hapichi/pdf2006/15.pdf)
- [ネットワーク・トポロジー - Wikipedia](https://ja.wikipedia.org/wiki/%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%83%BB%E3%83%88%E3%83%9D%E3%83%AD%E3%82%B8%E3%83%BC)
- [イーサネット - Wikipedia](https://ja.wikipedia.org/wiki/%E3%82%A4%E3%83%BC%E3%82%B5%E3%83%8D%E3%83%83%E3%83%88)
- [CSMA/CD - Wikipedia](https://ja.wikipedia.org/wiki/CSMA/CD)
- [CSMA/CA - Wikipedia](https://ja.wikipedia.org/wiki/CSMA/CA)
- [DIX 規格のフレームフォーマット – Tech Knowledge](https://blog.longest-road.com/contents/?p=827)
- [データグラム - Wikipedia](https://ja.wikipedia.org/wiki/%E3%83%87%E3%83%BC%E3%82%BF%E3%82%B0%E3%83%A9%E3%83%A0)
- [パケット - Wikipedia](https://ja.wikipedia.org/wiki/%E3%83%91%E3%82%B1%E3%83%83%E3%83%88)
- [SCTPとは - Qiita](https://qiita.com/urakarin/items/dd1cb2f25e2c80178e5d)

# License

[CC BY-NC-SA 4.0](https://creativecommons.org/licenses/by-nc-sa/4.0/deed.ja)

<a href="https://commons.wikimedia.org/wiki/File:Cc-by-nc-sa_icon.svg#/media/ファイル:Cc-by-nc-sa_icon.svg"><img src="https://upload.wikimedia.org/wikipedia/commons/1/12/Cc-by-nc-sa_icon.svg" alt="Cc-by-nc-sa icon.svg" width="120" height="42"></a>