1. IPプロトコルの概要
また、ネットワーク層に属するインターネットプロトコルとして知られているIPプロトコル(インターネットプロトコル)。宛先ホストに送信元ホストからのデータの送信を担当一意の識別子としてIPプロトコルIPアドレス、。
IPプロトコルはコネクション信頼性の低いデータグラム配信プロトコルで、プロトコル自体は、任意のエラーチェックと回復メカニズムを提供していません。
1.1 IPアドレス
インターネットでは、各ホストは、識別マークとしてユニークなIPアドレスを持っています。
(1)カテゴリーのアドレッシング
Aクラス、クラスB、クラスC、クラスD、Eクラス、図中の以下の組成:IPアドレスは、5つのカテゴリーに分けることができます。
以下に示すように、IPアドレスの特長。
(2)特別なIPアドレス
特別な目的のために使用される特殊なIPアドレスは、ネットワークのいずれかを使用してホストに割り当てられていません。
限定ブロードキャストアドレス | ネットワーク番号、ホスト番号の完全なアドレス(255.255.255.255)1、およびインターネット上のホスト。しかし、ルータによるIPアドレスが255.255.255.255のデータパケットを転送を禁止し、このパケットはLANで放送されます。 |
ダイレクトブロードキャストアドレス | 示すフルアドレスホスト番号1、そのLAN上のすべてのホスト、 |
マルチキャストアドレス | マルチキャストアドレス、送信側、受信側の複数に属するクラスDアドレス。宛先アドレスとしてクラスDのIPアドレスは、送信元IPアドレスとして使用することができません。 |
ループバックアドレス | クラスAアドレスは、すべてのアドレスは、プロトコルが動作しているネットワークをテストする127のセグメント・ループバックアドレスです。たとえば、pingを127.1.1.1は、ローカルのTCP / IPプロトコルが正しく動作しているテストすることができます。 |
このネットワークこのホスト | 完全なアドレスは、IPアドレス(0.0.0.0)0であり、これはこのネットワークホストことを示しています。ローカルIPアドレスのあいまいな状況の送信元アドレスとしてアドレスのみ。 |
1.2 LAN、WAN、インターネット
また、ネットワークとして知られているLAN(LANと略称するローカルエリアネットワーク)、コンピュータネットワークは、ローカルエリアをカバーします。
WAN(外部、公衆ネットワークとして知られているWAN略称(ワイドエリアネットワーク)、通信の異なる領域に接続されたコンピュータネットワーク。
数多くのLANを経由してWANの配線で形成されたインターネットは、収束します。
LAN、WAN、インターネット間の相互関係を下記のように。
- 無線ルータは、携帯電話のために、コンピュータがLAN IP(LAN-IP)を割り当てます。ルータのIPアドレスは、オペレータ(ローカルIPアドレスのオペレータ)によって割り当てられ、このアドレスは、WAN(WAN-IP)のIPアドレスに変換されます。WAN IPアドレス(WAN-IP)は、インターネットを入力して、公共のインターネットIPアドレス(グローバル-IP)に変換する必要があります。
- IP通信ネットワークアドレス変換:LAN-IP < - > WAN-IP < - >グローバルIP。
1.3ネットワークアドレス変換
例:
- NAT機能を有するルータLAN内の通信のために、2つのIPアドレス、内部アドレスを有し、外部アドレスを、広域ネットワークと通信するために、オペレータによって割り当てられます。
- NAT機能を持つルータはNAT変換テーブルの内部を維持しています。ルータはLAN IPデータグラムを受信すると、ルータは(例:ポート6666)のデータグラムのためにその内部NATのポートを割り当てます、ローカルエリアネットワークホストのIPアドレス(192.168.0.181:5555)およびWAN IPアドレス(223.166.166.66: 6666)フォームマッピング。よって、広域ネットワークと通信するためにLANホストを可能にします。
- NAT、各LANのホストNATが割り当てる一意のポート番号、および障害ポート番号を回復に接続されたルータ。
2. IPパケット
2.1 IPパケット形式
- バージョン:IPプロトコルのバージョン番号。IPv4のバージョン番号は、IPv6バージョン6で、4です。
- ヘッダ長:IP記録スペース、ユニット「単語」ヘッダが占めていました。IPヘッダの最大長さは15 * 4 = 60Byteであるので、4ビットを占めます。
- サービス(TOS)の種類:異なるIPパケットを区別するために使用。このようなIPパケットとしてより合理的な経路を容易にするために、ルータ、例えば、いくつかの特別な要件低レイテンシ、高スループット又はデータパケットの信頼性を区別します。
- データグラムの長さ:IPパケットの全長は、IPヘッダ長+データ領域には、単位は「バイト」。長さはこれ以上イーサネットデータフレーム(mtu_maxは= 1500Byte)の最大長より一般的に、断片化された送信すべき必要性を超えません。長さはMTU_MIN(46Byte)未満の場合、MTU_MINの必要性は、送信する前に満たされました。
- 同定:同じデータグラムに属し、各IPデータグラムフラグメントのために決定します。各々がIPデータグラム、フィールド値+1を送信するステップと、同じIPデータグラムフラグメントに属するフィールドの値に等しいです。
- 記号:会計3ビット。BIT(0)将来の使用のために予約; BIT(1)データパケットが断片化プロセスが0の場合は無効にすることができます処理し、断片化されたことを示す(データパケット長がmtu_maxはを超えた場合、この時点で、データグラムは廃棄される); BIT (2)0フラグメントはないその逆、全体のデータグラムの最後の断片であることを示しています。
- フラグメントオフセットは:8バイト単位に全IPデータグラムによって運ばれる電流フラグメンテーションオフセットデータを示します。
- 生存時間(TTL):IPデータグラムは、ルータ、フィールドマイナス1の値が処理されるたびに、それは0に低下した場合、データグラムは廃棄されます。これにより、IPデータグラムは常に(これは長いループのルーティングの選択に例えば)ネットワーク上で循環されないことを確実にします。
- 上位層プロトコル:データ伝送プロトコルIPデータグラムの部分を表す(TCP、UDP)を引き渡さなければなりません。
- ヘッダーチェックサム:IPデータグラムヘッダのチェックサムとルータを助けるためには、受信したIPデータグラムヘッダが正しいことを検知します。
- 送信元IPアドレス:送信元ホストのIPアドレス。
- 送信先IPアドレス:宛先ホストのIPアドレス。
- 選択:このフィールドは、一部にはありません。LWIPプロトコルスタックは、唯一のオプションフィールドを認識しますが、その内容を処理しません。
- データ領域:IPデータグラムキャリーへのデータの量。
PS: IPv4パケットのためにここに記録異なるIPv4およびIPv6パケットフォーマット、。
2.2 IPパケットデータ構造の定義
LWIPは、IPパケット定義は、ヘッダ情報マクロ定義を取得しながらip_hdr構造は、IPパケットヘッダを説明定義され、マクロ定義は、IPパケットのヘッダ情報を提供しました。ソースの場所:lwip_2_1_2 / SRC /コア/ IPv4の/ ip4_frag.c
無効ip_hdr構造を定義する際に、コンパイラ本体のアライメント動作、構造体のフィールドの多くは、ビット演算によるものであるため。
1 PACK_STRUCT_BEGIN 2 構造体ip_hdr 。3 { 4 / * バージョン/ヘッダ長* / 5 PACK_STRUCT_FLD_8(u8_t _v_hl); 6 / * サービスの種類* / 7。 PACK_STRUCT_FLD_8(u8_t _tos) 。8 / * データ全長パケット* / 9。 PACK_STRUCT_FIELD(u16_t _len); 10 / * 識別子フィールド* / 11。 _id u16_t PACK_STRUCT_FIELD(); 12である / * フラグとオフセット* / 13である PACK_STRUCT_FIELD(u16_t _offset); 14 の#define IP_RF 0x8000U / *予約フラグ* / 15 の#define IP_DF 0x4000U / *ドフラグメントではないフラグ* / 16 の#define IP_MF 0x2000U / *詳細フラグ・フラグ* / 17 の#define IP_OFFMASK 0x1fffU / *セグメント* /用マスク 18 / * 生存時間* / 。19 PACK_STRUCT_FLD_8(u8_t _ttl); 20である / * 上位プロトコル* / 21である PACK_STRUCT_FLD_8(u8_t _proto); 22である / * チェックサム* / 23である PACK_STRUCT_FIELD(u16_t _chksum); 24 / * 送信元IPアドレスと宛先IPアドレス* / 25 PACK_STRUCT_FLD_S(SRC ip4_addr_p_t); 26である (DEST ip4_addr_p_t)PACK_STRUCT_FLD_S; 27 PACK_STRUCT_STRUCT}; 28 PACK_STRUCT_END 29 30 31である / * 各マクロのIPデータグラムヘッダフィールド情報を取得する* / 32 33である // 取得プロトコルバージョン 34である の#define IPH_V(HDR)((HDR) - > _ V_HL >> 4) 35 // ヘッダ長(ワード)を得る 36 の#define IPH_HL(HDR)((HDR) - > _ V_HL&0x0Fの) 37 // ゲットバイトヘッダの長さ 38である の#define。IPH_HL_BYTES(HDR)((u8_t)(IPH_HL(HDR)4 * )) 39は // サービスタイプを取得する 40 の#define IPH_TOS(HDR)((HDR) - > _ TOS) 41がされて // 取得したデータパケットの長さ 42がある の#defineIPH_LEN(HDR) - ((HDR)> _ LEN) 43は、 // データのパケット識別子取得 44であるの に#define( - > _ ID(HDR))IPH_ID(HDR) 45 // 取得フラグメンテーションフラグが+オフセット 46がある の#define IPH_OFFSET (HDR)((HDR) - > _オフセット) 47 // オフセットを取得しますサイズ(バイト) 48 の#define IPH_OFFSET_BYTES(HDR)\ 49((u16_t)((lwip_ntohs(IPH_OFFSET(HDR))&IP_OFFMASK)* 8U )) 50 // 生存時間取得し 51である の#define IPH_TTL(HDR)((HDR) - > _ TTL) 52れる //を上位層プロトコルを受ける 53である の#define IPH_PROTO(HDR)((HDR) - > _プロト) 54である //はチェックを取得そして、 55 #define IPH_CHKSUM(HDR) - ((HDR)> _ CHKSUM) 56 57 58 / * マクロは、IPデータグラムヘッダを埋めるために使用される* / 59 60 // 設定ヘッダ長のバージョン番号 61 の#define IPH_VHL_SET(HDR、V、HL )\ 62(HDR) - > _ V_HL =(u8_t)((((V)<< 4)| (HL))) 63 // サービスタイプを設定する 64 の#define IPH_TOS_SET(HDR、TOS)(HDR) - > _ TOS =(TOS) 65 // データグラムの全長設定 66 の#define IPH_LEN_SET(LEN HDR)(HDR)を- > _ = LEN(LEN) 67 // 設定インジケータ 68 の#define IPH_ID_SET(HDR、ID)(HDR) - > = _id(ID) 69 // 設定されたオフセットフラグメンテーションフラグ 70 の#define IPH_OFFSET_SET(HDR、OFF)(HDR) - > _ =オフセット(OFF) 71である //は生存時間を設定する 72 の#define IPH_TTL_SET(HDR、TTL)(HDR) - > _ TTL =(u8_t)(TTL) 73である //は上位プロトコルセット 74 の#define > _プロト=(u8_t)(プロト) - IPH_PROTO_SET(HDR、プロト)(HDR) 75 // 設定チェックサム 76 の#define IPH_CHKSUM_SET(HDR、CHKSUMを)(HDR) - > _ CHKSUM =(CHKSUM)
3. IPデータグラムのフラグメント
理由(1)処理された断片
IPデータグラムがリンク層に送信され、リンク層フレームにカプセル化リンクレイヤIPデータグラムは、ハードウェアカードは、ターゲットホストにリンク層フレームを送信します。リンク層フレーム中で実施することができるデータの最大量は、最大伝送単位(MTU)と呼ばれる、異なるハードウェアカードMTUは異なっていてもよいです。IPデータグラムの長さがMTUを超えた場合、プロセス必要が送信前にフラグメント化します。
フラグメント処理の原理(2)
フラグメント処理IPデータグラムは、データ領域には、いくつかのより小さいIPデータグラムにIPデータグラムを切断すること、および個々のカプセル化リンク層フレームを送信します。
- 各スライスIPヘッダは、「フラグ」に加えて、これらの2つのフィールド「フラグメントオフセット」、残りは同一です。
- スライスデータ領域の長さが8の倍数でなければならないので、ユニット、フィールドは8バイトである「フラグメントオフセット」。
- BIT最終フラグメントフラグ(2)フラグメントが最後のフラグメントであることを示し、0です。
- ターゲットホストのIP層、リロードに到達したすべてのフラグメントが完了した後、IPパケットを形成します。
(3)フラグメント処理例
4000Byteホストは、IPデータグラム、リンク層MTU = 1500Byte、元のIPデータグラムの断片化プロセスの必要性を送信します。
元のIPデータグラム(4000Byte)= IPヘッダ(20Byte)+データ領域(3980Byte)、データ領域が切断され、各スライスIP「フラグ」ヘッダを埋めるフィールドを「フラグメントオフセット」。
最初のフラグメント: "フラグ" フィールドのビット(2)= 1、0のフラグメントオフセット、データスライスパケット長(1500Byte)= IPヘッダ(20Byte)+データ領域(1480Byte)。
第2の断片: "フラグ" フィールドのビット(2)= 1、フラグメントオフセット185(8分の1480)、スライスデータパケット長(1500Byte)= IPヘッダ(20Byte)+データ領域(1480Byte) ;
第3のサブシート: "フラグ" フィールドのビット(2)= 0は、断片は、スライスデータパケット長(1040Byte)=(20Byte)+ IPヘッダデータ領域(1020Byte)370(185 + 185)をオフセット。
(4)フラグメント処理ソース
フラグメント処理源は、IPデータグラムの「lwip_2_1_2 / SRC /コア/のIPv4 / ip4_frag.c」、呼び出し先ホスト「ip4_frag()」関数を配置し、断片化工程に送られます。
4. IPデータグラムを送受信します
IPデータグラムの送信及び受信は、ソースが配置されている:lwip_2_1_2 / SRC /コア/のIPv4 / ip4.c
送信された4.1 IPデータグラム
- ときに、トランスポート層の必要データを送信するために、IPネットワーク層プロトコルに送信すべきデータ転送の必要性、IP層がIPデータグラムを送信する「ip4_output()」関数を呼び出します。
- 「Ip4_output()」関数呼び出し「ip4_route_src()」関数は、条件に一致する宛先IPアドレスのリストに応じて適切なNICカードを選択:宛先IPアドレスとネットワークカードアドレスにサブネット、または宛先IPアドレスは、ゲートウェイカードに等しいですアドレス。その後、IPデータグラムを送信する機能「()ip4_output_if」と呼びます。
- IPデータグラムヘッダ、IPヘッダ情報を入力し、IPデータグラムの分類の開始アドレスへのペイロード・ポインタを調整する「Ip4_output_if_src()」関数。宛先IPアドレスは、ホストの送信元IPアドレスに等しい場合、入力する機能ループバック「netif_loop_output()」と呼ばれ、IPデータグラム長がMTUを超えた場合、「ip4_frag()」関数断片化伝送と呼ばれ、そうでない場合は直接呼び出す「では、netif - > IPデータグラムインタフェース出力は、」送信用にARPプロトコルに渡されます。
4.2 IPデータグラムを受信します
- リンク層は、IPデータグラムを受け取り、その後、「ip4_input()」関数に渡さ「ethernet_input()」関数によって処理されます。
- 次いで、「Ip4_input()」プロトコルバージョンIPv4のIPデータグラムヘッダか関数を最初にチェックし、宛先IPアドレスに基づいてローカル・ネットワーク・アダプタ・カード・リストに有効な標的を見つけます。宛先IPアドレスはループバックアドレスの宛先IPアドレスかどうかを決定する「ip4_addr_isloopback()」関数を介して、ホストアドレスと等しくない場合。先カードに一致する場合、次にスライスへの呼び出し「ip4_reass()」機能のリロード、および指定されたトランスポート層プロトコルにデータを渡します。あなたはブロードキャストパケットのために、対象カードが見つからない場合は、直接データが非ブロードキャストパケットについて報告削除機能「ip4_forward()」を介して転送することができます。
5.参考文献
1.野火「LWIPアプリケーション開発の実用的なガイド。」