私はサポートエンジニアになりたい

元教師・現開発エンジニアの挑戦

ステートフルとステートレス

セッションの状態の話

セッションとは:通信における開始から終了まで(ログインからログアウトまでを指すことが多い)

https://wa3.i-3-i.info/word1791.html

トランザクションの話も出てくる

トランザクションとは:「商品を渡して、代金を受け取る」のように「ここからここまでワンセット」になっている処理のこと(DBとかでよく耳にした)

https://wa3.i-3-i.info/word16325.html

ステートフル

サーバがクライアントのセッションの状態を保持する

セッションの状態によってリクエストに対するレスポンスが変わる

何度も繰り返し使うもの

毎回同じサーバを使ってユーザーの要求を処理する

ウィンドウの場所、ユーザー設定、最近のアクティビティなどを追跡する

例:オンラインバンキング, 電子メール

ステートフルなプロトコル(何を保持しているか?どんなコネクションかに注目)

FTP, TCP, BGP, OSPF, EIGRP, SMTP, SSH

 

ステートレス

サーバがクライアントのセッションの状態を保持しない

セッションの状態によらずリクエストに対するレスポンスが変わらない

過去のトランザクションに関する情報や参照は保持されない

単一の要求に対して単一の応答をする

ステートレスなプロトコル

HTTP, UDP, IP, DNS (UDPの性質を使っているこれらもたぶんそうDHCP, NTP, SNMP)

HTTP

HTTPは状態を保持できないからセッション管理でユーザーを特定しよう!みたいな話になる(cookieとかの話ここ)

「HTTPはステートレスだからセッション管理が必要」を詳しく解説 | OFFICE54

UDP

コネクションが確立しているかどうかを確認する状態(ステート)がない(逆に3ウェイハンドシェイクをするTCPはステートフル)

インターネット用語1分解説~UDPとは~ - JPNIC

参考

ステートフルとステートレスの違いとは?

https://www.redhat.com/ja/topics/cloud-native-apps/stateful-vs-stateless

TCPとUDPの違いは

TCP(Transmission Control Protocol)の特徴

  • コネクション型プロトコル
    通信相手とコネクションを確立することで相手に通信が届いていることを確認させ、コネクションを確立させる。
    TCPにおけて使用されるコネクションの確立のことを3ウェイハンドシェイクという
  • (コネクションを確立するため)信頼性が高い
    事前にコネクションを確立し、双方で送受信できていることを都度確認している。
  • 制御機能を備えている
    ネットワークの状況によっては正しくデータが伝送されないケースがある。そのためウィンドウ制御やセグメントの再送制御、送信するセグメントの量の制御などが用意されている
  • 重複を排除する
    重複を排除することでデータが1つであることを保証する

TCPの方はTCPセグメント呼ぶ

TCPのサーバポートの例

HTTP:TCP80番ポート

SMTP:TCP25番ポート

TCPが使われているサービス

  • Web通信
  • メール通信
  • ファイル転送

 

後で見る

TCP vs RTP:何故RTPが必要なのか?:Geekなぺーじ

第13回 データグラム通信を実現するUDPプロトコル:基礎から学ぶWindowsネットワーク(1/4 ページ) - @IT

C言語-ソケットプログラミング_UDPソケット CapmNetwork

トランスポート層の仕事 - ネットワークエンジニアを目指して

UDP(User Datagram Protocol)の特徴

UDPヘッダーを付与したデータの通信単位をUDPデータグラムという

UDPのサーバポートの例

DNS:UDP53ポート

UDPが使われているサービス

  • 音声や動画などのリアルタイムサービス
  • モニター監視
  • DNS
  • NTP
  • SNMP
  • TFTP

 

TCPとUDPの主な特徴6つ|代表的なポート番号や使い分ける方法も紹介 | テックマガジン from FEnetインフラ

UDPヘッダのフォーマットとサイズの基本 | IT情報サイト ”ITアベイラボ”

 

 

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

OSとは何か説明する

OSとは

複数のプログラムを同時に安定動作させ、ハードウェアコンポーネントを効率的に使えるよう抽象化するためのプログラム。

OSの構成

ブートローダ

PC起動時によびだされ、OSなどを動かす仕事をしているプログラム。

PCの電源を入れる→BIOS起動→ブートローダ起動→OS起動

カーネル

ハードウェアとソフトウェアをつなぐソフトウェア

  • リソース管理
    • CPU(プロセッサ)
      多数のプログラムの中からプロセッサを割り当てるべきものを選択する
    • メモリ
      各プロセスにメモリを割り当て、全体としてメモリが不足した場合、対処を決定する
    • 入出力デバイス(キーボード・HDD・USBなど)
      アプリケーションから入出力要求を受け付け、適切なデバイスに対して入出力を実行し、デバイスを使用するための便利な方法を提供
  • プロセス管理
    アプリケーションの実行を許可し、ハードウェア抽象化などの機能でサポートする
  • メモリ管理
    ユーザープロセスの要求に応じて安全なメモリアクセスを提供
  • バイス管理
    ドライバが物理的にデバイスにアクセスするための入出力ポートやメモリ空間を用意する
  • システムコール

デーモン

LinuxUNIXにおいてメモリ上に常駐してるプロセス

Windowsでは「サービス」とよばれる

利用者の操作とは無関係に処理を行うバックグラウンドプロセスの一種で、別のプログラムや機器、通信相手など外部からの要求を受け付けて処理を実行したり、あらかじめ設定されたタイミングで自律的に特定の処理を実行したりする。

systemd, syslogd, tcpd, httpd, sshdなど

シェル

ユーザからの入力をPCに伝えるプログラム

ユーザが入力したコマンドをシェルが解釈しカーネルに伝え、

カーネルはシェルから伝達された要求に応えてプログラムの操作を行い、その結果をシェルに返す。

返ってきた結果をシェルが解釈し、ユーザ側に出力する

-----

カーネル←シェル←ユーザ

カーネル→シェル→ユーザ

-----

デスクトップ環境

ツールバー、ファイル、背景画像などから成り立つ。

デスクトップ環境のおかげで画面表示でのPC操作環境が快適に行える。

アプリケーション

様々な情報やプログラミングを組み合わせ、OSの機能を拡張していく事ができ、PC操作が快適に使えるようにしてくれるようにプログラムされたソフトウェア

OSの機能

  • タスク管理
  • メモリ管理
  • ファイル管理
  • 周辺機器の管理
  • APIの提供

参考

milestone-of-se.nesuke.com

qiita.com

www.geekly.co.jp

e-words.jp

recruit.cct-inc.co.jp

PCの電源を入れたら何が起こるのか

  1. PCの電源スイッチを入れる
  2. マザーボード上のCPUが動き、ROMの中にあるBIOSというプログラムが動く
  3. BIOSがキーボード・HDD・グラフィックボードなどを初期化する(POST(Power-On Self-Test))
  4. ハードディスクからOSを起動するプログラムを取り出してRAM(メインメモリ(主記憶装置(作業用の領域)))にロードする(ブート・ストラップ)
  5. CPUが「メイン・メモリ」からWindowsのプログラム・データの処理命令を<フェッチ>して(=取り出して)、その命令内容をデコードする(解釈する(CPUが理解できる機械語))
  6. CPUがデコードした命令内容を実行していくことで、プログラム(Windows OS)が開始される

OSが立ち上がるまでの処理の流れ

  1. 演算・制御装置である「CPU」が、Windows OSのプログラム・データ(=ソフトウェア)を、「ハード・ディスク」から取得して、作業用の「メイン・メモリ」の上にロード(=展開)する
  2. CPUが「メイン・メモリ」からWindowsのプログラム・データの処理命令をフェッチして(取り出して)、その命令内容をデコードする(解釈する(CPUが理解できる機械語))
  3. CPUがデコードした命令内容を<実行>していくことで、プログラム(=Windows OS)が開始される

https://atmarkit.itmedia.co.jp/fdotnet/dotnetwork/dotnetwork01/dotnetwork01_02.html#runprogram

CPUの基本動作

  • フェッチ
    • メモリから命令を読み込む
  • デコード
    • 読み込んだ内容を解釈する
  • 実行
    • 命令に従って演算を行う

http://www2.kobe-u.ac.jp/~tnishida/course/2012/IS/3.CPU.pdf

メモ

BIOS(バイオス):「Basic Input Output System」の略。パソコンのマザーボードに搭載されており、電源を入れて最初に起動するプログラムです。コンピューター内を初期化し、接続されているディスプレイやキーボードなどの周辺機器を読み込んで利用できる状態に整え、それから外部記憶装置(ストレージ)からOSを実行します。

ブートまたは ブートストラップ:コンピュータの電源を入れてからOSが起動するまでの処理の流れ

ブートローダ:このブート処理を行うソフトウェアのことである。

ROMは「ブート・プログラム」と「ROMローダ・ルーチン」というプログラムが記憶されている。
ブート・プログラム:マザーボード上のチップやメモリ、接続されている周辺装置などを初期化する。
ROMローダ・ルーチン:ディスク装置の先頭セクタを読み込む処理をする。

参考

nobusan.jp

vanilla.xrea.jp

 

www.youtube.com

 

www.youtube.com

http://www.cs.reitaku-u.ac.jp/infosci/os-kiso/os2003/text02-1.pdf

ブートローダー(ブートストラップローダー)とは? - パソコンの選び方と買い方

plaza.rakuten.co.jp

プロキシとは何か説明する

プロキシとは何か

インターネットを接続する際にネットワークの内部と外部をつなぐ代理をする。

フォワードプロキシ

クライアントとWebサーバの間に位置し、伝言する役割。(クライアント側に位置する)

クライアントはフォワードプロキシに要求し、フォワードプロキシがWebサーバに要求する。

フォワードプロキシはWebページからページを受け取りクライアントへ返す。

メリット1:Webサーバにアクセスしたのが誰かが分からない

フォワードプロキシありとなしを比較する。

フォワードプロキシなしの場合、WebサーバはクライアントPCの情報が分かる。

フォワードプロキシありの場合、Webサーバはプロキシサーバの情報が分かる。

-----

フォワードプロキシなし

クライアント → Webサーバ

クライアント ← Webサーバ

フォワードプロキシあり

クライアント → プロキシサーバ →→→ Webサーバ

クライアント ← プロキシサーバ ←←← Webサーバ

-----

例えば、悪意のあるWebサイトがアクセス元である私たちの情報がばれてしまうのを防ぐことができます。

メリット2:接続先の制限

フォワードプロキシありとなしを比較する。

フォワードプロキシなしの場合、悪意のあるサイトへアクセスできる

フォワードプロキシありの場合、悪意のあるサイトへアクセスを防止する

フォワードプロキシなし

クライアント → 悪意のあるサイト

フォワードプロキシあり

クライアント → プロキシサーバ ✖→→→ 悪意のあるサイト

-----

リバースプロキシ

クライアントとWebサーバの間に位置する。(Webサーバ側に位置する)

Webサーバの負荷分散が役割。

-----

クライアント →→→ リバースプロキシサーバ → WebサーバA

                        → WebサーバA(複製)

-----

キャッシュサーバ

訪問したWebページを一時的に保持することで、応答時間が速くなる。

ログを残すことができる。

Webサーバへの負荷を減らせる。

 

再度読んで理解したい↓。

luminati.site

ログを取得できる

luminati.site

プロキシの設定

PCが使用するプロキシサーバを設定することができる。

 

www.pasoble.jp

目的

社内のTeamsでSharePointが見れない方がいた。

wifiVPNで社内のネットワークにつなぐと見れるが社内のランケーブルでつなぐと見れなかった。

調査したところプロキシの設定がダメだったらしい。

参考文献

nettrouble.docomo.ne.jp

Webブラウザでwww.example.comを入力しWebサイトが表示されるまでの流れを説明する

ブラウザにwww.example.comを打ち込んだとき、裏側では何が行われているか

  1. クライアントがクライアントPCのWebブラウザにURLを入力する
  2. URLに含まれるドメインDNSサーバに問い合わせる
  3. DNSサーバでドメインからIPアドレスを特定する
  4. DNSサーバからIPアドレスが送信される
  5. 取得したIPアドレスのWebサーバにデータを要求
  6. Webサーバは要求した内容に応じて、保存しているコンテンツ(HTML,CSS,画像など)を返す
  7. Webサーバから返されたデータをWebブラウザで表示する

www.rworks.jp

ブラウザからDNSサーバに問い合わせる前にやっていること

  1. クライアントPCがブラウザのキャッシュに「www.example.com」のIPアドレスが残っているか調べに行く
  2. ブラウザにキャッシュが残っていない場合はhostsファイルを調べにいく
    Windows:C:\Windows\System32\drivers\etc\hosts
    CentOS:/etc/hosts

Webページがブラウザに表示されるまでに何が起こるのか?

DNSサーバに問い合わせてIPアドレスを受け取るまでを深堀する

DNSサーバに問い合わせてwww.example.comIPアドレスを取得する順番

  1. クライアントPCDNSキャッシュサーバに「www.example.com」のIPアドレスは何か問い合わせをする
    1. ブラウザがクライアントPCのOSとして備わっている機能のスタブリゾルバを呼び出す
    2. スタブリゾルDNSキャッシュサーバに「www.example.com」のIPアドレスは何か問い合わせをする
  2.  キャッシュサーバルートサーバへ「www.example.com」のIPアドレスは何か問い合わせをする
  3. ルートサーバキャッシュサーバへ「com」の情報を管理するDNSサーバのいずれか(a.dns.com, b.dns.com, ...)に問い合わせるよう回答する
  4. キャッシュサーバが回答の中から1つ選んだ「com」のDNSサーバに「www.example.com」のIPアドレスは何か問い合わせをする
  5. 「com」のDNSサーバキャッシュサーバに「example.com」のDNSサーバの情報を回答する
  6. キャッシュサーバが回答の中から1つ選んだexample.com」のDNSサーバに「www.example.com」のIPアドレスは何か問い合わせをする
  7. example.com」のDNSサーバキャッシュサーバに「www.example.com」のIPアドレスを回答する
  8. キャッシュサーバクライアントPCIPアドレスの情報を回答する

JPNICの記事で紹介している「名前解決の仕組み」が分かりやすい

www.nic.ad.jp

キャッシュサーバがすでに「www.example.com」のIPアドレスを得ている場合(DNSサーバからIPアドレスを得た場合)

  1. キャッシュサーバタブブラウザに問い合わせの結果を返す
  2. スタブリゾルが受け取ったIPアドレスを取り出し、ブラウザから指定されているメモリ領域に書き込む

 

インターネット10分講座:DNSキャッシュ - JPNIC

【図解】ドメインとは?をわかりやすく解説します - カゴヤのサーバー研究室

キャッシュを使う

クライアントPCがすでにwww.example.jpのIPアドレス情報を取得している場合、そのIPアドレスを用いてWebサーバにデータを要求する

 

キャッシュサーバがwww.example.jpのIPアドレス情報を取得している場合、クライアントPCはキャッシュサーバに対して問合せし、IPアドレスを取得する

WebブラウザとWebサーバとのやり取りを深堀する

  1. WebブラウザWebサーバに対してTCPのコネクションを確立する
  2. Webブラウザが該当するIPアドレスWebサーバにHTTPリクエストを送信してWebページのデータを要求
  3. Webサーバが受信したHTTPリクエストを解析
  4. WebサーバWebブラウザに要求されたデータをHTTPレスポンスとして送信
  5. Webブラウザが受信したデータを解析してWebページとして表示

Webサーバとは、Webアクセスの仕組み

TCPのコネクション(3 way handshake)

コネクションを確立する。

  1. 接続元接続先へ通信路を確保するために、データ転送の許可要求を出す「SYN(シン):1, ACK(アック):0」のパケット
  2. 接続先接続元に許可と許可要求を出す「SYN:1, ACK:1」のパケット
  3. 接続元接続先に許可を出す「SYN:0, ACK:1」のパケット

図にすると以下のようになる。

-----

   ノード1          ノード2

   CLOSED          LISTEN   

        ---SYN-->

  SYN_SENT

 ESTABLISHED <-ACK+SYN--

                 SYN_RCV

        ---ACK--> ESTABLISHED

-----

コマンドでTCPコネクションを確立すると以下のようになる。

sudo tcpdump host www.example.com and port 80

このやり取りをすますと、PC上でESTABLISHEDという状態になる。

ネットワークの接続一覧は「netstat」コマンドで表示できる。

https://wa3.i-3-i.info/word15428.html

【TCP】コネクションの確立までの道のり - Qiita

※終了するときはコネクションを切断する

TCPのフラグ(コントロールフラグ)

URG(Urgent):緊急に処理すべきデータが含まれている

ACK(Acknowledgement):確認応答番号のフィールドが有効であること

PSH(Push):受信したデータをバッファリングせず、アプリケーションに渡す

RST(Reset):コネクションが強制的に切断されること

SYN(Synchronize):コネクションの確立を要求する

FIN(Fin):コネクションの正常終了を要求する

TCP/IP - TCPとは - TCPヘッダ

Webサーバとのやりとりを深堀する

TCPコネクションを確立する

通常はHTTPのウェルノウンポートの80番(HTTPSであれば443番)を指定し接続を要求する

HTTP接続が可能になったら、WebサーバはURLで指定されたファイルなどのリソースを取得しクライアントに返信する

メモ

URLとドメイン

http://www.example.co.jp

ホスト名:www

ドメイン名:example.co.jp

FQDN:www.example.co.jp

jp:トップレベルドメイン

co:セカンドレベルドメイン

example:サードレベルドメイン

ドメイン名はどの部分?|ドメイン基礎知識|Zenlogic - 株式会社IDCフロンティアのレンタルサーバー

ホスト名とIPアドレスの例

ホスト名:www.google.co.jp

IPアドレス:172.217.161.67

SSL/TLSとは何か

SSLで使用する技術

ハイブリッド暗号方式

盗聴対策。

共通鍵のデメリットである鍵の配布を公開鍵暗号化方式で実施。

  1. Webサーバは公開鍵と秘密鍵を作成
  2. Webサーバは公開鍵を公開し、秘密鍵を保管
  3. Webブラウザは共通鍵のもとを公開鍵で暗号化して送る
  4. Webサーバは共通鍵のもとを秘密鍵で復号
  5. WebサーバとWebブラウザは共通鍵のもとから共通鍵を生成
  6. Webブラウザはアプリケーションデータを共通鍵で暗号化
  7. Webサーバはアプリケーションデータを共通鍵で復号

メッセージ認証コード(MAC)

改ざん対策。

データとMAC鍵(共通鍵)を比較する。

ハッシュ関数に共通鍵の要素が加わるため、改ざんの検知と相手の認証をする。

ディジタル証明書

なりすましや否認対策。

相手が通信したい相手であることを保証する。

SSL通信の種類

他のプロトコルと組み合わせて使用することでプロトコルでの通信を保護する。

TLSハンドシェイク

・・・後日、またまとめたいと思います。