yamaの気ままに
yamaの気ままに

バックエンド技術全般に関連する基礎知識を整理する #ネットワーク編

※ 画像・動画等のコンテンツが上手く生成されないことがあります。その際はお手数ですが、ページの更新を複数回お願いします。

目次
  1. 目的
  2. 代表的な技術
  3. Webサーバ
  4. クラウド
  5. API通信
  6. ネットワークに関するトピック
  7. TCPとUDPプロトコルについて。
  8. HTTPとHTTPSの違いについて。
  9. DNSとその仕組みについて。
  10. トラフィック制御について。
  11. REST APIとGraphQL APIの違い
  12. ステータスコードについて
  13. Cookieとローカルストレージについて

目的

私が今後目指していくバックエンドエンジニアとしての技術に関する基礎知識を整理することを目的とする。 特に、就活やインターン参加などでの採用シーンにおいて、質問されそう若しくは談義として出そうなバックエンド技術話にフォーカスしようと思う。

ネットワーク、データベース、セキリュティ、プログラミング(設計)の4分野に分けて、それぞれ、深掘りをしていく。今回はネットワークにフォーカスする。

代表的な技術

Webサーバ

  • Apache
  • Nginx
  • IIS
  • クラウド

  • AWS
  • Azure
  • GCP
  • API通信

  • RESTful
  • GraphQL
  • ネットワークに関するトピック

    TCPとUDPプロトコルについて。

    TCPは、信頼性のあるデータ転送を実現するためのプロトコル。 信頼性とは、3wayハンドシェイクによる通信前の打診、ackによる相手の受信確認や再送処理、や通信効率の最適化機能(Windowによるフロー制御や輻輳制御)を提供できることからのもの。 ネットワークが混雑している場合でも、データのロスを最小限に抑えられる。

    UDPは、データを分割せずに一度に送信するため、TCPと比べてデータ転送速度が高速である。しかし、送信したデータが正常に届いたかどうかを確認する仕組みがないため、データ転送の信頼性は低い。この特徴を利用して、UDPは音声や動画のストリーミングなど、リアルタイム性が重要で一部のデータロスが許容される場合に利用されます。

    HTTPとHTTPSの違いについて。

    データが暗号化されずに送受信されるかどうか。具体的には、HTTPSを利用する場合、Webサーバー側で証明書を取得し、ブラウザ側でその証明書を検証することで通信の秘匿性を確保する。

    DNSとその仕組みについて。

    IPアドレスとドメイン名を対応付けることによって、インターネット上でのコンピューターやサービスを特定するためのシステム。

  • クライアントアプリケーションが、Webページなどのリソースのドメイン名を入力
  • クライアントアプリケーションは、自身の設定に従って、ローカルなキャッシュや最も近いネームサーバに対して、ドメイン名を問い合わす
  • ネームサーバは、自身のキャッシュまたはルートサーバに問い合わせ、そのドメイン名に対応するIPアドレスを取得する。
  • ネームサーバは、取得したIPアドレスをクライアントアプリケーションに返す。
  • クライアントアプリケーションは、取得したIPアドレスを使用して、Webページなどのリソースにアクセスできる。
  • トラフィック制御について。

    トラフィック制御とは、ネットワーク上の通信量を制限する機能。トラフィック制御を行うことで、ネットワークが混雑しすぎて通信ができなくなることを防ぐことができる。

    トラフィック制御には、以下のような方法が挙げられる。

  • 帯域制御
  • ポリシング
  • キューイング
  • 帯域制御は、ある時間帯における通信量を制限することで、ネットワーク上の混雑を防ぐ。 ポリシングは、通信が正常に行われているかを監視し、異常な通信をブロックすることで、ネットワークの安全性を保つ。 キューイングは、通信が混雑している場合に、通信を順次処理するための仕組み。

    社内通話ミーティングなどで、活躍する機能。

    REST APIとGraphQL APIの違い

    REST APIは、HTTPリクエストを使用してデータを取得するAPIである。一般的にシンプルで柔軟性が高い。

    GraphQL APIは、クライアントが必要とするデータのみを取得できるようにするために設計されたAPIであり、一度に複数のエンドポイントにアクセスする必要がなく、パフォーマンスが向上を図れる。

    ステータスコードについて

    参考:https://zenn.dev/hidebon0630/articles/75022374e28cdf

    200 成功レスポンス

  • 200 OK:リクエストが成功
  • 201 Created:リクエストが成功し、新たにリソースが追加されたことを示す。
  • 204 No Content:リクエストに対して、送信するコンテンツは無いが、ヘッダーが有用であることを示す。
  • 300 リダイレクト

  • 301 Move Permanently:リクエストされたリソースのURLが永遠に変更されたことを示す。
  • 302 Found:リクエストされたリソースのURIが一時的に変更されたことを示す。
  • 400 クライアントエラー

  • 400 Bad Request:構文が無効であるため、サーバーがリクエストを理解できないことを示す。
  • 401 Unauthorized:クライアントは、リクエストされたレスポンスを得るためには認証を受けなければならない。
  • 403 Forbidden:認証されていないなどの理由でクライアントにコンテンツのアクセス権がなく、サーバーが適切なレスポンスの返信を拒否していることを示す。401とは異なり、クライアントの識別子がサーバーに知らされている。
  • 404 Not Found:サーバーがリクエストされたリソースを発見できないことを示す。
  • 500 サーバーエラー

  • 500 Internal Server Error:サーバー側で処理方法がわからない事態が発生したことを示す。
  • 502 Bad Gateway:リクエストの処理に必要なレスポンスを受け取るゲートウェイとして動作するサーバーが無効なレスポンスを返すことを示す。
  • 503 Service Unavailable:サーバーがリクエストを処理する準備が出来ていないことを示す。一般的な原因は、サーバーがメンテナンスや過負荷でダウンしている。
  • Cookieとローカルストレージについて

    Cookieはウェブサイトがあなたのコンピューターやモバイルデバイスに保存する情報のことで、ウェブサイトを使用する際に特定の設定や操作を覚えておくことができる機能。ブラウザによって自動的に送信される。

    ローカルストレージはJavaScriptコードによって必要に応じて読み書きされる機能。Cookieはブラウザが閉じられると消えるが、ローカルストレージはブラウザを閉じても保持される。これは、Cookieがセッションに関連したデータを保存するために使用されるのに対し、ローカルストレージは永続的なデータの保存に使用されるためである。

    Cookieは通常、小さなデータを保存するために使用されますが、ローカルストレージは、大量のデータを保存することができます。Cookieは、データがブラウザに保存されるため、セキュリティ上のリスクがある一方、ローカルストレージはJavaScriptによって制御されるため、より安全なオプションと言える。さらに、Cookieはウェブサイトを訪問する際に、ブラウザが送信するHTTPヘッダーに含まれますが、ローカルストレージはサーバーには送信されないため、よりプライバシーに優れたオプションとなる。