どういう記事
情報処理安全確保士を受験したSE4年目。
ネットワークのこと何もわかってない気がしてきたので0から学ぶ記事
インフラマンではないので、「とりあえずイメージができる」が目標
知っていることも知らないことも学んだことは改めて書く
読んだ本はKindleの「Linuxで動かしながら学べるTCP/IPネットワーク入門」
ルータって何だっけ
パケットが目的地までに通る道順が経路(ルート)、経路中で通過するネットワーク機器がルータ
パケットが通過するルータの台数はインターネットにおける論理的な距離。これをホップ数という
ルータの役割はルータorホストからきたパケットを次のルータorホストに繋ぐこと、つまりバケツリレー
ルータが必要なのはセグメントが違う時だけ
ホストってなに
ルータではないコンピュータのこと、ルータとホストを区別せず、NWに繋がったコンピュータの総称をノードということもあるよ
TTLってなに
0~255の値が入るよ
初期ノードが初期値を設定するよ
ルータを1つ経過するごとに1つずつ値が減るよ
TTLが0になるとパケットはルータによって破棄されるよ
ルーティングテーブルって何だっけ
バケツリレーを誰に渡すかを管理しているもの
ノードがそれぞれ持っている
ルーティングテーブルが持っているのは宛先と次にパケットを渡す相手(=ネクストホップ)
デフォルトルート:どの宛先にも該当しないときに使う
ルーティングって何だっけ
ルーティングテーブルを使って、ネクストホップにパケットを転送する作業のこと
つまりバケツリレーはルーティング
セグメント間が通信するのにルータが必要、ホストやルータは自身が直接つながってない相手とルータを介して通信するためにルーティングエントリが必要
IPアドレスって何だっけ
ネットワーク部とホスト部って何だっけ
そもそも上記分ける理由は、ネットワークのセグメントを識別するため
つまりはネットワーク部が同じIPアドレスは同じセグメントに属している
24ビット目が区切りの場合は下記のように書く
- CIDR表記 192.0.0.1/24
- サブネットマスクでの表記 255.255.255.0
イーサネットって何だっけ
イーサネットはIPを含む上位層の通信を運ぶ役割を担う
LANケーブルを通り抜け、ルータまで辿り着く仕組みを担ってくれている
データリンク層と物理層に所属
データを送る単位のことをフレームという
IPのパケットは異なるフレーム(異なるトラック)に積み替えながら最終的な目的地まで届けられる
MACアドレス
フレームの送信元と送信先を管理する時に使われる
(集配所と集配所や集配所とお客さんの自宅のようなイメージ)
イーサネットのフレームを送受信するネットワーク機器ごとに付与される
48ビットで上位24ビットはベンダに割り当てられている
ARPの仕組み
ARPリクエストのフレームでは送信先のMACアドレスがff:ff:ff:ff:ff:ff
これはブロードキャストアドレスと言われ、届く範囲内の全ての機器に届いてほしいという意味
送信先がこれになっているものをブロードキャストフレームという
これが届く範囲をブロードキャストドメインという
送信元 < 「誰か〜〜〜〜!xxxのMACアドレス教えて〜〜〜〜〜〜!」
MACアドレスを知っている機器 < 「ooooだよ〜〜〜〜〜」
ブリッジって何だっけ
データリンク層でフレームを転送する機器のこと
同じブロードキャストドメインにたくさんのネットワーク機器をつなげることができるようになる
自身のどのポートにどのMAXアドレスの機器がつながっているかを管理することがお仕事
フレームがくると送信先のMACアドレスを読み取り、その機器がつながっているポートにフレームを転送
ブリッジはMACアドレステーブルでこれを管理している
スイッチングハブを一般化した概念
残っている課題
コンピュータが扱う通信の内容には色々な種類がある(アプリケーションの区別が必要)
パケットが経路上で破棄される恐れがある
解決するのがUDPとTCP
トランスポート層のプロトコル
ヘッダのポートというフィールドに入る16ビットの性の整数で区別する(=ポート番号)
マンションにおける部屋番号みたいなもの
サーバ側のポートはほぼ自動的に決まっているが、クライアント側はOSが自動的に選んで割り当てて決める
エフェメラルポートという
UDP
経路上でのパケットの破棄の問題は解決できない
TCP
信頼性のある通信の実現、経路上でパケットが破棄されても問題なし
相手に届いたことを確認しながら通信を進める
届かなかった時は同じデータを再び送る再送制御を行う
アウトオブオーダー送った順番と到着する順番が異なること
正しく認識して通信できる
スリーウェイハンドシェイクを行い、TCPのコネクションを確立する
3つのセグメントを送りあう
コントロールビット:TCPのヘッダに含まれるフィールド、スリーウェイハンドシェイクではSYNとACKのフラグのたったセグメントを送る
SYNはシーケンス番号の同期、シーケンス番号とはデータの順番を同期するのに使うフィールド
ACKは、あるセグメントがきちんと届いたことを意思表示するためのフラグ、これが返ってこない場合は再送制御で送り直す
あと残っているのはアプリケーション層
プロトコルは無数に存在する
HTTP
トランスポート層にTCPを用いるテキストベースのプロトコル
Webページの閲覧などに用いる
ポート番号は80
DNS
トランスポート層にUDPを用いるバイナリベースのプロトコル
ドメイン名をIPアドレスに変換する、名前解決を行うプロトコル
ポート番号は53
DHCP
トランスポート層にUDPを用いるバイナリベースのプロトコル
ポート番号は67
自動的にコンピュータのネットワークを設定するプロトコル
家庭などではデフォルトルートになるルータがDHCPサーバを兼任することが多い
あらかじめ配布するIPアドレスの範囲やデフォルトルートの情報を指定しておく
NATって何だっけ
IPアドレスを変換するという概念
みんな使っている(厳密にはNAPTが使われる)
これを使うと少数のグローバルアドレスを多数のプライベートアドレスで共有できる
プライベートアドレスとして予約されたプレフィックス
10.0.0.0/8
172.16.0.0/12
192.168.0.0/16
Source NAT
技術書に出てくるNATやNAPTは多くの場合上記
パケットの送信元IPアドレスを変換する
ルータが実施
送信元のプライベートIPアドレスを自身のインターフェースに付与されたグローバルIPアドレスに書き換え
戻りのパケットにおいても逆の処理をして書き換え
グローバルIPアドレスとプライベートIPアドレスを1:Nの関係で扱うため、トランスポート層のポート番号も書き換える(=NAPT)
インターネットに転送するパケットのIPアドレスとポート番号を必要に応じて書き換え、記憶する
NAPTではこの書き換え前と書き換え後の対応関係をセッションと呼び管理する
(※実際はチェックサムなども書き換えている)
Destination NAT
インターネットからきたパケットをLANにつながっているノードに転送できる
(例えば公開サーバあてのパケット)
送信先のポートが特定の値になっているTCPやUDPのパケットだけを書き換えてLANに転送
特定のポートに対してはインターネットを起点とした通信を許可する(「ポートを空ける」)