トランスポート層プロトコル - TCP、UDP

目次

1. UDPプロトコル(ユーザーデータグラムプロトコル)

プロトコルの機能

メッセージヘッダーの形式

2. TCPプロトコル(伝送制御プロトコル)

プロトコルの機能

メッセージヘッダーの形式

TCP接続確立時のスリーウェイハンドシェイク

接続を切断する TCP の 4 つの波

TCPフロー制御

TCP輻輳制御

3. トランスポート層のポート番号

タイプ III ポート番号

いくつかの既知のポート番号


契約の種類 接続指向ですか? 信頼できるものですか? 伝送効率 オーバーヘッド コミュニケーションの方法
UDP いいえ いいえ 高い 小さい シングルポイント/マルチポイントからシングルポイント/マルチポイントへ
TCP はい はい 低い 大きい ポイントからポイントへ

1. UDPプロトコル(ユーザーデータグラムプロトコル)

プロトコルの機能

  • 接続がありません
  • メッセージ指向
  • ヘッダーのオーバーヘッドが小さい (8 バイト)
  • ベストエフォート型配信、信頼性保証なし、輻輳制御なし
  • 1 対多対 1 対多の通信をサポートする

メッセージヘッダーの形式

2. TCPプロトコル(伝送制御プロトコル)

プロトコルの機能

  • バイト ストリーム向け (アプリケーション層から渡されたデータをバイトとして処理し、それに応じて番号を付ける)
  • 接続指向
  • 各 TCP 接続にはエンドポイントが 2 つだけあります (1 対 1 接続)
  • 確実な配送を保証
  • 全二重通信が可能

メッセージヘッダーの形式

送信元ポートと宛先ポートの範囲は 0 ~ 65535 です。

シーケンス番号 (seq) は、このセグメント内のデータの最初のバイトのシーケンス番号を表し、値は 0 ~ 2^{32}- 1 です。

確認応答番号 (ack) は、相手の次のメッセージセグメントから受信されることが期待される最初のデータバイトのシーケンス番号を示し、値は 0 ~ - 2^{32}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ルーティングプロトコル

おすすめ

転載: blog.csdn.net/hao_13/article/details/133522962