ネットワークを流れる「パケット」ってどう流れるの?
システムサービス部の白木です。
以前はシステム開発作業をメインで行っていましたが、東京支社在籍中にインフラ担当に任命され、気が付いたら社内ネットワークの管理を行うようになっていました。
皆さん普段ネットワーク上で様々な情報をやり取りしながら業務を行っていると思いますが、今回はネットワーク上をメッセージやデータがどのように流れていくのか?について書いてみたいと思います。
そもそも「パケット」とは何か?
ネットワーク構築をしていると、「パケットが届いていない」とか、「TCPはパケットが欠落しても再送制御されるから~」といった感じで「パケット」という言葉が使われることがあります。
そもそも「パケット」とは何か?
英語のpacketを直訳すると「小包」という意味ですが、ネットワークにおけるパケットは
「OSI 7階層参照モデルにおけるネットワーク層(Layer3)の通信におけるデータ通信の単位」
と定義されています。
もう少し簡単に言うと、ネットワーク間で通信しやすいように分割されたデータのかたまりです。
どうやって「パケット」は作られるのか?
アプリケーション層(ブラウザ等)で投入された「データ/メッセージ」は、以下のように細分化されます。
Layer4(トランスポート層) :
セグメント(TCPの場合)、データグラム(UDPの場合)
▼
Layer3(ネットワーク層) :パケット
▼
Layer2(データリンク層) :フレーム
▼
Layer1(物理層) :ビット(電気信号のON/OFF)
ネットワーク層でのやり取りでは「パケット」が使われます。
ちなみに、「L2スイッチ」や「L3スイッチ」という言葉をよく聞きますが、これもOSI 7階層参照モデルにおける階層(Layer2→L2、Layer3→L3)に由来しています。
(ルーティング機能があればL3スイッチ、ルーティング機能がなければL2スイッチと考えるとわかりやすい)
なぜ「パケット」に分割するのか?
ネットワーク上に2台しかPCがない場合、回線を占有することができるのでデータを分割しなくても大容量のデータを送信することができます。
しかし、複数台のPCが参加するネットワークの場合、1台のPCが大容量のデータを送信している間、回線を占有してしまうと他のPCがデータを送信することができなくなってしまいます。
(Wi-FiでもLANケーブルでも同じ考え方です)
そこで、複数台のPCが同時にデータ送信できるようするために考えられたのが「パケット交換方式」と呼ばれるものです。
データを「パケット」に分割して回線の占有時間を短くすることで、複数台が回線を共有できるようにしているのです。
実際に「パケット」はどのようにして流れていくのか?
下図のようなネットワーク構成の場合、John doeさんのPC(左上)からJane doeさんのPC(右上)へメッセージを送る時、「パケット」はどのようにして流れていくのでしょうか?
ネットワーク機器がバケツリレー!
Hubやルーター等のネットワーク機器を接続することでネットワークは構築されています。
ネットワーク機器というと、すごく複雑な動作をしているイメージをお持ちの方もいらっしゃるかもしれませんが、その動作はいたってシンプルです。
判断条件は1つ。
自身が知っている(設定を持っている)ネットワークセグメントに対する通信か?です。
【条件を満たすor満たさない】に応じて、それぞれ決まった動作をします。
a) 自身が知っているネットワークセグメントが宛先の場合
⇒送り先として紐付けされているノード(ルーター/PC)に「パケット」を渡す
b) 自身が知らないネットワークセグメントが宛先の場合
⇒デフォルトゲートウェイとして紐付けされているノード(ルーター/PC)に「パケット」を渡す
これを接続されているネットワーク機器が繰り返して「パケット」を相手方まで送り届ける、まさにバケツリレーを行っているのです。
メッセージの行方1~インターネットに出るまで~
メッセージの送信先であるJane doeさんのPCは、John doeさんのPCが知っているネットワークには所属していません。
この場合、上記のルールb)に該当するので、PCのデフォルトゲートウェイであるルーターAへメッセージが送信されます。
この時、メッセージ(データ)はセグメント、パケットへと分解されて、次々とルーターAへ送り出されます。
ルーターAでは、John doeさんのPCと同じように、宛先(Jane doeさんのPC)が自分の知っているネットワークセグメントなのかを確認します。PCの場合と同様に知らないネットワークなので、デフォルトゲートウェイ(e.g.プロバイダーのルーター)となるルーターBへパケットを送り出します。
メッセージの行方2~インターネットに出てから~
ルーターB、C、D、Eでも先のルーターAと同様に、相手先が知っているネットワークセグメントなのか?を判断して次のネットワーク機器に「パケット」を渡していきます。
この時、仮にルーターB、C、D、Eが同じAS番号[参考1]に所属していて、iBGPプロトコルで情報をやり取りしている場合、Jane doeさんの宛先を知っているルーターEの情報は、同じAS番号に所属するルーターB、C、Dも知ることができます。(BGPにおけるルートリフレクター等の仕組み等で)
ルーターBからルーターEまではどのルートでも通れますが、経由するルーター数、冗長構成の有無、相互接続回線の太さ等のいくつかの重み付けにより、ルーティング先が動的に変わることがあります。
[参考1] AS番号とは、運用組織(プロバイダー等)単位で独立したネットワークを指します。
https://xtech.nikkei.com/atcl/nxt/mag/nnw/18/041800010/071500042/
さいごに
以上のように、単純なルールを基本原理として各種ルーターが「パケット」の受け渡しを行うことで、相手先にデータを届けることが出来るようになっています。
このTCP/IPの世界は「Simple is the best.」を体現しているのでは?と私は考えるのですが、
皆さんはいかがでしょうか。
ユニゾンシステムズでは、一緒に働く仲間を募集しています。
ぜひ一度オフィスに遊びに来てみませんか?お気軽にDMもお待ちしています!
求人の詳細はこちら: https://www.unixon.co.jp/recruit/
Youtube: https://www.youtube.com/channel/UCGacmgfpJ0fkHC0aKrSppVw
Twitter: https://twitter.com/unixon_recruit
この記事が気に入ったらサポートをしてみませんか?