hijikitaroのブログ

しがないSIerとして、日々プロジェクトを管理し、システムを育て、日々お子を見守り育てる中での出来事や学びを淡々と書いています。

Webに関する仕組みもろもろ

はじめに

背景

今までWebシステムの開発をしてきて、アプリケーション面は割とやってきた自身があったものの、Webの全体の仕組みはふんわりしかわかっていない + 人に説明できないことがはっきりとわかったので、仕組みを理解するために、自分用の備忘録を作成することにしました。

目的

  • Webの仕組みを自分の言葉と図で説明できる

    Web仕組みもろもろ

    Webとは

    Webアプリケーションって?

デスクトップアプリケーション Webアプリケーション
処理の主体 手元のPC サーバ
画面の表示 OS上で表示 Webブラウザ上で表示
インストール 必要 不要

といった、普段YahooやらAmazonやらでお世話になっているのが、Webアプリケーション。で、Excelなどがデスクトップアプリケーションでイメージするとわかりやすいかも。あと、今ではスマホタブレットで動かすものはモバイルアプリケーションなんかと言ったりもするかと。

Webが生まれた背景って?

はじまりとしては、研究者の間で世界の研究資料を効率よく共有したい。(電子メールとかファイル転送だと共有しづらい・・・これはプロジェクト開発でもよく見る光景かと・・・最近ではだいぶ便利になってきたけど)
そこで、生まれたのが「HTML(Hyper Text Markup Language)」。文章や図などが必要な研究成果をテキストファイルのみで表現できるようになる。
このHTMLに主要な仕組みとして、「Hyper Text(ハイパー・テキスト)」があり、文書間の参照が「Hyper Link(ハイパー・リンク)」といったコンピュータに理解できる形式で記述され、瞬時に参照先の文章を閲覧できるようになり、今までめんどくさかった共有がネットワーク経由で可能になった。
これにより、ネットワーク上のハイパーリンクのつながりが蜘蛛の巣のように見えるため、「World-Wide Web(世界に広がる蜘蛛の巣)」と表現され、今のWebが生まれた。

Webを支える技術って?

  • WebサーバとWebクライアント f:id:hijikitaro:20190831230327p:plain
  • URL(Uniform Resource Locator)
    • インターネット上のコンテンツを一意にする仕組み f:id:hijikitaro:20190831230332p:plain
    • スキーム:リソースを取得する方法
    • ホスト名:リソースが存在するホスト(コンピュータ)
    • パス名:ホスト上のリソースの位置
  • HTTP(Hyper Text Transfer Protocol)

HTTPとは

HTTPの知識は重要?

Webアプリケーション開発に関わる人は特に重要、それに今はクラウドが主流になってきていることからHTTTPの理解は必須。(と思う。)で重要な理由としては、Webアプリケーションはフレームワークを使えばHTTPを意識せず開発できてしまうが・・・トラブル時には仕組みを理解しておかないと対応できないため、重要。(なんでも作れるだけでなく、運用・保守ができないといけないということ)

HTTPの通信レイヤってどこ?

f:id:hijikitaro:20190831230334p:plain

HTTPの通信がどのようにコンピュータに届く?

  • インターネット上の住所:IPアドレス
    • インターネットに接続されたすべてのコンピュータはIPアドレスで識別される。(例:192.168.0.1)
  • IPアドレスを頼りに情報を届ける:TCP/IP
    • IPアドレスで特定したホストへ任意の情報を届ける役割を担う
    • 情報を「パケット(Packet)」と呼ばれる小さな単位に分割して送信し、受け取った側で元に組み立ててからWebサーバなどのアプリケーションへ渡す
      • 送受信の効率性を上げるためにこま切れにしている(失敗時には失敗したパケットだけ送りなおせるようなしくみ) f:id:hijikitaro:20190831230337p:plain
  • ホスト名をIPアドレスに変換する:DNS(Domain Name System)
  • DNSの仕組み
    • IPアドレスドメインの対応表は1TBほどの情報量となり、処理ができない、かつ、1台で管理してしまうとサーバ停止時に世界中でインターネットが利用できなくなってしまうという問題がある。これを避けるために、DNSサーバは多数あり、情報は分散管理している。親のDNSサーバから子のDNSサーバへ問い合わせをつなげていく階層構造となっている。
  • ホスト内の宛先を決定するポート番号
    • HTTP、SMTPFTPなど様々なプロトコルで情報が通信され、すべてTCP/IPの上に成り立っている。が、受信側のTCP/IPはどのプロトコルでどのアプリケーションで処理すべきか判断できない。そこで、「ポート(Port)」という考え方で、情報を受け取るアプリケーションは「待ち受けポート」を決める。(※同じポートで複数のアプリケーションは利用できない)
    • 「ウェル・ノウン・ポート(well-known ports)」といった代表的なプロトコルで使用されるポートは決まっている。

おわりに

今回は大枠の仕組みや考え方を整理する形となったが、この部分を自分の言葉で整理しておくことで、詳細の理論や実装を行う際にイメージしながら知識を身に着けていけると感じる。また、この知識はクラウドを活用していく上で前提となると感じているため、もう少し踏み込んだ部分まで身に着けておかないとクラウド化はしたけど、トラブル対応ができません状態になってしまいそうな気がした。
また、Webアプリケーションのアーキテクチャ面に関する仕組み理解は今度整理しまとめていこうと思う。思いとしては、kubernetesを使ったマイクロサービスアーキテクチャと絡めてまとめられればと思う。
今回参考にした本は「プロになるためのWeb技術入門」でした。

参考