ネットワークの基本(4):プロトコル形式

パケットのカプセル化

  トランスポート層とその下のメカニズムはカーネルによって提供され、アプリケーション層はユーザープロセスによって提供され、アプリケーションプログラムは通信データの意味を解釈し、トランスポート層以下は通信の詳細を処理して送信します。コンピュータから特定のパスを経由して別のコンピュータへのデータ。アプリケーション層のデータがプロトコルを介してネットワークスタックに送信される場合、以下に示すように、各プロトコルにパッケージカプセル化と呼ばれるデータのヘッダー(ヘッダー)を追加する必要があります。
          ここに画像の説明を挿入
  データパケットのプロトコル層が異なれば、トランスポート層のタイトルも異なります。はセグメント(セグメント)と呼ばれネットワーク層はデータパケット(データグラム)、既知のリンク層フレーム(フレーム)と呼ばれます。データがフレームにカプセル化された後、伝送媒体に送信されます。宛先ホストに到達した後、プロトコルの各層の対応するヘッダーが削除され、最後にアプリケーション層のデータがアプリケーションプログラムに渡されます。処理。


イーサネットフレームフォーマット

  イーサネットのフレームフォーマットは次のとおりです
          ここに画像の説明を挿入
  。送信元アドレスと宛先アドレスはネットワークカードのハードウェアアドレスMACアドレスとも呼ばれます)を参照し、長さは48ビットで、ネットワークカードが工場出荷時に固化されます。シェルでifconfigコマンドを使用して表示できます。「HWaddr00:15:F2:14:9E:3F」の部分はハードウェアアドレスです。プロトコルフィールドには、IP、ARP、およびRARPに対応する3つの値があります。フレームの終わりはCRCチェックコードです。
  イーサネットフレームのデータ長は、最小46バイトと最大1500バイトを指定します。ARPおよびRARPデータパケットの長さは46バイトには不十分であり、パディングビットを後ろに追加する必要があります。最大値1500はイーサネットの最大伝送ユニットMTUと呼ばれます。ネットワークタイプが異なれば、MTUも異なります。データパケットがイーサネットからダイヤルアップリンクにルーティングされる場合、データパケットの長さはダイヤルアップリンクのMTU。パケットはフラグメント化されますフラグメンテーション)。ifconfigコマンドの出力には「MTU:1500」もあります。MTUの概念は、フレームヘッダーの長さを含まず、データフレーム内のペイロードの最大長を指すことに注意してください。

ARPデータグラム形式

  ネットワーク通信中、送信元ホストのアプリケーションプログラムは宛先ホストのIPアドレスとポート番号を知っていますが、宛先ホストのハードウェアアドレスを知りません。データパケットは最初にネットワークカードによって受信され、次に上位層プロトコル。受信データが次の場合パケットのハードウェアアドレスがローカルマシンのハードウェアアドレスと一致しない場合、直接破棄されます。したがって、通信の前に宛先ホストのハードウェアアドレスを取得する必要があります。ARPプロトコルがこの役割を果たします。送信元ホストは、「IPアドレスが192.168.0.1であるホストのハードウェアアドレスは何ですか」と尋ねるARP要求を送信し、この要求をローカルネットワークセグメントにブロードキャストします(イーサネットフレームヘッダーのハードウェアアドレスはFFで埋められます。 FF:FF:FF:FF:FFはブロードキャストを意味します)、宛先ホストはブロードキャストARP要求を受信し、IPアドレスがマシンと一致することを検出し、ARP応答パケットを送信元ホストに送信し、自身のハードウェアアドレスを次のように入力します。応答パケット。
  各ホストはARPキャッシュテーブルを維持します。これはarp-aコマンドで表示できます。キャッシュテーブルのエントリには有効期限(通常は20分)があります。エントリが20分以内に再度使用されない場合、エントリは無効になり、宛先のハードウェアアドレスを取得するために次回ARP要求が送信されます。ホスト。考えてみてください。テーブルエントリに常に有効ではなく有効期限を設定する必要があるのはなぜですか。
  ARPデータグラムの形式は次のとおりです。
        ここに画像の説明を挿入
  送信元MACアドレスと宛先MACアドレスがイーサネットヘッダーとARP要求に一度表示されます。これは、リンク層がイーサネットの場合は冗長ですが、リンク層がイーサネットの場合は冗長です。他のタイプネットワークが必要な場合があります。ハードウェアタイプはリンク層ネットワークタイプ、1はイーサネット、プロトコルタイプは変換されるアドレスのタイプ、0x0800はIPアドレス、次の2つのアドレス長はイーサネットの場合は6と4(バイト)です。それぞれアドレスとIPアドレス。opフィールド1はARP要求を示し、opフィールド2はARP応答を示します。
特定の例を見てください。

要求フレームは次のとおりです(わかりやすくするために、各行の先頭にバイト数が追加され、各行は16バイトです):
イーサネットヘッダー(14バイト)0000:ff ff ff ff ff ff
00 05 5d 61 58 a8 08 06 ARPフレーム(28バイト)0000:00 01 0010:08 00 06 04 00 01
00 05 5d 61 58 a8 c0 a8 00 37 0020:00 00 00 00 00 00 c0 a8 00 02
充填ビット(18バイト)0020:00 77 31 d2 50 10 0030:fd 78 41 d3 00 00 00 00 00 00
00 00イーサネットヘッダー:宛先ホストはブロードキャストアドレスを使用し、送信元ホストのMACアドレスは00:05:5d:61:58:a8、上位レイヤプロトコルタイプ0x0806はARPを意味します。
ARPフレーム:ハードウェアタイプ0x0001はイーサネットを意味し、プロトコルタイプ0x0800はIPプロトコルを意味し、ハードウェアアドレス(MACアドレス)の長さは6、プロトコルアドレス(IPアドレス)の長さは4、opは0x0001は宛先ホストのMACアドレスを要求することを意味します。ホストMACアドレスは00:05:5d:61:58:a8、送信元ホストのIPアドレスはc0
a8 00 37(192.168.0.55)、宛先ホストのMACアドレスはすべて0で入力され、宛先ホストのIPアドレスはc0a8 00
02(192.168 .0.2)です。
イーサネットでは最小データ長が46バイト、ARPフレーム長が28バイトしかないため、18バイトのパディングビットがあります。パディングビットの内容は定義されておらず、特定の実装に関連しています。応答フレームは次のとおりです。
イーサネットヘッダー0000:00 05 5d 61 58 a8 00 05 5d a1 b8 40 08 06 ARPフレーム0000:00 01
0010:08 00 06 04 00 02 00 05 5d a1 b8 40 c0 a8 00 02 0020:00 05 5d
61 58 a8 c0 a8 00 37充填ビット0020:00 77 31 d2 50 10 0030:fd 78 41 d3 00
00 00 00 00 00 00 00
イーサネットヘッダー:宛先ホストのMACアドレスは00:05:5d:61:58:a8、送信元ホストのMACアドレスは00:05:5d:a1:b8:40、および上位レイヤプロトコルタイプ0x0806はARPを表します。
ARPフレーム:ハードウェアタイプ0x0001はイーサネット、プロトコルタイプ0x0800はIPプロトコル、ハードウェアアドレス(MACアドレス)の長さは6、プロトコルアドレス(IPアドレス)の長さは4、opは0x0002は応答、送信元ホストのMACアドレスは00:05を意味します:5d:a1:b8:40、送信元ホストのIPアドレスはc0
a8 00 02(192.168.0.2)、宛先ホストのMACアドレスは00:05:5d:61:58:a8、IP宛先ホストのアドレスはc0a8 00
37(192.168.0.55)です。

IPセグメント形式

      ここに画像の説明を挿入
; IPデータグラムのヘッダー長とデータ長は可変ですが、常に4バイトの整数倍ですIPv4の場合、4ビットバージョンフィールドは4です。4ビットヘッダー長の値は4バイト**の単位であり、最小値は5 **です。これは、最小ヘッダー長が4x5 =であることを意味します。 20バイト、つまりいいえ任意のオプションを指定したIPヘッダーの場合、4ビットで表すことができる最大値は15です。これは、ヘッダーの最大長が60バイトであることを意味します8ビットTOSフィールドには、IPデータグラムの優先度を指定する3ビット(現在は廃止)と、オプションのサービスタイプ(最小遅延、最大スループット、最大信頼性、最小コスト)を示す4ビットがあり、別のビットは常に0。全長は、データグラム全体(IPヘッダーとIP層ペイロードを含む)のバイト数です。IPデータグラムが送信されるたびに、16ビット識別子が1ずつ増加します。これは、データグラムの断片化と再構成に使用できます。3ビットフラグと13ビットチップオフセットはフラグメンテーションに使用されます。TTL(Time to live)は、次のように使用されます。送信元ホストは、64などのデータパケットの存続時間を設定し、ルーターが通過するたびに値が1ずつ減少します。0に減少すると、ルートが長すぎてまだ見つからないこと。ネットワークが宛先ホストに到達すると、パケットは破棄されるため、存続時間の単位は秒ではなくホップです。プロトコルフィールドは、上位層プロトコルがTCP、UDP、ICMP、またはIGMPのいずれであるかを示します。次に、チェックサムがあり、IPヘッダーのみがチェックされ、上位レベルのプロトコルがデータの検証を担当します。IPv4IPアドレスの長さは32ビットです。

UDPデータグラム形式

      ここに画像の説明を挿入
以下は、UDPベースのTFTPプロトコルフレームを分析します。
イーサネットヘッダー
0000:00 05 5d 67 d0 b1 00 05 5d 61 58 a8 08 00
IPヘッダー
0000:45 00
0010:00 53 93 25 00 00 80 11 25 ec c0 a8 00 37 c0 a8
0020:00 01
UDPヘッダー
0020: 05 d4 00 45 00 3f ac 40
TFTPプロトコル
0020:00
01'c '' : '' '' q ' 0030:' w''e''r''q ''。 '' q''w''e '00'n''e''t''a''s''c''i'
0040: 'i'00'b''l''k''s''i''z''e' 00 '5''1''2'00't''i'
0050: 'm''e''o''u''t'00' 1''0'00't ''s' 'i '' z '' e'00 '0'
0060:00イーサネットヘッダー:送信元MACアドレスは00:05:5d:61:58:a8、宛先MACアドレスは00:05:5d:67:d0:b1 、上位層プロトコルタイプ0x0800はIPを表します。
  IPヘッダー:各バイト0x45には、4ビットのバージョン番号と4ビットのヘッダー長が含まれます。バージョン番号は4、つまりIPv4で、ヘッダー長は5です。これは、IPヘッダーにオプションフィールドがないことを示します。 。サービスタイプは0であり、サービスは使用されません。16ビットの全長フィールド(IPヘッダーとIP層ペイロードの長さを含む)は0x0053、つまり83バイトです。イーサネットヘッダーの14バイトを追加すると、フレーム全体の長さが97バイトになります。IPパケット識別子は0x9325で、フラグフィールドとフラグメントオフセットフィールドは0x0000に設定されます。つまり、DF = 0はフラグメンテーションを許可し、MF = 0このデータグラムにはフラグメントとフラグメンテーションオフセットがありません。TTLは0x80、つまり128です。上位層プロトコル0x11は、UDPプロトコルを表します。IPヘッダーのチェックサムは0x25ec、送信元ホストのIPはc0 a8 00 37(192.168.0.55)、宛先ホストのIPはc0 a8 00 01(192.168.0.1)です。
UDPヘッダー:送信元ポート番号0x05d4(1492)はクライアントのポート番号であり、宛先ポート番号0x0045(69)はTFTPサービスの既知のポート番号です。UDPパケットの長さは0x003fで、UDPヘッダーの長さとUDPレイヤーのペイロードを含めて63バイトです。UDPヘッダーとUDPレイヤーペイロードのチェックサムは0xac40です。
TFTPはテキストベースのプロトコルです。各フィールドはバイト0で区切られます。最初の
0001は、ファイルの読み取りが要求されていることを示します。次のフィールドは次のとおりです。c:\ qwerq.qwe
netascii
blksize 512
timeout 10
tsize 0
  一般的なネットワーク通信はTFTPプロトコルに似ています。通信の2つのパーティは、クライアントとサーバーです。クライアントはアクティブに要求を開始し(上記の例はクライアントによって開始された要求フレームです)、サーバーはパッシブに待機、受信、リクエストに応答します。クライアントのIPアドレスとポート番号はホスト上のTFTPクライアントプロセスを一意に識別し、サーバーのIPアドレスとポート番号はホスト上のTFTPサービスプロセスを一意に識別します。クライアントは要求を開始するパーティであるため、サーバーのIPアドレスとTFTPサービスプロセスのポート番号。したがって、一部の一般的なネットワークプロトコルには、デフォルトのサーバーポートがあります。たとえば、HTTPサービスのデフォルトはTCPプロトコルポート80、FTPサービスのデフォルトはTCPプロトコルポート21、TFTPサービスなどです。デフォルトはUDPプロトコルです。ポート69(上記の例を参照)。クライアントプログラムを使用する場合は、サーバーのホスト名またはIPアドレスを指定する必要があります。ポート番号を明示的に指定しない場合は、デフォルトのポートが使用されます。方法については、ftp、tftpなどのプログラムのマニュアルページを参照してください。ポート番号を指定します。/ etc / servicesは、Internet Assigned Numbers Authority(IANA)によって規制されているすべての既知のサービスポートと対応するトランスポート層プロトコルを一覧表示します。これらのサービスの一部はTCPまたはUDPのいずれかを使用できます。明確にするために、IANAはそのようなサービスが使用することを規定しています。同じTCPまたはUDPのデフォルトのポート番号ですが、他のTCPおよびUDPの同じポート番号は異なるサービスに対応しています。
  多くのサービスには既知のポート番号がありますが、クライアントプログラムのポート番号は既知である必要はありません。多くの場合、システムはクライアントプログラムが実行されるたびに空きポート番号を自動的に割り当て、次のときに解放します。エフェメラルと呼ばれるポート番号、なぜだと思いますか?
  前述のように、UDPプロトコルはコネクション型ではなく、送信の信頼性を保証しません。たとえば
  、送信側のUDPプロトコル層は、アプリケーション層からのデータをセグメントにカプセル化してIPプロトコル層に配信するだけです。タスクが完了しても、ネットワーク障害が発生した場合セグメントを相手に送信することはできず、UDPプロトコル層はエラー情報をアプリケーション層に返しません。
  受信側のUDPプロトコル層は、ポート番号に従って受信データを対応するアプリケーションに配信するだけで、タスクを完了します。送信側が複数のデータパケットを送信し、ネットワーク上の異なるルートを通過する場合、順序は正しくありません。ただし、UDPプロトコル層は、送信された順序でアプリケーション層に配信されることを保証しません。
  通常、受信側のUDPプロトコル層は、受信したデータを固定サイズのバッファーに入れて、アプリケーションの抽出と処理を待機します。アプリケーションの抽出と処理が遅く、送信者がデータをすばやく送信すると、データパケットが失われます。 UDPプロトコル層はこのエラーを報告しません。
  したがって、UDPプロトコルを使用するアプリケーションは、これらの考えられる問題を考慮し、応答の待機、時間の経過に伴う再送信、データパケットの番号付け、フロー制御などの適切なソリューションを実装する必要があります。一般に、UDPプロトコルを使用するアプリケーションプログラムは、実装が比較的簡単で、大量のデータを送信する代わりに、高い信頼性を必要としない一部のメッセージのみを送信します。たとえば、UDPベースのTFTPプロトコルは通常、小さなファイルの転送にのみ使用されます(したがって、トリビアルのftpと呼ばれます)が、TCPベースのFTPプロトコルはさまざまなファイルの送信に適しています。TCPプロトコルは、伝送の信頼性の問題を解決するために、アプリケーションプログラムの代わりにコネクション型サービスをどのように使用しますか。

おすすめ

転載: blog.csdn.net/qq_40329851/article/details/114810447