基本情報技術者 ~ネットワーク[2]~
こんにちは!ポテトヘッド(@potato_head0809)です!
前回はLANやWANについて学びました。
LANの接続形態やクライアントサーバシステム、
パケットに分けたデータの送信の方式について
触れたことを覚えていますでしょうか。
まだご覧になっていない方はこちらからどうぞ。
ネットワークの基本についての記事
potato-head0809.hatenablog.com
今回はそんなデータを送信するときなど
ネットワークを通じてコンピュータ同士がやりとりを
するときの約束事について見ていきましょう。
コンピュータはさまざまな約束事に従い
ネットワークを使ってデータのやりとりを行います。
その約束事を「プロトコル」と言います。
データを送信する以下のような流れも
プロトコルとして定められています。
プロトコルにはさまざまな種類があり、
「どんなデータ形式で」や「どんなサービスを提供するか」など
すべてにおいて細かく決められています。
それらを7階層に分けた「OSI基本参照モデル」というものがあります。
これらの7階層の全てを組み合わせると
コンピュータ同士がやりとりを行えるようになっています。
なぜ、7階層に分けているのか...。
それは、プロトコルの一部を変えたいときに
7階層に分けていることで全てを変更せずに
1部を変えるだけで済むからです。
ちなみに現在のインターネットでは
パケット
通信データをパケットに分割して送信しています。
そこで、なぜデータを分割して送信する必要があるのか。
それは通信路に流せるデータの上限が決まっているからです。
例えば、下の図の「100BASE-TX」というネットワークの場合だと、
1秒間で流せるデータ量は100Mbitまでと決まっています。
では、このような決まりがあるにも関わらず、
大きなデータを一気に流すとどうなるのか...。
想像できるかもしれませんが、
簡単に言うと、効率が悪くなります。
このような状況にならないようにデータをパケットに分割して
ネットワークを誰もが使えるように分け合っています。
さいごに。
今回は約束事であるプロトコルと
なぜパケットに分けてデータを送信するのかについて
見てきました。
今回触れたOSI基本参照モデルは
重要なものですので、ある程度覚えておいた方がいいでしょう。
次回はネットワークを構成する装置について
OSI基本参照モデルを使いながら学んでいきます。
最後までご覧頂きありがとうございました。
宜しければツイッター(@potato_head0809)のフォローをお願いします。
今回は以上になります。
お疲れ様でした。
基本情報技術者 ~ネットワーク[3]~
こんにちは!ポテトヘッド(@potato_head0809)です!
前回はプロトコルについて学びました。
ご覧になっていない方はご覧になってください。
ネットワークの基本
potato-head0809.hatenablog.com
プロトコルについて
potato-head0809.hatenablog.com
今回は、ネットワークを構成する装置について見ていこうと思います。
前回触れたOSI基本参照モデルは覚えていますでしょうか。
忘れてしまったという方はプロトコルの記事で触れていますので
ぜひ一度ご覧になってから今回の記事を読んでみてください。
では始めていきましょう!
ネットワークを構成する装置
まずは全体像を図で見てみましょう。
図のような感じでさまざまな装置が存在します。
今回はこれらを1つずつ学んでいきます。
NICとは...
コンピュータをネットワークに接続するための拡張カードのことです。
別名、LANボードとも言います。
NICの役割は、データを電気信号に変換してケーブルへ流します。
それを受け取るのもNICの仕事です。
NICのようなネットワーク機器には
製造段階でMACアドレスというものが割り当てられています。
MACアドレスとは、IEEE(米国電気電子技術者協会)によって管理されている
世界中で重複しない番号です。
こんなに単純なものではありませんが、
とりあえずこんなものだと思っていただければ大丈夫だと思います。
イーサネットではこのMACアドレスを使ってそれぞれの機器を識別します。
イーサネットは覚えていますでしょうか。
LANの規格のことです。詳しくはネットワークの基本をご覧ください。
リピータ
リピータとは...
物理層の中継機能を提供する装置です。
ケーブルを流れる電気信号を増幅して
LANの総延長距離を伸ばす役割を持っています。
LANの規格では方式ごとにケーブルの総延長距離が定められており、
定められている距離以上の距離で通信すると
信号が上手く届きません。
そこでリピータの登場です!
ただ、距離を伸ばせるのはメリットですが、
電気信号を増幅させるだけなので不要なパケットも中継してしまうデメリットがあります。
パケットはネットワークに流れると宛先に関係なく全員に渡されるものです。
この無条件にデータが流れている範囲のことをセグメントと言います。
このセグメント内に大量のコンピュータが接続されていると。
当たり前ですが、パケットの衝突が多発するので回線の利用効率が悪くなってしまいます。
ブリッジ
ブリッジとは...
データリンク層の中継機能を提供する装置です。
先ほど説明したセグメントとセグメントの間で、流れてきたパケットの
MACアドレス情報を確認し、必要であれば他方のセグメントへ流す役割を持っています。
ブリッジは、流れてきたパケットを監視することで
最初にそれぞれのセグメントに属するMACアドレスの一覧を記憶しています。
以降はその記憶した一覧に従い、セグメント間を中継する必要があるのかを判断しています。
そして中継する必要のあるものだけを中継しています。
中継パケットはCSMA/CD方式に従って送出しているので
衝突の発生を抑え、ネットワークの利用効率を向上させています。
ハブ
ハブとは...
LANケーブルの接続口(ポート)を複数持っている集線装置です。
ハブには2種類あります。
「リピータハブ」と「スイッチングハブ」の2つです。
リピータハブは、内部的にリピータを複数束ねたものです。
一方、スイッチングハブはブリッジを複数束ねているものです。
ブリッジはMACアドレス情報によって中継するかを決めていましたよね?
なのでスイッチングハブはそれと同様、判別してから送出するようになっています。
ルータ
ルータとは...
ネットワーク層の中継機能を提供する装置です。
異なるネットワーク同士の中継役として、流れてきたパケットの
IPアドレス情報を確認し、最適な経路へパケットを流す役割を持っています。
話を少し戻しますが、ブリッジの中継はMACアドレスが確認できる範囲のみ。
外のネットワークへはパケットを中継することはできないのです。
そこで、登場するのがルータです。
ルータはパケットに書かれた宛先IPアドレスを確認し、
自身の持つ経路表というものと照らし合わせ、最適な経路を選択します。
ブリッジはセグメント間、ルータはネットワーク間。
ゲートウェイとは...
トランスポート層以上が異なるネットワーク間で
プロトコル変換によって中継機能を提供する装置です。
ネットワーク双方で使っているプロトコルの差異を
ゲートウェイが変換・吸収することでお互いの接続が可能になります。
メールなんかもゲートウェイが活躍しています。
携帯から送信したメールがパソコンで見れるのは
このゲートウェイが活躍しているからです。
さいごに。
今回は様々な装置についてみていきました。
色々な種類を一気に見たので混乱してしまったかもしれません。
そんな時はもう一度ご覧になってみてください。
今回も最後までご覧頂きありがとうございました。
宜しければツイッター(@potato_head0809)のフォローをお願いします!
今回は以上になります。お疲れ様でした。
次回もお願い致します。
基本情報技術者 ~データベース[1]~
こんにちは!ポテトヘッド(@potato_head0809)です!
今回はデータベースについて学んでいこうと思います!
では、早速始めましょう!
DBMS(Data Base Management System)とは...?
日本語で言うと、データベース管理システムです。
データベースを利用したいアプリケーションに対して、
データベース機能を提供するミドルウェアのことです。
ミドルウェアなどについてはソフトウェアの基本的なところで
触れていますので、宜しければご覧ください。
potato-head0809.hatenablog.com
データベースにはいくつか種類があり、代表的なものは
「関係型」「階層型」「ネットワーク型」などがあります。
現在の主流は「関係型」となっています。
今回は関係型である関係データベースについて見ていきましょう!
関係データベース
関係データベースは表の形でデータを管理するデータベースです。
表、列、行と呼ばれるものがあるのでぜひ覚えてください。
また、参考書などでレコードやテーブルなど別の呼び名で書かれていることもありますが、
それらはただの別の呼び名なので焦らないでくださいね。
データベースは基本的に1件のデータを1つの行として記録していきます。
また、削除や追加する際も、行単位で行っていきます。
ちなみに関係データベースの呼び名は
「リレーショナルデータベース」と言います。
正規化
関係データベースでは記録されているデータに矛盾や重複が発生させないように
最適な形にすることが大切になります。
その方法として、表を分割したりして最適な形に作り上げていきます。
これを正規化と言います。
例えば下の図では、ある学校の生徒と所属する部活動を記した表があるとします。
そこで、現在の「芸術部」を「美術部」に変更するという指示が出た場合、
最初の表のままだと、部活動の「芸術部」の部分をすべて書き換えなければなりません。
では、どうするのか。それが分割です。
部活動の名前が書かれていた列を、部活動IDとして記録するとします。
こうすることで、たとえ部活動の名前が変わっても部活表の方の名前を帰るだけで済みます。
正規化をすることで、修正が楽になるだけではなく、
書き換える際のミスや記入漏れの可能性を減らすことができます。
本来の正規化はもう少し複雑ですが、基本的な知識はこのくらいで大丈夫です。
関係演算
表を正規化して最適な形にするメリットはわかりましたでしょうか。
しかし正規化をして分割を繰り返した表はどのようにして使っていくのかという問題になります。
そこで出てくるのが関係演算です。
関係演算には「選択」「射影」「結合」などがあります。
代表的なものを1つずつ見ていきましょう。
選択
「選択」は行を取り出す演算で、表の中から特定の
条件に合致する行のみを取り出します。
射影
「射影」は列を取り出す演算で、表の中から特定の
条件に合致する列のみを取り出します。
結合
「結合」は表と表を合わせる演算で、表の中にある共通の列を繋いで
2つの表を1つにします。
このように関係演算を用いて表をさまざまな形にしてデータを活用します。
この時に作られる仮想的な表のことを「ビュー表」と言います。
さて今回の最後に「スキーマ」について見ていきましょう。
スキーマはデータベースの構造や仕様を定義するものです。
標準的に使用されている規格では3層スキーマ構造を採用しており、
「外部スキーマ」「概念スキーマ」「内部スキーマ」という3層に分けることで、
データの独立性を高めています。
関係演算を使って仮想的な表を触っても、
データベースのデータの構造には影響は出ません。
また、物理的に記憶させているハードウェアに変更があっても
プログラムの修正は必要ありません。
さいごに。
今回も最後までご覧頂きありがとうございました。
データベースはプログラミングの勉強をしていると
多くの方が学ぶことにあんる分野だと思います。
勉強しておいて損はありません。
SQLとか触れるとかっこいいですね〜!!!
宜しければツイッター(@potato_head0809)のフォローをしてくださいね!
以上になります。お疲れ様でした。
基本情報技術者 ~データベース[2]~
こんにちは!ポテトヘッド(@potato_head0809)です!
今回はデータベースの「主キー・外部キー」について学んでいこうと思います。
データベースの基本的なことについては
以前の記事で書いていますので宜しければご覧ください。
データベースの基本
potato-head0809.hatenablog.com
では、早速始めていきましょう。
主キー・外部キー
以前の記事でデータベースを最適な形にすることについて
学んだことを覚えていますでしょうか。
前回の例で言うと、部活動の名前を別の表に移して...
というように分割をしましたね。
そのようにして作られた表と元の表に関係が無ければ
分割した意味が全く無くなってしまいます。
そこで、関係付けるのが「主キー」と「外部キー」です。
言葉ではあまりイメージができないかもしれませんので、
1つずつ図を使いながら見ていくことにしましょう。
主キー
主キーとは、行の1つ1つを識別できるものです。
学校で言えば、学籍番号が主キーに当たります。
学籍番号がわかれば、その生徒の情報が分かりますよね。
上の図のように、生徒表であれば学籍番号。
前回切り分けた部活表の方では部活動IDが主キーとなります。
重要なのは、その主キーが分かればそのキーの情報が分かるということと、
他の行と重複しないものが主キーに適しているということです。
外部キー
続いて、外部キーについて見ていきましょう。
以前から関係データベースについて見てきましたが、
関係データベースでは表と表を関係付けることができましたよね。
では、何を基準にして関係付けていましたでしょうか。
実は、ここでも主キーが必要となってきます。
外部キーとは表と表を関係付けるために、
他の表の主キーを参照する列のことを言います。
言葉ではイメージしづらいかもしれません。
では図を見てみましょう。
このようにして、他の表と関係を作っています。
この関係を作ることで、簡単に欲しい情報が見つけられます。
例えば、「〇〇君は何部に所属しているのか。」などですね。
さいごに。
今回は少し短めでしたが、主キー・外部キーについて学びました。
データベースが大きくなるにつれて、表を最適化するために
分割して作られる表の数も増えてくると思います。
そこで大切なのが今回のキーの関係です。
ぜひ、覚えておいてください。
今回も最後までご覧頂きありがとうございました。
宜しければツイッター(@potato_head0809)をフォローしてください!
以上になります。お疲れ様でした。
基本情報技術者 ~ファイル管理[1]~
こんにちは!ポテトヘッド(@potato_head0809)です!
今回はファイル管理について学んでいこうと思います!
普段使っているパソコンですが、ファイルを扱うことは誰にでもあると思います。
また、プログラミングの勉強をしている方はターミナルで
ファイル操作をしたことがあると思います。
プログラミングの勉強をするにはファイル管理は
結構重要なものになってくるかもしれませんね。
では、早速始めましょう!
ディレクトリは、ファイルをグループ化し整理してくれます。
ディレクトリはフォルダとも言います。
ディレクトリには、フォルダだけを入れられるわけではなく、
ディレクトリを入れることができます。
上記のようにディレクトリの中にディレクトリを入れられるので、
より整理することができます。
このとき、構造の一番上にあるディレクトリのことを「ルートディレクトリ」と言います。
また、ディレクトリの中に入ってるディレクトリのことを「サブディレクトリ」と言います。
カレントディレクトリ
パソコンを触ったことがある方なら、ディレクトリをクリックして...中身を見て...
という風にしたことがあると思います。
自分が今開いているディレクトリのことを「カレントディレクトリ」と言います。
そのカレントディレクトリの中身を見ているとき、その中に入っているディレクトリがあるのは
見ることができますが、そのサブディレクトリの中身までは見ることができません。
そのサブディレクトリの中身を見るには、開くしか方法はありません。
カレントディレクトリの1つ下をサブディレクトリと言いますが、
もちろん上のディレクトリの呼び名もあります。
カレントディレクトリの1つ上のディレクトリを「親ディレクトリ」と言います。
パス
ファイルの場所を示すにはパスを用います。
パスには2種類あります。
まずは絶対パスから見ていきましょう。
まずはパスを示す際の注意点を見ておきましょう。
下の図を見てください。
これを頭に入れて、進みましょう!
絶対パスではルートディレクトリからの経路を示さないといけません。
図で見た方が理解しやすいと思いますので見てみてください。
下の図では「FILE2」の絶対パスを示しています。
ルートディレクトリを「/」で示したり...と面倒なことがありますが、
徐々に慣れると思うので頑張っていきましょう!
続いて相対パスを見ていきましょう。
まずは相対パスを示す際の注意点から見ておきましょう。
絶対パスの際の注意点とほとんど変わりません。
わざわざルートディレクトリを示す必要がありません。
経由しないときで少し変わってきます。
まずは親ディレクトリを経由しない場合から見ていきましょう。
パスを示すとき、カレントディレクトリは「.」と書きます。
親ディレクトリを経由しない場合はシンプルでわかりやすいと思います。
続いて親ディレクトリを経由する場合です。
一度親ディレクトリに戻らないといけないことに注意しなくてはいけません。
この時、親ディレクトリは「..」で示します。
さいごに。
今回はファイルの管理について学びました。
普段ファイルを操作するときは階層などをあまり意識しないかもしれませんが、
プログラミングの勉強をしていると必ず階層を意識した操作をする時があるはずです。
そのため、ファイル管理はとても重要ですので、理解しておくと後々楽になります。
今回は最後までご覧頂きありがとうございました。
宜しければツイッター(@potato_head0809)のフォローをお願い致します。
基本情報技術者 ~論理演算・論理回路 [1]~
こんにちは!ポテトヘッド(@potato_head0809)です!
今回は論理演算と論理回路について学んでいきたいと思います。
では早速始めていきましょう!
論理演算
論理演算とは「1」をTrue、「0」をFalseとして、
「1」と「0」の2つの値だけで演算を行います。
この論理演算は特に難しいものではなく、「Aの条件に該当するグループ(Aが真)」や
「Bの条件に該当するグループ(Bが真)」「どちらにも該当するものは?」みたいな
どれが該当するかを探したもの、それこそが論理演算です。
ここからは「ベン図」を使って説明していきます!
今は何を言っているのか分からないと思いますが、大丈夫です。
例えば、「Pythonができる人」「Javaができる人」がいるとします。
そこに「どちらもできます」という人もいるとします。
これらの条件を使って見ていきましょう。
論理積(AND)
まず初めに論理積です。
論理積では2つの条件を両方満たすものを「真」とします。
つまり「どちらもできる」という人が該当します。
論理和(OR)
続いては論理和について見ていきます。
論理和では2つの条件のどちらかが該当すれば「真」とします。
つまり今回の例では「Pythonができる人」または「Javaができる人」が該当します。
否定(NOT)
最後に否定について見ていきます。
条件として「Pythonができる人」と条件を設定したとき、
この時に満たされる範囲は「Pythonができる人」意外の部分が該当します。
つまり条件を否定するものが条件として満たされることになります。
なぜ初めに論理演算について触れたかと言うと、
これから学んでいく論理回路に大きく関係するからです。
論理回路とは、論理演算する回路のことをいいます。
この論理回路の基本は以下の図の3つです。
では、それぞれについて見ていきましょう!
論理積回路(AND回路)
論理積回路は入力がどちらも「1」だった場合に
「1」を出力します。
入力の値の組み合わせは全部で4種類あります。
これを表で表したのが真理値表です。
論理積回路の真理値表は以下のようになります。
論理和(OR回路)
論理和回路は入力のどちらかが「1」だった場合、「1」を出力します。
論理和回路の真理値表を見てみましょう。
否定回路(NOT回路)
否定回路は入力が「1」だった場合「0」を出力、
入力が「0」だった場合「1」を出力します。
入力の反対の値を出力します。
では、否定回路の真理値表を見てみましょう。
ここで注意することは入力の値の組み合わせは2種類です。
さいごに。
論理回路はこれだけではありません。
今回の内容を応用し、新たな論理回路を作ることもできます。
その辺りの内容については、後日触れていきたいと思います。
今回も最後までご覧頂きありがとうございました。
宜しければツイッター(@potato_head0809)のフォローをお願いします!
また次回もよろしくお願い致します。
基本情報技術者 ~2進数[1]~
こんにちは!ポテトヘッド(@potato_head0809)です!
今回は、コンピュータを理解する上で、基本となる2進数というものを
学んでいこうと思います。
意識したことはないかもしれませんが、我々の生活では
10進数が使われていることが大半です。
数を数えるとき、お金を払ってお釣りが返ってくるとき...などなど。
では、まず2進数とはどういうものなのかというところから見ていきましょう。
2進数とは...
私たちが数を数えるときは0から数えて、
10で桁が1つ増えますよね?
つまり、「0」「1」「2」「3」「4」「5」「6」「7」「8」「9」の
10個の数字を使って数を表しています。
では、2進数ではどうでしょう。
簡単です。10進数が10個の数字しか使えなかったので、2進数では2個の
数字しか使うことができません。簡単に言うとこんな感じです。
8進数や16進数も同じです。
8進数では8個の数字、16進数では16個の数字を使って表します。
桁の上がり方の理解に最初は苦労するかもしれませんが、
慣れれば簡単にイメージを掴めると思います。
この仕組みを理解できないと、次のn進数の基数変換などが
理解しにくいので、頑張って理解してください。笑
難しいと思わず、まずはゆっくり考えてみればそんなに難しいことではありません。
桁の重み
では次に基数変換する際に非常に重要になる桁の重みについて
学んでいこうと思います。
まずは、桁の重みの法則を図にしたので見てください。
言ってしまえば、これに当てはめれば基数変換はできます。
それぐらい重要なものです。
例えば10進数の場合...。
1の位、10の位、100の位など聞いたことがありますよね?
上の図のnの部分に10を当てはめてみます。
まず、10の0乗は1(1の位)、10の1乗は10(10の位)、10の2乗は100(100の位)と
これで位を求められます。
普段何気なく扱っている数字もこれをもとに桁の重みを表現しています。
これは2進数や8進数、16進数でも変わりません。
これを使って基数変換を学んでいきましょう!
基数変換
基数変換とは、ある基数で表した数字を、別の基数表現に置き換えることをいいます。
例えば、10進数を2進数で表す。といったように変換を行うことです。
ではまずは、n進数から10進数に変換する方法から学んでいきます!
n進数から10進数への基数変換
まずは先ほど説明した桁の重みを思い出してください。
今回は2進数から10進数へ変換していきます。
2進数は「1001.011」を使っていきます。
そして説明に入ろうと思いますが、言葉でだらだらと説明しても
図を見て頂いたほうがわかりやすいと思いますので、見てください。
まずは桁の重みの求め方です。
先ほど10進数で説明したように、nの部分に2を当てはめていきます。
なぜ2なのかというと、2進数から変換していくからです。
2の0乗は1、2の1乗は2、2の2乗は4、2の3乗は8、という風に求められますね。
そして図のように対応する値と桁の重みを掛けていきます。
そして求められた数字を足し合わせると...
2進数から10進数に変換したときの値が求められるのです!
では次は今回の反対、10進数からn進数に基数変換する方法を見ていきましょう。
10進数からn進数への基数変換
整数部と小数部で計算の方法は異なります。
整数部には割り算、小数部には掛け算を行って求めていきます。
これも図を見てイメージしてみてください。
まずは整数部の計算方法。
図でも示したように、商が0になるまで繰り返します。
ここで重要になるのは「余り」です。
これについては後ほど説明します。
では次に小数部の計算方法。
図にもあるように、小数部の計算では「変換したいn進数」と「変換する10進数の小数」を掛けます。
すると、計算結果の小数をn進数と掛けて...というように小数の部分が0になるまで掛け続けます。
ここで重要になるのは「整数部」の部分です。
これについても後ほど説明します。
さて、ここからは10進数を2進数に変換する例題を使って説明していきます。
まずは先ほど2進数から10進数に変換した際に
変換された「9.375」を使って元に戻るか確認してみましょう。
まずは整数部の計算から見ていきます。
図の通りでどんどん割り算を繰り返していきます。
先ほど「余り」が重要と述べたのは、この余りが変換した時の結果になるからです。
商が0になるまで繰り返した割り算のそれぞれの余りは整数部の場合は下から順に並べます。
続いて小数部を見ていきましょう。
整数部の計算とは違い、小数部の計算では掛け算を繰り返します。
計算の際の注意点としては、掛け算で求められた数の整数部が0ではない場合でも
次の掛け算をする時には整数部は0になっているということです。
そして先ほど述べた重要になるのは「整数部」というのは
変換した結果になるからです。
整数部の計算では「余り」、小数部の計算では「整数部」と
なかなかややこしいですが、覚えるしかありません。笑
さて話を戻しまして、小数部が0になるまで繰り返した掛け算の
それぞれの商は先ほどとは異なり上から順に並べます。
整数部の計算で得られた結果を下から並べ、
小数部の計算で得られた結果を上から並べると、
「1001.011」というようになります。
さいごに。
本日は2進数とは何か、基数変換の方法について学びました。
n進数から10進数への基数変換、10進数からn進数への基数変換を見てきたように、
ややこしい部分が多かったですね...。
n進数からn進数への基数変換などもありますが、今日の内容を理解できていれば
あとは応用するだけですので、本日の内容はとても重要になります。
難しいと感じるかもしれませんが、内容自体はそんなに難しいものではありません!
仕組みが分かれば簡単だと思えるはずです!
2進数の扱いは必ず必須になってくるので、がんばりましょう!
最後までご覧頂きありがとうございました。
宜しければツイッター(@potato_head0809)のフォローもお願いします!