【基本情報技術者】ネットワーク総まとめ

:star:データの誤りとは
ネットワーク上を流れるデータは結局、単なる電気的な信号（0 bitか1 bit）でしかなく、
この信号の波形は伝送距離が伸びれば減衰するし、外から他の電気的な刺激があれば波形が乱れることもある。
データの誤りを100％防ぐ方法などないので、誤りを正確に検知する技術に方も重要になってくる。
そこで、「パリティチェック」や「CRC（巡回冗長検査）」などを用いて検出、訂正する。

:small_blue_diamond:パリティチェック
送信するビット列に対し、パリティビットという検査用のビットを付加し、誤りを検出する。

偶数パリティ
ビット列の中の1の数が偶数になるようにする

奇数パリティ
ビット列の中の1の数が奇数になるようにする

【問題点】
1ビットの誤りしか検出できないのと、どのビットが間違っているか正確な位置の検出もできない。
＝訂正が行えない

【改善策】
水平と垂直両方のパリティを組み合わせると、1ビットの誤りに限り位置の特定が可能になる（テーブルをイメージ）

:small_blue_diamond:CRC（Cyclic Redundancy Check）
ビット列を特定の式で割り、その余りをチェック用データとして付加する。
データの受信側は送信側と同じ生成多項式を使ってデータを割り算してみる。
・余りが出ればデータに誤りがある
・余りがなければデータは正常

※データの訂正は出来ないが、連続したビットの誤りも検出できる。

:wavy_dash::wavy_dash::wavy_dash::wavy_dash::wavy_dash::wavy_dash::wavy_dash::wavy_dash::wavy_dash::wavy_dash::wavy_dash::wavy_dash::wavy_dash::wavy_dash::wavy_dash::wavy_dash::wavy_dash::wavy_dash::wavy_dash::wavy_dash::wavy_dash::wavy_dash:

:star:TCP/IPを使ったネットワーク
TCP/IP・・・インターネットの世界で標準として使われているプロトコル
二つが合わさることで、「複数のネットワークを行き来しながらもパケットを正しく相手に送り届けることが出来る」という仕組みになる。

TCP：トランスポート層（第４層）
正しくデータが送られたことを保証する仕組み

IP：ネットワーク層（第３層）
複数のネットワークを繋いで、その上をパケットが流れる仕組みを規定する

こういった技術を企業内LANなどに転用したネットワークのことをイントラネットと言う。

【中核となる三つのプロトコル】
:small_blue_diamond:IP(Internet Protocol)
経路制御を行い、ネットワークからネットワークへとパケットを運んで相手に送り届ける。
コンピュータやネットワーク機器などを識別するためにIPアドレス（コンピュータの住所や電話番号みたいなもの ※絶対に重複しない）を割り当てて管理している。
※コネクションレス型の通信（事前に送信相手と接続確認を取らない）

:small_orange_diamond:IPアドレス補足
手紙を送るときに住所と宛名（名前）を書くように、IPアドレスも「ネットワークアドレス部」と「ホストアドレス部」に分かれている
どのネットワーク上の＋どのコンピュータか

IPアドレスは32ビットで表されるので、ホストアドレス部に避ける桁数が大きいほどそのネットワークの規模は大きいと言える
（同一ネットワーク内に多くのコンピュータを登録できるから）

ネットワーク規模はクラスA〜Cに分類される
A：大規模ネットワーク用
B：中規模
C：小規模

【グローバルIPとプライベートIP】

グローバルIP（外線）
インターネットの世界で使用するIPアドレス
地域ごとのNIC（Network Information Centerと呼ばれる非営利機関によって管理）

プライベートIP（内線）
企業内などLANの中で使えるIPアドレス
LAN内で重複がなければ、システム管理者が自由に割り当てる（手動）ことが出来る。

:small_blue_diamond:TCP（Transmission Control Protocol）
パケットの順序や送信エラー時の再送などを制御、送受信するデータの信頼性を保証する。
事前に通信相手とのコネクションを確立してからデータを送受信する。

:small_blue_diamond:UDP（User Datagram Protocol）
 めちゃくちゃ高速な通信
※コネクションレス型のためとにかくスピード命、相手にちゃんと届いたかどうかは知らん
例：映像配信サービス


:star:ブロードキャスト
同一ネットワーク内の全てのホストに対して一斉にデータを送信すること
ホストアドレス部をすべて「1」にすれば、そのネットワーク内のコンピュータすべてに送信するという設定になる。

※特定の一台にのみ送信すること：ユニキャスト
※不特定多数ではなく決められた範囲内の複数ホストへの送信：マルチキャスト

:star:サブネットマスク
ネットワークを分割して使用する技術
例えば、一番小規模のクラスCでも254台のホスト登録が可能です。正直そんなに使わねーよという場合もあって、それよりは会社の部門ごとにネットワークを分けたいということもある。

サブネットマスク利用によって、ネットワークを分割し、異なる部門ごとに独自のIPアドレスを割り当てることが出来る。この利点としては、セキュリティの向上やトラフィック管理の容易さが挙げられます。また、NW設定の変更や障害時にも特定のネットワークセグメントにのみ影響が及ぶので、被害範囲縮小、修復範囲が限定出来るといった点でもメリットがあります。

サブネットマスクを使ってネットワークを分割
各ビットの値（1がネットワークアドレス/0がホストアドレスを示す）

:small_orange_diamond:CIDR（サイダー）を使ってアドレスの桁数を省略しよう
IP＋サブネットマスクだとアドレスの桁数が多すぎる...
→CIDR表記（ネットワークアドレス部のビット数を数えてIPの後ろに入れる）

・サブネットマスク＝ネットワークアドレスの拡張
・CIDR＝拡張から縮小まで可能

:star:IPについて
現在広く使用されているのはIPv4ですが、32ビットの数値によってIPを割り当てるので数が足りなくなる懸念があります。

それを改善するための後継規格が「IPv6」
128ビットの数値によって表現するので実質無限（IPアドレスを16ビットずつに区切り、４桁の16進数で表す）

【特徴】
IPレベルに暗号化機能を持たせるIPsecを標準サポートとし、経路上で付加されるヘッダ構造も通信の効率化が考慮されたものになっている。

:small_orange_diamond:MACアドレスとIPアドレスの違いは？
・ネットワークを超えて通信する場合はIP
・ LAN内の通信の場合はMAC
→ネットワーク外のMACに送る場合、第一宛先としてはそのLAN内ルータのMACアドレス。ルータに到着後、ルータが「なるほど、この情報は外部のネットワーク向けね。」と解釈し、送信元MACアドレスを自分にして、宛先をそのネットワークLANのMACにする。


:star:DHCP（Dynamic Host Configuration Protocol）とは
新しいコンピュータがネットワークに接続される度に、DHCPサーバーがそのコンピュータに必要なネットワーク設定を自動的に割り当てる。また、コンピュータがネットワークから接続された場合は、他のコンピュータにIPを割り当てて再利用できるようにもしてくれます。

※LANへの接続設定とDHCP設定は異なります
LAN接続：コンピュータがネットワークに接続するための設定
DHCP：ルータがネットワークに接続するデバイスに対してIPアドレスやその他の設定情報を自動的に割り当てるプロトコル
（コンピュータがネットワークへ接続後、DHCPサーバから設定情報が降ってくる）

管理の手間が省け、人為的な設定ミスも防ぐことが出来る

:star:NATとIPマスカレード
プライベートIPアドレスしか持たないコンピュータにグローバルIPアドレスを付与する変換技術

:star:NAT
GIPとPIPを一対一で結びつけ、相互に変換を行う。
同時にインターネット接続できるのはGIPの個数分だけ。

:star:IPマスカレード
GIPに複数のPIPを結びつけ、一対複数の接続を実現する
IPアドレス変換時にポート番号も合わせて書き換えることで一つのGIPでも複数のコンピュータが接続できるようになる。

※ポート番号
同じIPアドレス上にある複数のアプリケーションを区別するために使用される番号

:star:ドメインとDNS
ドメイン名とは、10進数で表現された覚えづらいIPアドレス問題を解決するために文字で別名をつけたもの

ドメイン構成
www.gihyo.co.jp
www=コンピュータの種類
gihyo=組織の名前
co=組織の種類
jp=国名

上記のようなドメイン名とIPアドレスを関連付けて管理しているのがDNS（Domain Name System）

:small_orange_diamond:小話
ネットワーク上のサービスにはそれぞれに対応したプロトコルが用意されている
・HTTP→ウェブページの転送に利用する
・FTP→ファイル転送サービスに利用する
・Talnet→他のコンピュータにログインして遠隔で操作を行う際に利用する
・SMTP→電子メールの配送部分を担当する
・POP→受信部分を担当する
・NTP→コンピュータの時刻合わせを行う

サービスはそれぞれポート番号で識別します
※各サービス用に一台ずつサーバを用意しなければいけないわけではない

ただ、IPだけだとパケットの宛先であるコンピュータは識別できても、どのサーバプログラム宛てかまでは分からない。
そこで、各プログラムが0~65,535までの範囲で自分専用の接続口を設ける。
これがポート番号
→IPでコンピュータを指定、ポート番号で通信相手であるサービス（アプリ）を指定する。

TCP/IPなどのプロトコルや各種サービス、これらはIETFという任意団体によって作られる。
IETFが作った各種は、確定になればRFCという名前で文書化され、ネット上に公開される。

:star:www（World Wide Web）とは
今やインターネットと同義で使われるようになったぐらい定着しているサービス
世界中に散財するWebサーバから文字や画像、音声などの情報を得ることが出来るサービス

【特徴】
ハイパーテキストという構造で、「分書間のリンク」「文書内に画像や音声、動画など」様々なコンテンツを表示することができ、これによってインターネット上のドキュメント同士が繋がりを持ち、補完し合う。
そうしたドキュメント同士の繋がりが無限に蜘蛛の巣のように張り巡らされていることがwwwの由来

:star:ウェブサービスの利用方法
基本的には、ブラウザを通してサーバに「くれ！」と言うだけ。
※サーバはデータを整形したり、特別な処理を加えたりはしない。
（それら全てブラウザの仕事）
上記やり取りで使われるのがHTTPプロトコル

http://www/gihyo.co.jp/book/index.html
①HTTPというプロトコルを使って
② gihyo.co.jpというネットワークの
③wwwというWebサーバが公開している
④/bookディレクトリ下の
⑤index.htmlというファイル
をやりとりするぜ！

:star:CGI（Common Gateway Interface）とは
ブラウザからの要求に対し、Webサーバ側で外部プログラムを実行するために用いられる仕組み
HTMLだけでは表現できないインタラクティブなページの作成を実現する。

:star:Ajax（Asynchronous JavaScript And XML）技術の詳細
Webページに織り込むことで、ページの中身を動的に書き換えることが出来るスクリプト言語（JS）の非同期通信機能を用いてサーバと通信を行う。

例：地図機能
①イベント発生（マウスドラッグなど）
②ページ内のスクリプトが実行される
③非同期通信のためのWeb APIが呼び出される
④バックグラウンドでサーバと通信が行われる
⑤XMLやJSONなどの形式でデータが送られてくる
⑥DOM（Document Object Model）によって定義されているページ内の各要素を変更する

:star:JASONとは
WebサービスがAPIを通じて返すデータのフォーマット

例えば、Twitter APIを使って、Twitterから特定のキーワードを含むツイートの情報を取得したい場合、Twitter APIが返すデータのフォーマットにはJSONが使われます。APIとJSONを組み合わせることで、異なるソフトウェア同士がデータをやりとりすることができます。

:star:SEOとCGM（Consumer Generated Media）について
SEOは知っての通りだが、SEOを利用して詐欺サイトや不正なソフトウェアを仕込んだページを検索結果の上位に表示されるようにする「SEOポイズニング」にも注意。

CGMは名前の通り、消費者が生成するメディアであり、簡単に言うとサービス利用者が投稿することによって成り立つブログやオンライン掲示板、SNSや料理例シピサイトのことを言う。

:star:意外と知らない電子メールの仕組み
電子メールはコンピュータ同士の直接のやり取りのように思われているが、メールサーバというポスト兼私書箱の存在によって初めて実現できる。

昔はテキストのやり取りしか出来なかったが、「MIME（Multipurpose Internet Mail Extension）」という規格によって画像や音声、動画などの様々なファイルを扱えるようになった。

メールアドレス：yucchi@gamil.com
ドメイン名：住所（ネットワークAの）
ユーザー名：郵便物の宛名（yucchiさん宛て）

To：テメェ宛だコラ！
CC（Carbon copy）：参考までに一応コピー送っとくで
BCC（Blind Carbon Copy）：他者に伏せた状態でこっそりコピー送っとくでな
BCCは「お客さんへの資料だけど、一応上司にも確認しといて欲しいな…」って時に使う。

・SMTP
メールの送信時に使うプロトコルはSMTP
実際の郵便で考えると
①ポストに入れる
②郵便屋が運ぶ
（電子メールソフトから送信されたメール本文を受け取る）
③相手の郵便受けに届く（宛先にあるメールアドレスを確認して、相手先のメールサーバへ配送する。）
ここまでがSMTPの役割

・POP
メール受信時に使うプロトコル
（郵便受けからメールを取り出す役割）

ユーザーから「ワシにメール来てへんか？」と確認依頼がくると、「テメェのメールボックスになんか来とるさかいチェックしとけよ！」と配送する。
現在はPOP3が主流

・IMAP（Internet Message Access Protocol）
POP同様電子メールを受信するためのプロトコルだが、送受信データをサーバ上で管理するので、どのコンピュータからもデータを参照できる。

:star:メールセキュリティの救世主SSL/TLSとは
⚠SMTP, POP, IMAPはすべてネットワーク上を無防備な状態で行き交う

そのため中身を盗み見されたり、改ざんされる恐れもある。
→SSL/TLSという暗号化プロトコルを使って、サーバとの間の通信経路を安全にやり取り出来るようにしょう！

:star:MIME（Multipurpose Internet Mail Extension）とは
日本語の複数バイト文字や画像データファイルの添付を行えるようにする拡張規格
→MIMEに暗号化やデジタル署名の機能を加えた規格がS/MIME
暗号化：盗聴や改ざんから守る
デジタル署名：なりすまし防止

:small_orange_diamond:デジタル署名補足
電子メールにおいてデジタル署名を行う場合、メッセージの送信者は、自分の秘密鍵を使用してメッセージに署名します。そして、受信者は送信者の公開鍵を使用して、送信者が署名したメッセージが本当にその人から送信されたものであることを確認することができます。

例えば、銀行から送信されたメールであれば、送信者の公開鍵が銀行の公式ウェブサイトで公開されていることが多く、受信者はその公開鍵を使用して、メールが銀行から送信されたものであることを確認することができます。これにより、メールの送信者が本当にその人であることや、メッセージが改ざんされていないことを確認することができます。

:star:電子メールの変遷
①ASCII文字のみ
②MIME登場で複数バイト文字も可能に
③HTML形式も可能に・・・画像や文字装飾など表現力豊かになったが、悪意のあるスクリプト混入のリスクも
※開いたら勝手にスクリプト実行されてウイルス感染みたいな

:star:メールの注意点
Windows,MAC,Unix,Linuxなどによって表示出来ない文字コードがあるので、機種依存文字には注意すること
（半角カナも意外と化けたりするので注意）

:star:ビッグデータや人工知能って結局何なの？
ビッグデータ：ICT（Internet Communication Technology）の発達によって日々蓄積されていく膨大なデジタルデータ
IOT化が進み、日々大量の数値化されたデジタル情報が生み出されています。
人の手で管理するのは多すぎて不可能なので、人工知能に助けてもらうイメージです。

:star:ビッグデータの3つの特性
・Variety（多様性）
DBで扱いやすい整形済のデータだけでなく、画像や音声、その他の非構造化データも対象になる。

・Velocity（頻度）
SNSなどの不特定多数の個人が発信する乱雑なデータ、刻一刻と変化する株価、各種センサーから取得できるリアルタイムデータなど

・Volume（量）
膨大なデータ量、それを処理出来るだけの能力を有する

:star:最近よく聞くデータマイニングって何？
※これらを分析する際は、一部だけを抜き出して対象とするサンプリングは行わず、データ全体を対象に統計学的手法を用いて行う。
大量のデータを統計的、数学的手法で分析し、法則や因果関係を見つけ出す技術をデータマイニングと言う。

:star:AIとビッグデータ、機械学習の概要
人間は知り得た情報をもとに分析し、自然と学習を行うことで意思判断を行うことが出来る。
これをコンピュータシステム上で実現させる技術を人工知能（AI）と言う。
このAIの中核技術が機械学習（機械が学習することでタスク遂行のためのアルゴリズムを自動的に改善していく）である。

■教師あり学習
データと正解をセットにして与える（もしくは誤りを指摘する）
例：猫の写真を「猫」という正解付きで与える
どのような特徴があれば猫と言えるのかを学習していく

■教師なし学習
データのみを与える
猫と犬と人の写真を大量に与えることによって、コンピュータ自ら共通の特徴や法則性を見つけ出し、データの集約や分類を行えるようにする。

■強化学習
個々の行動に対する良し悪しを特点として与えることで、得点が最も多く得られる方策を学習する手法。
コンピュータがランダムに試行錯誤し、偶然得られた良い結果の行動を学習することで、少しずつ適切なアルゴリズムに近づいていく。

上記の更に強化版が「ディープラーニング」
人間の脳神経回路を模したモデル（ニューラルネットワーク）に大量のデータを解析させることにより、コンピュータ自体が自動的にデータの特徴を抽出して学習を行う。