目次
契約の種類 | 接続指向ですか? | 信頼できるものですか? | 伝送効率 | オーバーヘッド | コミュニケーションの方法 |
UDP | いいえ | いいえ | 高い | 小さい | シングルポイント/マルチポイントからシングルポイント/マルチポイントへ |
TCP | はい | はい | 低い | 大きい | ポイントからポイントへ |
1. UDPプロトコル(ユーザーデータグラムプロトコル)
プロトコルの機能
- 接続がありません
- メッセージ指向
- ヘッダーのオーバーヘッドが小さい (8 バイト)
- ベストエフォート型配信、信頼性保証なし、輻輳制御なし
- 1 対多対 1 対多の通信をサポートする
メッセージヘッダーの形式
2. TCPプロトコル(伝送制御プロトコル)
プロトコルの機能
- バイト ストリーム向け (アプリケーション層から渡されたデータをバイトとして処理し、それに応じて番号を付ける)
- 接続指向
- 各 TCP 接続にはエンドポイントが 2 つだけあります (1 対 1 接続)
- 確実な配送を保証
- 全二重通信が可能
メッセージヘッダーの形式
送信元ポートと宛先ポートの範囲は 0 ~ 65535 です。
シーケンス番号 (seq) は、このセグメント内のデータの最初のバイトのシーケンス番号を表し、値は 0 ~ - 1 です。
確認応答番号 (ack) は、相手の次のメッセージセグメントから受信されることが期待される最初のデータバイトのシーケンス番号を示し、値は 0 ~ - 1 です。
データオフセットは、データセグメントの開始位置を容易に識別できるTCPヘッダーの長さを表します。最小長は5(0101)、単位はバイトです。ヘッダーの最小長は20バイトです。
緊急ポインタURG ビットが 1 の場合、このフィールドは有効であり、緊急に送信する必要があるデータを示します。
パディング フィールドは可変長で、TCP メッセージのヘッダー長が 4 バイトの整数倍であることを保証するために使用されます。
分野 | プレースホルダー | 説明する |
コントロールフィールド | URG (1ビット) | 緊急ビット; 1 の場合、緊急に送信するデータがあることを意味します |
ACK(1ビット) | 確認ビット。ここでは確認番号 (小文字の ack) と区別するために大文字です。1 の場合、確認フィールドは有効であり、肯定的な応答を示します。 | |
PSH(1bit) | プッシュ ビット。1 に設定すると、TCP パケットがすぐに送信されます。 | |
RST(1bit) | リセット ビット。1 に設定すると、TCP 接続に重大なエラーがあり、接続を再確立する必要があることを示します。接続を拒否するためにも使用できます。 | |
SYN(1bit) | 同期ビット。1 に設定すると、TCP 接続が確立されていることを示します。 | |
FIN(1bit) | 終了ビット。1 に設定すると、TCP 接続が解放されていることを示します。 | |
窓 | 16ビット | TCPフロー制御のアイドルウィンドウ値を受信します。 |
TCP接続確立時のスリーウェイハンドシェイク
スリーウェイ ハンドシェイクの役割は、誤った接続を回避することです
ホスト A はサーバ B に SYN を送信して TCP コネクションの確立を要求しますが、データがなくても 1 シーケンスを消費します。このとき、ホスト A はターゲット サーバーから最初の応答を受信するまで SYN-SENT 状態になります。
サーバー B は、TCP 接続要求を受信する前は LISTEN のリスニング状態にあります。
サーバーは、ホスト A に SYN で応答し、ホスト A にも接続を確立するよう要求していることを示します。ACK=1 は、ホスト A の接続要求に同意したことを示します。サーバー B は、seq、seq = y、ack = も消費します。 x + 1 (確認を示す) ホストから送信されたばかりのデータ内容を受信し、ホスト A が次回サーバー B にメッセージを送信するときのシーケンスが x + 1 であるという期待を示します。このとき、サーバBはホストAからの応答を待つ必要があり、サーバBもSYN-SENT状態に遷移します。
ホスト A はサーバー B からの応答を受信し、サーバー B に応答します。ACK=1 は、サーバー B の TCP 確立要求を確認し、サービス B の期待に応答することを示します。データがなくても、seq = x を送信します。 + 1、同時に、ack = y + 1 は、サーバー B によって送信されたコンテンツの確認でもあります。また、サービス タイプが次にメッセージを送信するときのシーケンスが y + 1 であるという期待も高まります。同時にステータスが ESTABLISHED に設定され、接続が確立されたことを示します。
サーバー B はホスト A からの応答を受信し、それが正しいことを確認した後、ステータスを ESTABLISHED に設定します。これは、TCP 接続が正常に確立されたことを示します。
この時点では、ホスト A とサーバー B は TCP 接続を確立しており、両者は正常にデータを送信できます。
州 | 説明する |
同期送信されました | SYN リクエストが送信され、TCP 接続を確立するための最初のステップが要求されます。 |
聞く | SYNメッセージのステータスを監視する |
SYN-RCVD | SYNリクエストメッセージ受信後のステータス |
設立 | TCP 接続が正常に確立されたステータス |
接続を切断する TCP の 4 つの波
ホスト A が FIN = 1 (切断) フラグを送信すると、FIN-WAIT-1 状態に入り、相手がシャットダウンを確認するのを待ちます。ホストが相手からACK=1(確認)フラグを受信すると、ホストAはFIN-WAIT-2状態に移行します。このとき、ホスト A は相手とのコネクションを切断しましたが、TCP コネクションを完全には切断しておらず、相手が切断を確認する FIN フラグを送信するのを待っています。
ホスト A は相手の FIN フラグを受信し、確認の ACK フラグを送信して初めて TIME-WAIT 状態に入り、このときホストは実際に TCP コネクションを閉じます。
州 | 説明する |
フィンウェイト-1 | 最初の FIN リクエストを送信し、相手からの確認を待ちます |
フィンウェイト-2 | 相手のFINリクエストを待っています |
クローズウェイト | 自身のプロセスが切断コマンドを発行するまで待ちます。 |
最終確認応答 | 相手の最終確認を待ちます |
時間待ち | 相手が確認を受信できるまで十分な時間を待ちます |
閉まっている | 無効 |
TCPフロー制御
フロー制御は、2 つのエンド間の通信のためのものです。考慮されるのは、送信側と受信側の間のデータ転送速度の差です。
TCP フロー制御は、可変サイズのスライディング ウィンドウ メカニズムを通じて実装されます。つまり、データ受信側が時間内にデータを受信できるように、データ送信側の伝送速度が速すぎてはなりません。
データ転送ウィンドウの勝利は、接続の確立時に双方によって合意されます。ただし、通信プロセス中、データ受信側は、自身のリソース状況に応じていつでも相手の送信ウィンドウ サイズを動的に調整できます。(上記のネゴシエーション後、ウィンドウ サイズは 3 になります)
受信側は、このウィンドウ値を TCP メッセージのヘッダーのウィンドウ フィールドに配置し、送信側に送信します。
通常、受信側はデータ受信直後にACKメッセージを送信してデータの受信を確認し、このときのウィンドウサイズを送信側に通知します。受信側のバッファがいっぱいになると、ウィンドウ サイズが 0 に設定され、送信側はデータの送信を停止します。受信側はデータの処理を完了すると、ウィンドウ サイズを 0 より大きい値に設定し、ACK メッセージを送信して送信側に通知し、送信側がデータの送信を続行できるようにします。
TCP輻輳制御
輻輳制御とは、ネットワーク全体の通信を対象とし、ネットワーク内の各ルーターや回線のリソース使用率を考慮し、過剰なデータトラフィックによるネットワークの輻輳を回避します。
4 つの一般的な輻輳制御方法:
- スロースタート
- 渋滞回避
- 高速再送信
- 迅速な回復
輻輳ウィンドウ (cwnd) : 送信者によって維持される状態変数であり、そのサイズはネットワークの輻輳の程度に応じて動的に変化します。
スロー スタートしきい値 (ssthresh) : 輻輳ウィンドウ cwnd が大きくなりすぎてネットワークの輻輳が発生するのを防ぐために設定されたしきい値。
cwnd < ssthresh | スロースタートアルゴリズムを実行する |
cwnd = ssthresh | スロースタートアルゴリズムまたは輻輳回避アルゴリズムを使用できます |
cwnd > ssthresh | 輻輳回避アルゴリズムを使用する |
スロー スタート: 各送信ラウンドの後、cwnd の値は2 倍になり、cwnd が小さいものから大きいものへと増加します。
輻輳回避: 各送信ラウンドの後、cwnd の値は1 ずつ増加し、cwnd は小さい値から大きい値までゆっくりと増加します。
高速再送信: 受信者は、順序がずれたセグメントを受信した後、ただちに重複した確認応答 ACK を送信します。送信者が重複した確認応答を 3 回続けて受信した場合、相手がまだ受信していないセグメントをすぐに再送信します。したがって、未確認のメッセージは、タイムアウトを待つ代わりに、できるだけ早く再送信できます。
高速回復:送信側が 3 回連続して再送確認 ACK を受信すると、乗算削減アルゴリズムを実行し、しきい値を半分(現在の cwnd 値の半分) にし、 cwnd 値を半分のしきい値に設定し、輻輳回避アルゴリズムを実行します。 ;
乗算的削減: タイムアウトが発生すると (おそらく輻輳中)、ssthresh が半分になり (現在の cwnd 値の半分)、スロー スタート アルゴリズムが同時に実行されます。
追加的増加: 輻輳回避アルゴリズムを実行して cwnd を増加します。
上の図に示すように、スロー スタートの初期しきい値は 16 で、cwnd は 1 から始まります。送信者が ACK 確認メッセージを受信するたびに、cwnd は増加します (しきい値に達する前に増加するために、スロー スタート アルゴリズムが使用されます)。
[① ~ ②] しきい値に達すると、輻輳回避アルゴリズムが使用され、cwnd がゆっくりと増加します。
[② ~ ③] cwnd = 24 のときにタイムアウトが発生した場合、しきい値は半分、つまり ssthresh = 12 になります。その後、次回 ACK 確認メッセージを受信したときに、cwnd は 1 から始まり、スロー スタート アルゴリズムを使用して増加します。
[③ ~ ④] cwnd = 12 の場合、しきい値に達すると、輻輳回避アルゴリズムが使用されてゆっくりと増加します。
[④ ~ ⑤] ④が④に達し、cwnd = 16 になり、送信者が重複確認を 3 回連続で受信すると、しきい値は現在の cwnd の半分、つまり ssthresh = 8 に減らされ、cwnd はしきい値と一致します。価値;
[⑤ ~] cwnd = ssthresh なので、輻輳回避アルゴリズムの使用を開始して増加します。
3. トランスポート層のポート番号
タイプ III ポート番号
- ウェルノウンポート 0 ~ 1023
- 登録ポート 1024 ~ 49151
- クライアントポート番号 49152 ~ 65535
いくつかの既知のポート番号
ポート番号 | サービスの種類 |
TCP20 | ファイル転送プロトコル (データ) |
TCP21 | ファイル転送プロトコル(制御) |
TCP23 | Telnet 端末エミュレーション プロトコル |
TCP25 | SMTP簡易メールプロトコル |
TCP80 | ハイパーテキスト転送プロトコル (HTTP) |
TCP110 | POP3サーバー(メールボックス受信サーバー) |
TCP443 | ハイパーテキスト転送プロトコル セキュア (HTTPS) |
ポート番号 | サービスの種類 |
UDP53 | ドメインネームサーバー (DNS) |
UDP67 | DHCP(サーバー) |
UDP68 | DHCP(クライアント) |
UDP69 | シンプル ハイパーテキスト転送プロトコル (TFTP) |
UDP161 | SNMP(ポーリング) |
UDP162 | SNMP(トラップ) |
UDP520 | RIPルーティングプロトコル |