今日の授業では「情報通信ネットワークとデータの活用」について学びます。通信中に情報が正しく届かない原因や、それをどう対処するのか、冗長なビットやパリティ検査などの方法を通じて理解を深めます。
黒板
![通信の信頼性](https://joho-terakoya.com/wp-content/uploads/2023/08/2f71bb93a0499ededa3de9a0b706ad8c-4-546x1024.png)
授業
通信の信頼性とは?
![](https://joho-terakoya.com/wp-content/uploads/2023/04/f2162247d6ded898b96b3d93e752f8e5-1.png)
さて、情報通信ネットワークでの通信は、いろんな原因で情報が正しく届かないことがあるんだ。
![](https://joho-terakoya.com/wp-content/uploads/2023/04/16371f1b819fa772e8628c93a9bbf46d-1.png)
え、マジで?LINEとかメールとか、ちゃんと届いてないことあるんですか?
![](https://joho-terakoya.com/wp-content/uploads/2023/04/f2162247d6ded898b96b3d93e752f8e5-1.png)
そうだね。ノイズやネットワークの混雑、ウイルスや人の介入など、さまざまな原因で情報が変わってしまうことがあるよ。
![](https://joho-terakoya.com/wp-content/uploads/2023/04/cb0d259219ea5886bfa3891c468ff2a0-1.png)
それって怖いですね。どうやって対処してるんですか?
冗長なビットとは?
![](https://joho-terakoya.com/wp-content/uploads/2023/04/f2162247d6ded898b96b3d93e752f8e5-1.png)
通信中の誤りを検出・訂正するために、送信するデータに余分なビットをつけ加える方法があるんだ。この余分なビットを「冗長なビット」というよ。
![](https://joho-terakoya.com/wp-content/uploads/2023/04/cb0d259219ea5886bfa3891c468ff2a0-1.png)
え、余分なデータを送るなんて、もったいなくないですか?
![](https://joho-terakoya.com/wp-content/uploads/2023/04/f2162247d6ded898b96b3d93e752f8e5-1.png)
確かにデータ量は増えるけど、これによって通信の信頼性が高まるんだ。
![](https://joho-terakoya.com/wp-content/uploads/2023/04/63cef23d2e450e29361ffd9d51963edf-1.png)
なるほど、安全のための「おまけ」みたいなものなんですね。
パリティ検査とその具体例
![](https://joho-terakoya.com/wp-content/uploads/2023/04/f2162247d6ded898b96b3d93e752f8e5-1.png)
冗長なビットの例として「パリティ検査」について学ぶよ。パリティには「奇数パリティ」と「偶数パリティ」の2種類があるんだ。今回は、よく使われる「偶数パリティ」を例にして説明するね。
![](https://joho-terakoya.com/wp-content/uploads/2023/04/cb0d259219ea5886bfa3891c468ff2a0-1.png)
パリティって何ですか?
![](https://joho-terakoya.com/wp-content/uploads/2023/04/f2162247d6ded898b96b3d93e752f8e5-1.png)
パリティは、データの誤りを検出するための方法の一つで、追加するビットのことを指すんだ。偶数パリティでは、データ中の「1」の数が偶数になるようにパリティビットを追加する。
![](https://joho-terakoya.com/wp-content/uploads/2023/04/cb0d259219ea5886bfa3891c468ff2a0-1.png)
それってどういうことですか?具体的に教えてください。
![](https://joho-terakoya.com/wp-content/uploads/2023/04/f2162247d6ded898b96b3d93e752f8e5-1.png)
了解。例えば、送りたいデータが「10010100」という8ビットのバイナリデータがあるとするね。このデータの中には「1」が3つあるから、1の数は奇数だね。
![](https://joho-terakoya.com/wp-content/uploads/2023/04/cb0d259219ea5886bfa3891c468ff2a0-1.png)
「1」の数が偶数になるようにパリティビットを加えるというと、この場合はパリティビットは「1」ということですか?
![](https://joho-terakoya.com/wp-content/uploads/2023/04/f2162247d6ded898b96b3d93e752f8e5-1.png)
その通り!パリティビットを「1」として最後に追加すると、「100101001」という9ビットになるよね。これのデータには1の数が4つあるから、偶数ということになる。(注:青マーカーの部分がパリティビットです)
![](https://joho-terakoya.com/wp-content/uploads/2023/04/cb0d259219ea5886bfa3891c468ff2a0-1.png)
なるほど。そこまではわかったけれど、これでどうやって間違っていることが検出できるですか?
![](https://joho-terakoya.com/wp-content/uploads/2023/04/f2162247d6ded898b96b3d93e752f8e5-1.png)
受信側でデータを受け取ったとき、「100111001」のように途中の0が1に誤ってしまった場合、全体で「1」の数が5個になっ、偶数にならない。受信側がこれは偶数パリティのルールとは違うといううことに気がつくんだ。(注:ピンクマーカーの部分が誤り発生ビットです)
![](https://joho-terakoya.com/wp-content/uploads/2023/04/788ba1b9cd590f0d71a03527896754c9-1.png)
なるほど。これで誤りが検出できるんですね。
![](https://joho-terakoya.com/wp-content/uploads/2023/04/f2162247d6ded898b96b3d93e752f8e5-1.png)
そうだね。ただ、パリティ検査には一つ大きな制限があるんだ。それは、2ビット以上の誤りを検出できないことだ。
![](https://joho-terakoya.com/wp-content/uploads/2023/04/cb0d259219ea5886bfa3891c468ff2a0-1.png)
え、どういうことですか?
![](https://joho-terakoya.com/wp-content/uploads/2023/04/f2162247d6ded898b96b3d93e752f8e5-1.png)
考えてみて。もし2ビットのデータが誤って変わった場合、例えば「1」が「0」に、そして「0」が「1」に変わったとすると、全体の「1」の数は変わらないよね。そのため、パリティビットを使っても誤りを検出できないんだ。
![](https://joho-terakoya.com/wp-content/uploads/2023/04/788ba1b9cd590f0d71a03527896754c9-1.png)
あ、確かにそうですね。2ビットが変わると、全体の「1」の数は同じままですもんね。
![](https://joho-terakoya.com/wp-content/uploads/2023/04/f2162247d6ded898b96b3d93e752f8e5-1.png)
正解。このような制限を克服するために、より高度な誤り検出・訂正の方法が研究されてきた。その中で、CRC(巡回冗長検査)が非常にポピュラーだよ。
![](https://joho-terakoya.com/wp-content/uploads/2023/04/cb0d259219ea5886bfa3891c468ff2a0-1.png)
CRCって何ですか?
![](https://joho-terakoya.com/wp-content/uploads/2023/04/f2162247d6ded898b96b3d93e752f8e5-1.png)
CRCは、データのビット列に対して特定の計算を行い、その結果を送信データに追加する方法だ。
![](https://joho-terakoya.com/wp-content/uploads/2023/04/788ba1b9cd590f0d71a03527896754c9-1.png)
特定の計算というと、パリティ検査のように1の数を数えると言った単純なやり方ではないという事ですね。
![](https://joho-terakoya.com/wp-content/uploads/2023/04/f2162247d6ded898b96b3d93e752f8e5-1.png)
その通り。送信側では,ビット列をある生成多項式という名前の式で割った余りをそのビット列に付加して送信し,受信側では,受信したビット列が同じ生成多項式で割り切れるか否かで誤りの発生を判断するんだ。
![](https://joho-terakoya.com/wp-content/uploads/2023/04/788ba1b9cd590f0d71a03527896754c9-1.png)
なるほど、CRCはより高度な誤り検出の方法なんですね。
失われたパケットの検出と再送
![](https://joho-terakoya.com/wp-content/uploads/2023/04/f2162247d6ded898b96b3d93e752f8e5-1.png)
次にパケットの再送について説明するよ。TCP通信では、送信側はデータを送信すると、受信側からの確認応答(ACK)を待つんだ。ACKとは、acknowledgeの略で、受信側が正しくデータを受信したことを送信側に通知するためのもだよ。
![](https://joho-terakoya.com/wp-content/uploads/2023/04/cb0d259219ea5886bfa3891c468ff2a0-1.png)
ちゃんと、どどいているよと伝えるんですね。ではこの通知がない場合にはどうなるんですか?
![](https://joho-terakoya.com/wp-content/uploads/2023/04/f2162247d6ded898b96b3d93e752f8e5-1.png)
ACKが期限内に受信されない場合、送信側はそのデータを再送するんだ。これにより、途中で失われたパケットや誤りが生じたパケットを補完することができる。
![](https://joho-terakoya.com/wp-content/uploads/2023/04/788ba1b9cd590f0d71a03527896754c9-1.png)
なるほど。返事がない場合には再度送ってやるんですね。
![](https://joho-terakoya.com/wp-content/uploads/2023/04/b75d9d9a6c534b3d25243ac19bc0499d-1.png)
そうだね。これによって、データの送受信が確実に行われ、通信の品質が保たれるんだ。
![](https://joho-terakoya.com/wp-content/uploads/2023/04/16371f1b819fa772e8628c93a9bbf46d-1.png)
ところで、「TCPの場合は」と言ったのは、なにか理由があるんですか?
![](https://joho-terakoya.com/wp-content/uploads/2023/04/f2162247d6ded898b96b3d93e752f8e5-1.png)
いいところに気がついたね。実はトランスポート層のプロトコルには、再送しないUDPというプロトコルもあるんだ。
![](https://joho-terakoya.com/wp-content/uploads/2023/04/cb0d259219ea5886bfa3891c468ff2a0-1.png)
それじゃ困るんじゃないですか?
![](https://joho-terakoya.com/wp-content/uploads/2023/04/f2162247d6ded898b96b3d93e752f8e5-1.png)
確かに、再送しないという特性は、一見すると困りそうに思えるよね。でも、UDPは特定の用途で非常に役立つんだ。例えば、リアルタイムのストリーミングやオンラインゲームなどで使われることが多いよ。
![](https://joho-terakoya.com/wp-content/uploads/2023/04/cb0d259219ea5886bfa3891c468ff2a0-1.png)
えっ?ストリーミングやゲームで、なんでUDPが使われるんですか?
![](https://joho-terakoya.com/wp-content/uploads/2023/04/f2162247d6ded898b96b3d93e752f8e5-1.png)
リアルタイムのストリーミングやゲームでは、速度やリアルタイム性が非常に重要だよね。UDPは再送を行わないため、データの遅延が少なく、高速にデータを送受信できる。もし一部のデータが失われても、次のデータがすぐに来るので、ユーザーは大きな違和感を感じないことが多いんだ。
![](https://joho-terakoya.com/wp-content/uploads/2023/04/788ba1b9cd590f0d71a03527896754c9-1.png)
なるほど、再送すると遅延が起きるから、リアルタイム性が求められる場面ではUDPが適してるんですね。
![](https://joho-terakoya.com/wp-content/uploads/2023/04/b75d9d9a6c534b3d25243ac19bc0499d-1.png)
正解!TCPは接続指向であり、UDPは接続レスというような言い方もあるんだ。しっかり接続されて信頼性が高いTCPと、接続されていないけれど高速なUDP。用途に応じて適切なプロトコルを選ぶことが大切だよ。
![](https://joho-terakoya.com/wp-content/uploads/2023/04/63cef23d2e450e29361ffd9d51963edf-1.png)
技術って奥が深いですね。ありがとうございます!
まとめ
- 通信の誤り原因
ネットワーク通信では、ノイズ、混雑、ウイルスや人為的書き換えにより情報が正確に届かないことがある。 - 冗長なビット
通信の誤りを検出・訂正するため、本来のデータに余分なビットを追加して送信する。 - パリティ検査
一定のビット列の中の「1」の数を基に誤りを検出する方法。パリティビットを使用してデータの正誤を判断。 - パケットの再送
TCP通信では、受信側がデータ受信を確認するためにACKを返す。ACKが返らないと、送信側は再送し、信頼性の高い通信を保証する。 - 信頼性の向上
完全な誤り防止は難しいため、誤り検出・訂正や再送処理を行い、通信の信頼性を高める。
名言解説
“Errors using inadequate data are much less than those using no data at all.” – Charles Babbage
チャールズ・バベッジは19世紀のイギリスの数学者で、計算機の先駆者として知られています。彼は「解析機」という初のプログラム可能な計算機の概念を提案しました。この機械は、現代のコンピュータの原型とも言えるものでした。
この名言は、情報やデータの重要性についての洞察を私たちに提供しています。通信の信頼性を学ぶ際、冗長ビットや再送の仕組みは、情報が正確に伝わるための手段として非常に重要です。バベッジの言葉を現代の通信技術に当てはめると、少しでも情報(データ)を持っている方が、何も持っていないよりもはるかに有利であるということが伝わります。つまり、不完全でも情報を持っていることで、それを補完や修正する手段を取ることができるのです。
情報技術や通信技術は日々進化していますが、その根底にあるのは「情報の正確性」を追求することです。学びの中で、冗長ビットや再送のような仕組みがどのように情報の信頼性を高めるのかを理解することは、未来の情報社会を支える基盤となります。チャールズ・バベッジのこの名言を胸に、情報技術の奥深さと魅力を存分に感じ取ってください。
問題
「クイズをスタート」のボタンをクリックすると、5問出題します。さあチャレンジ!
編集者ひとこと
「通信の信頼性」という、普段インターネットを使っているだけではあまり意識しないテーマについて、理解できましたでしょうか?
皆さんが利用しているインターネット環境で、速度が100Mbpsと表示されていても、実際に送受信できるデータの量は必ずしもその通りではありません。これには様々な理由がありますが、プロトコルのオーバーヘッドもその一つです。オーバーヘッドとは、信頼性を保つための冗長ビットや、ACKなどの応答データを指します。
一方通行のやり取りでは相手が理解したかどうか確認できません。相手の理解を確認しながら進めるべきか、そこまでしなくても良いか?話題によって、プロトコルを変えていくというのは人間のコミュニケーションでも同じですね。
<RANKING>
高校教育ランキング