インターネットの仕組み: 概要

## 目次
- [概要](#概要)
- [インターネットとは？](#インターネットとは？)
- [インターネットの仕組み: 概要](#インターネットの仕組み:-概要)
- [基本概念と用語](##基本概念と用語)
- [インターネットにおけるプロトコルの役割](#インターネットにおけるプロトコルの役割)
- [IP アドレスとドメイン名について](#IP-アドレスとドメイン名について)
- [HTTP と HTTPS の概要](#HTTP-と-HTTPS-の概要)
- [TCP/IP を使用したアプリケーションの構築](#TCP/IP-を使用したアプリケーションの構築)
- [SSL/TLSによるインターネット通信の保護](#SSL/TLSによるインターネット通信の保護)
- [まとめ](#まとめ)

## 概要

この記事では、インターネットに関連していることを学んでいきます。例えば、IT機器（デバイス）などが、どのように繋がっていて、かつ、データの送受信を行なっているかなどを復習していければと思います。

インターネット関連で、学んだ書籍としては、

1. mastering TCP/IP（入門編）
2. mastering TCP/IP（情報セキュリティー編）
3. 図解入門 TCP/IP
4. DNSがよく分かる教科書
5. ネットワークはなぜつながるのか 

です。
色々、読んだな〜と思いつつ。かなり忘れていることが多々ありそう。個人的に面白かったのは、5.の書籍でした、
この書籍は、インターネットの仕組みにとどまらず、その背景などについて触れていることが多かったので、より、理解度が深まった書籍だったかなと。

バックエンドの開発をしていて、普段インフラにあまり触れてないよいう方にもオススメ！かなと思います。

## インターネットとは？

インターネットが何もんなのか学ぶ前に、まず、ネットワークに関して理解する必要があります。

ネットワークとは、コンピュータ、その他IT機器（デバイス）のグループがお互いに、繋がった状態ことである。
そして、これら全てのネットワークが相互に接続されると、インターネットが形成されます。

開発者（バックエンドエンジニア）としては、インターネットの仕組みと、それを支えるさまざまなテクノロジーやプロトコルをしっかりと理解することが不可欠である。

## インターネットの仕組み: 概要

インターネットでデータを転送する際には、それぞれルールがあり、データを送るときは、データを細かく分割して送ってる。さらにデータ（パケット）を送るときは、IT機器からルーターにデータを送って、ルータがデータ（パケット）の検証を行い、ルーター間でデータ（パケット）を転送して、最終目的地まで送信すると。

ではここで問題になるのが、どうやってデータ（パケット）を安全に、かつ、確実に送るのか？といこと。

それを担保するために、TCP/IPという、ルールがあるよと。
TCPは、データ（パケット）のが正しい順序で送信されていることを保証し、IPは、データ（パケット）を正しい目的地までデータ（パケット）を送ることを保証していると。

他にも、DNS、HTTP,SSL/TLSがあるので、開発者は、これらも理解する必要があります。

## 基本概念と用語

|  用語  |  定義  |
| ---- | ---- |
|  Packet（パケット）  |  インターネット上で送信される小さなデータ単位。  |
|  R0uter（ルーター）  |  異なるネットワーク間でデータのパケットを転送するデバイス。  |
|  IP アドレス  |  ネットワーク上の各デバイスに割り当てられる一意の識別子。データを正しい宛先にルーティングするために使用されます。  |
|  Domein Name（ドメイン名）  |  Web サイトを識別するために使用される人間が読める名前 (google.com など)。  |
|  DNS  |  ドメイン ネーム システムは、ドメイン名を IP アドレスに変換する役割を果たします。  |
|  HTTP  |  ハイパーテキスト転送プロトコルは、クライアント (Web ブラウザなど) とサーバー (Web サイトなど) の間でデータを転送するために使用されます。  |
|  HTTPS  |  クライアントとサーバー間の安全な通信を提供するために使用される HTTP の暗号化されたバージョン。  |
|  SSL/TLS  |  Secure Sockets Layer および Transport Layer Security プロトコルは、インターネット上で安全な通信を提供するために使用されます。|

## インターネットにおけるプロトコルの役割

プロトコルは、インターネットを上でデータを交換し、コミュニケーションを可能にするのに重要な役割を果たしている。例えば、IP、TCP、UDP、DNSなど、様々ある。

これらの標準化したプロトコルを使用するメリットは、異なるメーカーのIT機器間でもデータを送ることが可能になるということである。

## IP アドレスとドメイン名について

IPアドレスとドメインネームは、インターネットの動きを理解する上で、とても重要な概念です。

IPアドレスは、ネットワーク上で、IT機器に一意に割り当てられた識別子（数字）のことであり、、、

ドメインネームは、人間が読みやすくなっているも文字のことであり、IPアドレスと変換できるものである。
DNSは、ドメインネームとIPアドレスに変換するものである。

DNSとIPアドレスの対応関係を調べるには、```dig```コマンドが便利である。

下記が、```google.com```を引数にして、実行した例である。

```
(base) yuya.k@mbp ~ % dig google.com

; <<>> DiG 9.10.6 <<>> google.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 11265
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;google.com.			IN	A

;; ANSWER SECTION:
google.com.		111	IN	A	XXX.XXX.XXX.XX

;; Query time: 31 msec
;; SERVER: XXXXXXXXXXXXXXXXX
;; WHEN: Fri Jun 02 17:59:05 JST 2023
;; MSG SIZE  rcvd: 44

(base) yuya.k@mbp ~ % 
```

こんな感じで、対応関係が分かると・・・
※一応、```XXX.XXX.XXX.XX```で書き変えてます。

```
;; ANSWER SECTION:
google.com.		111	IN	A	XXX.XXX.XXX.XX
```

## HTTP と HTTPS の概要

HTTPとHTTPSは、もっともよく使用されるプロトコルである。
HTTPは、クライアントと、サーバ間でデータを転送する際に使われるプロトコルであり、HTTPSは、HTTPでのデータ転送をより安全にするプロトコルのこと。HTTPでの通信にSSL/TLSを使用することでデータを暗号化している。

具体的には、下記のドメインネームの左側に「鍵」マークがあれば、HTTPSでデータ送信されるということを示してます。

![スクリーンショット 2023-06-02 18.15.57（2）.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/852279/49dbdfe6-2c2c-36b5-b5b8-657529b7c09a.png)

## TCP/IP を使用したアプリケーションの構築

|  用語  |  定義  |
| ---- | ---- |
|  port |  デバイス上で実行されているアプリケーションまたはサービスを識別するために使用されます。 各アプリケーションまたはサービスには一意のポート番号が割り当てられ、データを正しい宛先に送信できるようになります。  |
|  socket  |  IP アドレスとポート番号の組み合わせであり、通信の特定のエンドポイントを表します。 ソケットは、デバイス間の接続を確立し、アプリケーション間でデータを転送するために使用されます。  |
|  connections  |  2 つのデバイスが相互に通信したい場合、2つのソケット間に接続が確立されます。 接続確立プロセス中に、デバイスは最大セグメントサイズやウィンドウサイズなどのさまざまなパラメータをネゴシエートし、接続上でのデータの送信方法を決定します。 |
|  Data Transfer  |  接続が確立されると、各デバイスで実行されているアプリケーション間でデータを転送できます。 データは通常セグメントで送信され、各セグメントには信頼性の高い配信を保証するためのシーケンス番号とその他のメタデータが含まれます。 |

## SSL/TLSによるインターネット通信の保護

SSL/TLS通信をする際に、理解すべき概念は、すくなくとも下記３つである。

|  用語  |  定義  |
| ---- | ---- |
|  Certificates（証明書） |  SSL/TLS 証明書は、クライアントとサーバー間の信頼を確立するために使用されます。 これらにはサーバーの ID に関する情報が含まれており、その信頼性を検証するために信頼できる第三者 (認証局) によって署名されています。  |
|  Handshake（ハンドシェイク） |  SSL/TLS ハンドシェイク プロセス中に、クライアントとサーバーは情報を交換して、安全な接続のための暗号化アルゴリズムやその他のパラメーターをネゴシエートします。  |
|  Encryption（暗号化） |  証明書: SSL/TLS 証明書は、クライアントとサーバー間の信頼を確立するために使用されます。 これらにはサーバーの ID に関する情報が含まれており、その信頼性を検証するために信頼できる第三者 (認証局) によって署名されています。

## まとめ

インターネットは、標準セットの通信プロトコルを使用してデータを交換する、相互接続されたコンピューターのグローバル ネットワークです。
インターネットは、IP や TCP などの標準化されたプロトコルを使用してデバイスとコンピュータ システムを接続することで機能します。
インターネットの中核は、異なるデバイスやシステム間のトラフィックを誘導する、相互接続されたルーターのグローバル ネットワークです。
理解しておく必要がある基本的な概念と用語には、パケット、ルーター、IP アドレス、ドメイン名、DNS、HTTP、HTTPS、および SSL/TLS が含まれます。
プロトコルは、インターネット上での通信とデータ交換を可能にし、さまざまなメーカーやベンダーのデバイスやシステムがシームレスに通信できるようにする上で重要な役割を果たします。