Posted at

webエンジニアでも始めるサーバー・ネットワーク入門【ネットワークの基礎の基礎】

みなさま年の瀬をいかがお過ごしでしょうか。

私は普段Ruby/Railsを中心としたバックエンドエンジニアとしてお仕事していますが、最近ミドルウェアやインフラにも興味を持ち始めました。

Railsなどの強力なwebフレームワークの登場とAWS/GCPなどのクラウドインフラの進化に伴い、バックエンドエンジニアとてインフラ周りまである程度こなせることが期待されるようになってきたこともあり、そろそろ足を踏み入れてみようかなぁという感じです。

今回はネットワークの基礎についてざっくりまとめました。


サーバーとは

ネットワークの前に、サーバーについて簡単にご説明をば。

webサーバー、アプリケーションサーバー、DBサーバー、メールサーバーなど、いろいろな名称のサーバーを聞いたことがあるかもしれません。

サーバーとは、ネットワーク上のクライアントに対してサービスを提供するコンピューターのことです。

例えば、webブラウザ(クライアント)からwebサイトにアクセスする際には、webサイトのコンテンツを提供するためのwebサーバーがクライアントに対してコンテンツデータを返します。

ざっくりいうと、「クライアントに対して何らかのサービスを提供してくれるソフトウェアがインストールされているコンピューター」という感じです。


ネットワークとは

先ほど説明したサーバーは、クライアントとやり取りをするためにネットワークを介してデータの送受信を行います。

例えば、youtubeを見るためにはスマホやpcをWiFiに接続してインターネットを介して動画を閲覧できます。

このように、サーバーとクライアントの橋渡しを行うものとしてネットワークが必要になります。

ネットワークはOSI参照モデルという、いわば「データが通信する際のルール(プロトコル)」によってその仕様が定められています。

プロトコルは下記の7つのレイヤーに別れています。

各レイヤーはお互いが参照・被参照関係にあり、上位層は下位層に対して抽象化されています。

名称
レイヤー
概要

アプリケーション層
7
アプリケーションごとのサービスを提供する方法を規定
HTTP

プレゼンテーション層
6
アプリケーションデータを通信に適した形に変換する方法を規定
FTP

セッション層
5
コネクションの確立と切断について規定
HTTPなど

トランスポート層
4
データを通信相手に確実に届ける方法を規定
TCP, UDP

ネットワーク層
3
同一もしくは異なるネットワークの危機と接続するために、アドレスと経路の選択方法を規定
IP, ICMP, ARP

データリンク層
2
直接接続された機器との間にデータリンクを確立する方法を規定
イーサーネット

物理層
1
ネットワークケーブルの材質やコネクタの形状など、物理的な要素を全て規定
イーサーネット

webブラウザからのアクセスに対して、webサーバーが応答した際の挙動を例にあげると、ざっくり下記のような感じです。

レイヤーが下がる毎に、データをカプセル化します。逆にレイヤーが上がる毎に非カプセル化がなされます。

ネットワークの基本.png


ネットワーク層

ネットワーク層で最も重要なプロトコルの一つにIPが挙げられます。

ネットワーク層では、レイヤー4から渡されたデータに対して、パケットの送り先を意味するIPヘッダーを付けてパケットにします。

IPパケットは配達する荷物であり、IPヘッダーは伝票番号(送付先、送付元などが記載されている)といったイメージです。

また、IPはIPアドレスという32ビットの識別番号を使用してコンピューターを識別します。

IPアドレスは0.0.0.0から255.255.255.255まで約43億個ありますが、使用用途・使用場所などによって扱える範囲が決まっています。


使用用途

使用用途に応じてクラスA~クラスEまで分類されています。

一般的にはクラスA~クラスCを使用します。

クラスA~クラスCまでの違いはざっくりいうとネットワークの規模の違いです。


使用場所

グローバルIPアドレスプライベートIPアドレス に分けられます。

グローバルIPアドレスは、インターネットの世界において一意の値となる必要があります。

プライベートIPアドレスは組織や家庭内のLAN内で自由に割り当てて良いアドレスです。


トランスポート層

トランスポート層では通信制御とサービスの識別を行います。

アプリケーションが求める通信要件を信頼性と即時性の2つに分け、それぞれの用途に分けてプロトコルが存在します。


信頼性

通信するコンピューター同士が「データを送りました」、「データを受信しました」などとやり取りをすることによって通信の信頼性を高めるためのプロトコルをTCPと呼びます。

データの送受信で取りこぼしがあると困るようなケースではこちらを使用します。


即時性

TCPとは異なり、データの送受信における確認を行わないため通信の即時性を高めるプロトコロルをUDPと言います。


ポート番号

TCPもUDPも、ポート番号を利用してコンピュータの中のどのアプリケーションに対してデータを送れば良いかを識別しています。

ポート番号は、コンピュータの中で動作しているアプリケーションを識別するために使います。

ポート番号は0~65535までの範囲で存在します。

0~1023はウェルノウンポートといい、webサーバーやメールサーバーなどの一般的なサーバーソフトウェアがクライアントからの要求を受け取るときに使います。


参考