Help us understand the problem. What is going on with this article?

図解!ネットワークの7層を実務に当てはめてみた

ランサーズ Advent Calendar 2019 19日目担当の@manamin0521mです!

サーバーサイド力を上げていくぞ💪という機運なのと、ネットワークがわからなくて詰んだことが立て続けにあったので、最近はマスタリングTCP/IP 入門編 第5版を読んでいます。そこで今回はこちらの本を読んで学んだネットワークについて紹介します。

ネットワークの勉強をする上で躓くのは以下の3点ではないでしょうか?
①知識がどう役立つのかよくわからない
②何に使われているのかわからない
③用語が難しくて覚えるのが大変

そこで今回の記事ではそれらのギャップを埋められればと思います。初学者の方対象です。

ネットワークの知識がなくて困ったとき

・AWSの構成図がいまいち読めない
・ポートとIPアドレスの違いがいまいち説明できない
・IPアドレスを固有のものだと思いこんでいて認識がズレる
・雰囲気でdocker-compose up -dしている
・ルーターとハブの違いが説明できない

これらはOSI参照モデルの各層での役割がわかるようになったことで、以前より理解が深まりました◎
また新卒時の面接で「リンクを押してからページが表示されるまでに何が起きてるか説明できる?」と二社くらいから聞かれたことをふと思い出したので、面接対策としてもOSI参照モデルを覚えることは有効かと思います。

OSI参照モデルを図にまとめてみた

対応関係がわかりやすくなるよう図にまとめてみました。細かい用語は下記にて解説しますので対応させてみてください🙆※なおWeb系の企業でよく使われているものを中心に紹介しています。スマホからの場合は拡大して見てください。
スクリーンショット 2020-01-27 13.28.22.png

なお、アプリケーション層側を上位層、物理層側を下位層と呼びます。
現在ではあまり使われていないものはカッコ書きで記載してあり、該当するものがない場合、空白になっています。

前提知識

プロトコル

通信相手の同じ階層とやり取りするときの約束ごとです。
例えば日本語とイタリア語だと言語として違います。そこでやりとりするときは英語!というように取り決めることで、データをどの環境でも読み取り・書き込みできるようにします。
プロトコル
引用:Linux道場ネットワーク編

OSI参照モデルとTCP/IPモデルの違い

何を中心に考えてモデル化されているかの違いです。

OSI参照モデル:通信プロトコルに必要な機能は何か
TCP/IPモデル:プロトコルをコンピュータを実装するにはどのようにプログラミングしたらいいか。

TCP/IPモデルがOSI参照モデルと大きく違うのはアプリケーション層からセッション層といった3層が1層として捉えられている点です。コンピュータ自体はTCP/IPモデルで動いているのですが、OSI参照モデルが基本の考え方となるので、この記事ではOSI参照モデルの層について解説します。
スクリーンショット 2019-12-19 3.59.36.png

なぜ層に分かれているか

7層に分けて機能を分割することで、複雑なネットワークプロトコルを単純化することができるからです。層ごとに抽象化して実装すれば下位層の具体的なことを意識せずに上位層を実装できるようになります。

たしかに層にわかれていることで、各プロトコルの役割がわかりやすくなったかと思います。

ノード

通信を行うコンピュータのこと。

ヘッダ

データの送信側では、上位層から渡されたデータに自分の階層のプロトコル処理に必要な情報を「ヘッダ」としてつけています(カプセル化と言う)。逆に受信側では受信したデータを処理して、「ヘッダ」と上位層への「データ」に分離します。

ヘッダについて
引用:TCP/IPをはじめから

7層の役割と具体例

概要

yakuwari

アプリケーション層

具体的なアプリケーション(メール、ファイル転送、HTTPなど)を実現します。

プロトコル:HTTP・FTP・SMTP・DNS

HTTP:Webサーバーとユーザーが相互に通信するための仕組み
FTP:ファイル転送の仕組み
SMTP:メール転送の仕組み
DNS:ドメイン名をIPアドレスに自動変換する仕組み

ヘッダ:URLなど

HTTP通信においてはURLがヘッダ情報になります

具体例:ALBなど

ALB(Application Load Balancerの略)はアプリケーション層のロードバランサのため、URL単位での負荷分散が可能です。ヘッダ情報はURLを見ているのでアプリケーション層に属します。※トランスポート層のロードバランサであるCLB(Classic Load Balancerの略)もありますが、弊社で使用しているロードバランサはALBです。

ALB
引用:https://aws.amazon.com/jp/blogs/news/new-aws-application-load-balancer/

プレゼンテーション層

機器ごとの固有のデータ表現形式(データフォーマット)などをネットワーク共通のデータ形式に変換しています(符号化という)。
同じbit列(0と1の数字の列)でも機器が変われば違う意味に解釈される場合があるので、プレゼンテーション層で他の機種(iOSとWindowsなど)とデータの表現形式の整合性を取ることができます。

Shift_JISやUTF-8などの文字コードはデータフォーマットの1種です。

セッション層

コネクションの確率や切断、転送するデータの切れ目を決めるなど、データ転送に関する管理を行います。

ログイン・ログアウトなどでの通信の手順を決めるという説明がわかりやすいかと思います。

プロトコル:SSL

SSLはhttp通信を暗号化しています。(httpsから始まるURLの場合)

(追記)SSLがどのプロトコルかについてはいろいろな解釈があるようです
参考:https://takehikom.hateblo.jp/entry/20150803/1438601460

トランスポート層

コネクションの確率や切断の処理を行います。(セッション層ではコネクションの手順を決めるだけなのでトランスポート層で実行されます。)宛先のアプリケーションにデータを確実に届ける役目があります。ノードだけで処理され、ルーターでは処理されないので、実際に転送はされません(転送はネットワーク層)。

プロトコル:TCP・UDP

TCP:Transmission Control Protcolの略。データの伝達が保証されます。接続先の相手にコネクションを張ることで、データの抜け漏れがチェックされます。※コネクションとはデータ送信を確認する前に受信側と送信側で回線の接続をすること。

TCP
引用:TCPとUDPの特徴

UDP:User Datagram Protocolの略。データの伝達を保証しないため高速です。途中でパケットが失われても再送制御や順序制御をしないコネクションレス型のためです。DNSや動画サービスなどで利用します。

UDP
引用:TCPとUDPの特徴

ヘッダ:ポート番号

コネクションで転送したデータがどのアプリケーションに渡るかを決定します。同一のコンピューター内で通信を行っているプログラムを識別する時に利用します。

具体例:Security Group

AWSのSecurity Groupはネットワーク(ポートやIPアドレス)ごとに通信を制御する仕組みです。
Security Group
引用:https://recipe.kc-cloud.jp/archives/22

ネットワーク層

ネットワークとネットワークが接続された環境で宛先までデータを届ける役割を持ちます。ルーターでつながった先に複数のネットワークがある場合があるため、どの通信経路を使うかなどの経路選択の役割も持ちます。
なおネットワーク層だけではデータの伝達性は保証されていません。
図
引用:OSI 参照モデル - Cisco

ヘッダ:IPアドレス

TCP/IPネットワーク上に接続されているホストやルーターを識別するためのもの。

具体例:ルーター

パケットを中継する装置のこと(パケット交換機ともいう)
パケットはデータの基本的な単位でデータを小分けしたもののことです。

ハブ
引用:amazon.co.jp

データリンク層

物理層で直接接続されたノード間、1つのイーサネットに接続された2つのノード間での通信を可能にします。
図
引用:OSI 参照モデル - Cisco

プロトコル:イーサネットなど

有線LANで最も利用されているプロトコルです。

(追記)なおこちらで以下のように解説されている通り、イーサネットについてはTCP/IPモデルのネットワークインターフェース層(OSI参照モデルのデータリンク層+物理層)のプロトコルとして考えたほうがよさそうです。

イーサネットや TCP/IP プロトコル群が、必ずしもOSI参照モデルの7階層に合わせて設計されているわけではありません。

ヘッダ:MACアドレス

MACアドレスは同一のデータリンクに接続されたコンピュータを識別するためのものでコンピュータごとに固有のものです。

具体例:スイッチングハブ(ブリッジ)

複数のコンピューター同士が相互に通信できるよう接続し、通信の中継をおこなう集線装置の一種です。
ルーター
引用:amazon.co.jp

物理層

bit列(0と1の数字の列)を電圧の高低や光の点滅に交換したり、逆にbit列に変換します。

具体例:LANケーブル

LANケーブル
引用:amazon.co.jp

OSI参照モデルのデータの流れ

リンクを押してからWebページが表示されるまでの流れを解説します

LANケーブル
引用元:http://www.f.waseda.jp/kane/sp_net/chap_4.html

①まず送信側はURLを知っていてもIPアドレスを知りません。そこでアプリケーション層プロトコル(DNS)のドメイン名を入力し、トランスポート層(DNSのためプロトコルはUDP)を通して、ネットワーク層からインターネットを経由します。そして受信側のアプリケーション層にあるDNSにドメイン名に対応するIPアドレスを問い合わせます。(このようにドメイン名からIPアドレスを取得することを名前解決といいます)
スクリーンショット 2019-12-19 14.03.09.png

②受信側のDNSサーバーで取得したIPアドレスをもとにネットワーク層からインターネットを経由します。その後アプリケーション層プロトコル(HTTP)のWebサーバーに問い合わせ、HTMLファイルを取得します。
スクリーンショット 2019-12-19 14.03.01.png

③アプリケーション層のHTTPファイルをネットワーク層からインターネットを経由して送信し、URLを入力したPCにWebページが表示されます。
スクリーンショット 2019-12-19 14.04.44.png

最後に

もう一度、ぜひ図をみて対応関係を理解していただければと思います!
図に戻る

OSI参照モデルの7層は基本情報にも出る基礎知識なので、覚えておくといろんな場所で役立ちます。私も今後、OSI参照モデルに当てはめながら考えるようにしたいです。

参考

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした