通信のやり方
通信回線の使い方
回線交換方式
1対1で占有し通信が始まってから終わるまで、繋がりっぱなしの状態となる通信のことです。伝送の遅延がなく、データをまとめてやりとりする。回線単位で通信するために、複数の通信要求が発生した時に回線を設定できずに通信が行えない場合がある。
FDM (Frequency Division Multiplexing)
一つの通信回線や記録媒体上に複数の信号を重ね合わせるのが多重方式であるが、その方法として、周波数が重ならないようにずらして行なうものを周波数分割多重化(FDM)という。
TDM (Time Division Multiplexing)
一つの伝送路を、時間で区切って用いることで、複数の異なる信号の伝送を可能とするもの。
パケット交換方式
多対多で共用する通信やり方。パケット交換方式は通信をパケットという単位で細かく区切り、1つ1つ送っている。伝送に遅延がある。回線は占有されず、複数の通信が同時に発生しても共有し通信を行うことができる。ただし、通信が多くの通信が同時に発生した場合、混雑してきてパケットが届くのが遅くなったり、場合によっては容量オーバーでパケットが廃棄されてしまう場合がある
VC (Virtual Circuit)=コネクション型
データの送信を開始する前に送信側と受信側との間にコネクションを確立する方式です。
決まったルート
Datagram=コネクションレス型
コネクションを確立せずに、パケットを書き込んでそのまま送信する方式です。パケットは、コネクションを通して送信させるのではなく、ルータ毎にその宛先を見ながら転送が繰り返され、受信側のたどり着く。
任意のルート
パケット交換方式の遅延
\(d_{nobal} = d_{proc} + d_{queue} + d_{trans} +d_{prop}\)
\(d_{nobal} :\)
\(d_{proc} :ヘッダチェック\)
\(d_{queue}:待ち遅延\)
\(d_{trans}:送り出し=L/R\)
\(d_{prop}:伝播時間=d/s\)
R:1秒あたりに伝送路に送りだすビット数(bps)
L:パケットの長さ(bits)
L/R:リンクに全てのビットを送りだす時間
d:送信側から受信側への物理的距離
S: 伝播スピード
d/s:伝播の時間
パケットとは?
データを一定の大きさに区切り、そのデータの頭にデータの種類や行き先などを表わすヘッダー情報を付けてパケットとする。
実際にどのように送信側と受信側をつなぐのか
送り方

①送信側が送りたいものはメッセージ
②メッセージにトランスポート層のヘッダーをつける→セグメントと呼ぶ
③セグメントにネットワーク層のヘッダーをつける→パケットと呼ぶ
④パケットにデータリンク層のヘッダーをつける→フレームと呼ぶ
⑤フレームを電気シグナルに変える
⑥電気シグナルをフレームに戻す
⑦フレームからデータリンク層のヘッダーを読み取とり、その情報を元にネットワーク層に向かう→パケットになる
⑧パケットからネットワーク層のヘッダーを読み取とり、その情報を元にトランスポート層に向かう→セグメントになる
⑨セグメントからトランスポート層のヘッダーを読み取とり、その情報を元にアプリケーション層に向かう→メッセージになる
通信相手の特定
TCP/IPを用いた通信において、通信相手の特定に必要な情報は5つです。
①送信元のIPアドレス
②宛先のIPアドレス
③送信元のポート番号
④宛先のポート番号
⑤プロトコル番号
TCPなら6、UDPなら17
①〜④がわかるとパケットがどこからどこへ送られるのかを識別できます。
①〜②はネットワーク層のヘッダ、③〜④はトランスポート層のヘッダに含まれている
用語の説明
URL(Uniform Resource Locator)
https://tomostudyblog.com/hogehoge/などがよく見るURLで、先頭のhttpsがスキーム(プロトコル名では無い)と呼ばれるもので、次にホスト名/パス名が続きます。
ポート番号
どのプログラムが通信を行なっているか識別するために使います。つまり、同じコンピュータ上の複数のプログラムが識別できます。クライアント・サーバ型のシステムにおいては、デーモン(サーバ上で常時起動しており、リクエストを受けて特定の処理を行うサーバープログラム)が決まったポート番号でクライアントからの接続を受けます。例えば「httpd」はHTTPデーモンでポート番号は80番で標準で決められています。このように標準で決められた番号(1~1023番)ウェルノウンポート番号と言います。主なウェルノウンポート番号は、こちらをご覧ください。ウェルノンポートはICANNという組織で作られています。詳しくはこちらをご覧ください。ウェルノウンポート番号以外でも1024~49151番も同様に決めらています。
ポート番号 | TCP/IP | プロトコル | 用途 |
---|---|---|---|
20 | TCP/UDP | ftp-data | ファイル転送(データ本体) |
21 | TCP/UDP | ftp | ファイル転送(コントロール) |
22 | TCP/UDP | ssh | リモートログイン(セキュア) |
23 | TCP/UDP | telnet | リモートログイン |
25 | TCP/UDP | smtp | メール送信 |
53 | TCP/UDP | domain | DNS(名前解決はUDP,ゾーン転送はTCP) |
67 | UDP/UDP | BOOT/DHCP Server | IPアドレスの自動取得 |
68 | UDP/UDP | BOOT/DHCP Client | IPアドレスの自動取得 |
69 | UDP/UDP | TFTP | ファイル転送 |
80 | TCP/UDP | http | www |
110 | TCP/UDP | pop3 | メール受信 |
123 | UDP/UDP | NTP | 時刻合わせ |
139 | TCP/UDP | netbios-ssn | NETBIOS Session Service (SMB) |
143 | TCP/UDP | imap | メール受信 |
443 | TCP/UDP | https | www(セキュア) |
520 | UDP/UDP | RIP | ルーティングプロトコル |
ホスト名
ネットワーク上でコンピュータを識別するためにつけるコンピュータの名前のこと「ホスト名+ドメイン名」でホスト(≒サーバ)を表しています。
ドメイン名
インターネット上での「住所」に相当するものと言われています。
インターネット通信時に「ホスト名+ドメイン名」をIPアドレスに変換(DNSを使う)して通信が行われています。example.co.jpのドメインをサードレベルドメイン.セカンドレベルドメイン.トップレベルドメインと区分したりします。ドメインは、トップドメインレベルで管理団体が決まっています。
IPアドレス
以下記事をご覧ください!
https://tomostudyblog.com/computer-network-basic-9/
MACアドレス
機器が工場から出荷される時に1台、1台に割り振られる48ビットの識別番号です。先頭の24ビットはOUIと呼ばれるベンダ固有のIDで後続の24ビットはベンダが割り当てられた固有製造番号のこと

多重化と逆多重化
送信側(多重化)
複数のソケットからデータを収集しポートの情報をつけてネットワーク層に渡す
受信側(逆多重化)
ネットワーク層から受け取ったセグメントを正確なソケットに渡す
・コネクション型
・コネクションレス型
目的地のIPと同じなら、同じソケットに送る
インターネット通信の問題点と対策
TCP
パケットにエラー
チェックサム
・送信側
セグメントを16ビットの2進数と考えて、計算されたチェックサムの値をUDPのチェックサムフィールドに入れる
・受信側
受信したセグメントのチェックサムの値を計算し、受信したチェックサムフィールドの値を同様か確かめる
送信先にしっかり届いたのか
ACK(Acknowledgement)の利用
データが受信側に来たらACKを送信側に送る事で、データが受信側に届いた事を送信側に伝える。具体的に言うと受信パケットのシーケンス番号に1を足した値を返す。これは、次はこのシーケンス番号のパケットを送信してくださいと通知していることになる。

他にもACKには、
NACK(Negative ACK)受信側が送信側に喪失したパケットを知らせる
SACK(Selective ACK)届いたパケットの範囲を送信側に知らせる
などがあります。
Timerの利用
送信側は、送信したセグメントをAck受信までバッファーに一時格納する。送信の際に送信開始時刻を示すタイマーを設定し、タイムアウトになったらバッファからセグメントを取り出して再送する。
タイムアウトまでの時間(RTT)が短い→不必要な再送を繰り返してしまう。長い→データの再送するまでに無駄に多くの時間がかかってしまう。
受信側から送信側にAckを送る時にAckが紛失してしまった場合に有効
再送の時間をどのように決めるか??
$EstimetedRTT = (1-\alpha)*EstimatedRTT + \alpha*SampleRTT$
$\alpha$=0.125くらいである。上の計算はソケットの送信の度に行われる
$DevRTT = (1-\beta)*DevRTT + B*|SampleRTT – EstimatedRTT|$
$\beta$ = 0.25くらいである。
$TimeOutInterval = EstimatedRTT + 4*DevRTT$
順番通りに届いたのか
セグメントにシーケンス番号をつける
送信側が送信データをオクテット単位(8ビット単位)でカウントし、送信時にヘッダに追加する。
ウィンドウ制御
ACKが返ってくるまで次のデータを送信しないと非効率になってしまうために、ACKを受け取っていなくてもある程度のパケットを連続して送信する必要があります。ただし、この時にあまりに多くのパケットを送りすぎてしまうと、受信側のバッファが溢れてしまう可能性があるのでACKを待たずに連続して送信できるパケットの数を制限する必要があります。この数をウィンドウサイズと言います。
広告ウィンドウ:受信側が自分のバッファの状態に基づき、受信側が送信側に送られる適当なウィンドウサイズのこと(フロー制御で使う)
輻輳ウィンドウ:ネットワークの混み具合を表すウィンドウサイズのこと(輻輳制御で使う)
フロー制御
ウィンドウ制御の重要な役割の一つ。連続して送信するパケットをデータの流れと見た時の流れを制御すること。これは、広告ウィンドウを元に行うもので、バッファの空き容量を超えてパケットが送信されないようにします。大量のパケットが到着して、パケットが破棄されないようにパケット量を調整する制御。
輻輳(ふくそう)制御
ウインドウ制御の重要な役割の一つ。ネットワークの限度を超える大量のパケットを送信してしまった場合もパケットの喪失が起きてしまうので、そのためにネットワークが混雑してしまいます。この時は送りだすパケットの量を減らす制御をします。輻輳制御は、輻輳ウィンドウというパラメータを元に制御を調整します。
UDP
UDPは、チェックを省いているために素早く通信が行われる(情報が無くなる可能性がある)ほとんどエラーチェックが無い。
パケットにエラー
チェックサム
・送信側
セグメントを16ビットの2進数と考えて、計算されたチェックサムの値をUDPのチェックサムフィールドに入れる
・受信側
受信したセグメントのチェックサムの値を計算し、受信したチェックサムフィールドの値を同様か確かめる