[CS50] week6 - HTTP

# 初めに

https://www.youtube.com/watch?v=6iXhAZKOVGE&list=PLhQjrBD2T382VRUw5ZpSxQSFrxMOdFObl&index=12

https://www.youtube.com/watch?v=alnzFK-4xMY&list=PLhQjrBD2T380F_inVRXMIHCqLaNUd7bN4&index=9

https://www.youtube.com/watch?v=04GztBlVo_s&list=PLhQjrBD2T381k8ul4WQ8SQ165XqY149WW&index=30

https://www.youtube.com/watch?v=A1g9SokDJSU&list=PLhQjrBD2T381k8ul4WQ8SQ165XqY149WW&index=35

https://www.youtube.com/watch?v=GP7uvI_6uas&list=PLhQjrBD2T381k8ul4WQ8SQ165XqY149WW&index=48

https://www.youtube.com/watch?v=4axL8Gfw2nI&list=PLhQjrBD2T381k8ul4WQ8SQ165XqY149WW&index=27

https://www.youtube.com/watch?v=YK78KhMf7bs&list=PLhQjrBD2T381k8ul4WQ8SQ165XqY149WW&index=26

https://www.youtube.com/watch?v=Ub3FKU21ubk&list=PLhQjrBD2T381k8ul4WQ8SQ165XqY149WW&index=12

https://www.youtube.com/watch?v=Z93IaNfavZw&list=PLhQjrBD2T381k8ul4WQ8SQ165XqY149WW&index=32

# Memo
**URL & URI**

https://danielmiessler.com/study/difference-between-uri-url/

**Query String**

https://github.com/sindresorhus/query-string

https://github.com/ljharb/qs
 
# IPv4 vs. IPv6
IPアドレスの数：
- IPv4：32-bitで`2^32`個アドレスが割り当てられる。
- IPv6：128-bitで`2^128`個アドレスが割り当てられる。

表記と表現：
- IPv4：`2^8`.`2^8`.`2^8`.`2^8` (8-bit * 4 = 32-bit)
- IPv6：`2^16`:`2^16`:`2^16`:`2^16`:`2^16`:`2^16`:`2^16`:`2^16` (16-bit * 8 = 128-bit)
    - IPv6では16進数で表記する。

```:example
IPv4: 255.255.255.255
IPv6: 65535:65535:65535:65535:65535:65535:65535:65535 ×
IPv6: 1234:5678:90ab:cdef:fedc:ba09:8765:4321 ○

IPv6: 2001:4860:4860:0000:0000:0000:0000:8844 ○
IPv6: 2001:4860:4860:0:0:0:0:8844 ○
IPv6: 2001:4860:4860::8844 ○

IPv6: 2001:0DB8:0120:0000:0000:0000:0000:98BC ○
IPv6: 2001:DB8:120::98BC ○
```

接続方式が違い：
- IPv4：PPPoE（最大1Gbps）
- IPv6：IPoE（最大10Gbps）

その他：
- IPv4とIPv6とは互換性がない。
- セキュリティの強度が違う。（IPv6ではIPsecが標準で搭載されている。）
- パケット転送時行う処理が違う。

# DHCP
https://www.infraexpert.com/study/tcpip13.html

**DHCP(Dynamic Host Configuration Protocol)**
**ネットワークに接続するとき、IPアドレスなど通信に必要な設定情報を自動的に割り当てるプロトコル。**
DHCPv4がIPv4バージョンで、DHCPv6がIPv6バージョンです。

IPv6にはDHCPv6のほか、SLAAC（Stateless Address Autoconfiguration）によってアドレスを自動設定することができる。（SLAACはICMPv6に基づく。）

https://learningnetwork.cisco.com/s/blogs/a0D3i000003nO1wEAE/dhcpv6-%E3%82%B9%E3%83%86%E3%83%BC%E3%83%88%E3%83%95%E3%83%AB%E3%82%B9%E3%83%86%E3%83%BC%E3%83%88%E3%83%AC%E3%82%B9%E3%81%AE%E5%88%86%E6%9E%90

IPv6ネットワークでの動的な割り当て方法：
- SLAAC（Stateless Address Autoconfiguration）
- DHCPv6（Dynamic Host Configuration Protocol for IPv6）

RA（Router Advertisement）メッセージを確立する設定：
- SLAAC（RAメッセージのみ）
- DHCPv6ステートフル（DHCPv6のみ）
- DHCPv6ステートレス（RAメッセージとDHCPv6メッセージ）

（ステートフルとステートレスの違い：利用可能なIPv6アドレスやIPv6アドレスのリストなど保持しているかどうかの状態により分けられている。）

https://www.infraexpert.com/study/ipv6z5.html

https://www.youtube.com/watch?v=jlG_nrCOmJc

# TCP & UDP
https://www.itmanage.co.jp/column/tcp-ip-protocol/#anc002

**TCP(Transmission Control Protocol)**
**コネクション型・ストリーム指向の通信プロトコル**
確実性重視／信頼性高い／低速／Webサイト閲覧、メール送受信、ファイル転送など

**UDP(User Datagram Protocol)**
**データグラム送信を実現する通信プロトコル**
リアルタイム重視／信頼性低い／高速／VoIPなどによる音声通話、映像配信、Web会議など

# Common Port & Protocol

https://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers



- **Ports 20 & 21**: File Transfer Protocol (**FTP**)
    - **ファイル転送プロトコル。**
    - 21番接続（制御）、20番データ送受信。

- **Port 22**: Secure Shell (**SSH**)
    - **リモートコンピュータと通信するプロトコル。**
    - **公開鍵暗号方式が利用できるため、Telnetより安全性が高い。**
    - **TelnetとSSH、どちらもCUIで操作を行う。**

- **Port 23**: (**Telnet**)
    - **リモートコンピュータと通信するプロトコル。**
    - **通信内容が暗号化されていない。**
    - **TelnetとSSH、どちらもCUIで操作を行う。**

- **Port 25**: Simple Mail Transfer Protocol (**SMTP**)
    - **電子メール送信するプロトコル。**

- **Port 53**: Domain Name System (**DNS**)
    - **ドメイン名をIPアドレスに変換するプロトコル。**

- **Port 58**: Internet Control Message Protocol for IPv6 (**ICMPv6**)
    - **IPv6で使用されるICMPプロトコル。**
    - **ICMPはICMPエコー要求メッセージを受け取ると、送られたデータそのまま応答を返すという仕組みです。Ping監視（死活監視・可用性監視）とも呼ばれる。（もともとPingにはポートの概念がないけれど）**

https://www.infraexpert.com/study/ipv6z12.html

https://www.n-study.com/tcp-ip/ping/#:~:text=Ping%E3%81%AE%E4%BB%95%E7%B5%84%E3%81%BF%E3%81%AF%E3%81%A8%E3%81%A6%E3%82%82,%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E3%81%9D%E3%81%AE%E3%81%BE%E3%81%BE%E9%80%81%E3%82%8A%E8%BF%94%E3%81%97%E3%81%BE%E3%81%99%E3%80%82

- **Port 67**: Dynamic Host Configuration Protocol (**DHCP** server)
    - **DHCPサーバ宛にパケットを送るポート。**

- **Port 68**: Dynamic Host Configuration Protocol (**DHCP** client)
    - **DHCPクライアント宛にパケットを送るポート。**

https://www.infraexpert.com/study/tcpip13.html

- **Port 80**: Hypertext Transfer Protocol (**HTTP**)
    - **Webサーバとクライアントの間でデータ送受信するプロトコル。**

- **Port 110**: Post Office Protocol (**POP3**)
    - **電子メール受信するプロトコル。**
    - メールデータを端末にダウンロードしてローカルで管理する。

- **Port 123**: Network Time Protocol (**NTP**)
    - **あらゆるマシンの時刻情報を同期するプロトコル。**

- **Port 143**: Internet Message Access Protocol (**IMAP4**)
    - **電子メール受信するプロトコル。**
    - 端末でなくサーバにメールデータを保存し管理する。必要に応じて受信者に送り届ける。
    - 複数の端末でIMAPサーバ利用するとき開封状態など自動に同期されるので一元管理ができる。

- **Port 161**: Simple Network Management Protocol (**SNMP**)
    - **TCP/IPネットワークに接続されたマシンに監視・制御するプロトコル**
    - SNMPエージェント
        - SNMPマネージャからの要求へ応答、状態変化時の通知を行う。

- **Port 162**: Simple Network Management Protocol (**SNMP**)
    - **TCP/IPネットワークに接続されたマシンに監視・制御するプロトコル**
    - SNMPマネージャ
        - SNMPエージェントに対する要求や監視などを行う。

https://www.infraexpert.com/study/tcpip21.html#:~:text=SNMP%E3%82%92%E5%88%A9%E7%94%A8%E3%81%99%E3%82%8B%E3%81%93%E3%81%A8,%E9%9A%9C%E5%AE%B3%E5%BE%A9%E6%97%A7%E3%81%AB%E5%BD%B9%E7%AB%8B%E3%81%A1%E3%81%BE%E3%81%99%E3%80%82&text=SNMP%E3%81%AF%E3%80%81%E7%AE%A1%E7%90%86%E3%81%99%E3%82%8B%E5%81%B4,%E3%81%A4%E3%81%AB%E3%82%88%E3%82%8A%E6%A7%8B%E6%88%90%E3%81%95%E3%82%8C%E3%81%BE%E3%81%99%E3%80%82

https://www.infraexpert.com/study/tcpip21.5.html

- **Port 179**: Border Gateway Protocol (**BGP**)
    - **パスベクタ型のルーティングプロトコル。**
    - ISPなどとの接続時にお互いの経路情報をやり取りするたたの経路制御プロトコル。
    - パスベクタはパスアトリビュート（Path Attribute）を送信して最適経路を決定する。

- **Port 443**: HTTP Secure (**HTTPS**)
    - **SSL/TLSで暗号化された通信路を利用したHTTPプロトコル用ポート**
    - SSL証明書に公開鍵が含まれて所有者が所持する秘密鍵でしか復号化できない。
    - SSL証明書によるサイトの真正性の認証と、SSL/TLSハンドシェイクを実行しセキュアな接続を確立することで情報が暗号化され盗聴を防ぐことと、通信内容の改ざんが検知できるのがメリット。

- **Port 500**: Internet Security Association and Key Management Protocol (**ISAKMP**)
    - **ISAKMPプロトコル**
    - **IPsecプロトコルではISAKMP SA（Security Association）という制御用SAを生成し、通信時にさきに暗号化や認証アルゴリズムを交換し、共通鍵を作成し認証を行う。**

https://itmanabi.com/ipsec/#st-toc-h-9

https://www.infraexpert.com/study/ipsec7.html

- **Port 587**: SMTP over SSL/TLS (**SMTPS**)
    - **SSL/TLSで暗号化された通信路を利用した電子メール送信SMTPプロトコル**
    - 同じポートでは**STARTTLS**という暗号化通信の手法もある。

- **Port 993**: IMAP over SSL/TLS (**IMAPS**)
    - **SSL/TLSで暗号化された通信路を利用したIMAPプロトコル**

- **Port 995**: POP3 over SSL/TLS (**POP3S**)
    - **SSL/TLSで暗号化された通信路を利用したPOP3プロトコル**

- **Port 3389**: Remote Desktop Protocol (**RDP**)
    - **遠隔操作などリモートデスクトップ接続を実現するプロトコル**
    - **Windowsのサービスとして開発・公開され、リモートデスクトップはデスクトップ画面（GUI）を直接操作できるリモート接続方法です。**

- **Port 5800**: Remote FrameBuffer Protocol (**RFB** for browser access)
    - **GUIの遠隔操作を行うリモートアクセス用のシンプルな通信プロトコル**
    - VNC（Virtual Network Computing）クライアント
        - ブラウザなどからの接続を提供する。

- **Port 5900**: Remote FrameBuffer Protocol (**RFB** for viewer)
    - **GUIの遠隔操作を行うリモートアクセス用のシンプルな通信プロトコル**
    - VNC（Virtual Network Computing）サーバ
        - 画面の表示データをクライアントに送信する。
    
**（以上は予約されている、いわゆるデフォルトポートとして記載されている。）**

# OSI Model & Protocol LAYER

https://www.itmanage.co.jp/column/osi-reference-model/#:~:text=OSI%E5%8F%82%E7%85%A7%E3%83%A2%E3%83%87%E3%83%AB%E3%81%AF%E4%B8%BB,%E3%81%AB%E8%A8%AD%E8%A8%88%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82

https://milestone-of-se.nesuke.com/nw-basic/as-nw-engineer/osi-reference-model-and-ip-set-model/

https://www.itmanage.co.jp/column/tcp-ip-protocol/

![osi.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2477698/454dfbe6-b2bb-34d6-78ea-f7c21f88d6fd.png)

![ositcpipprotocol.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2477698/2556a94d-6102-0ac7-3f71-5594144d2599.png)

![protocolexample.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2477698/1bc0becd-1a64-1725-7d84-73295d9855ee.png)


# SSL vs. TSL

https://milestone-of-se.nesuke.com/nw-basic/tls/tls-ssl/


# IPsec

https://www.infraexpert.com/study/study10.html

https://www.infraexpert.com/study/ipsec5.html

https://milestone-of-se.nesuke.com/nw-basic/ipsec/ipsec-summary/

# Command line: curl

https://qiita.com/yasuhiroki/items/a569d3371a66e365316f#%E8%AA%8D%E8%A8%BC%E3%81%A8curl

# その他

https://www.cloudflare.com/ja-jp/learning/