Upgrade to Pro — share decks privately, control downloads, hide ads and more …

第6章ICMP 第7章Ping

第6章ICMP 第7章Ping

詳解TCP/IP Vol.1プロトコル

kawakawaryuryu

March 28, 2017
Tweet

More Decks by kawakawaryuryu

Other Decks in Technology

Transcript

  1. ICMP (Internet Control Message Protocol) l エラーメッセージやその他の状態をやりとりするためのプロトコル ◦ 例: ping,

    traceroute l IP層の一部とみなされる l IP層、あるいはそれ以上の層(TCP, UDP)で利用される l RFC792に公式仕様が記載 ϩʔϧɾϝοηʔδɾϓϩτίϧ ø ø ý õ çø çΠϯτޱ༦ɺ Ϋγϣϯ Đ Ċ Ĕ ė ͸ɺ஫ҙ͢΂͖ Τϥʔ ɾ ϝο ηʔ δ΍ͦͷଞ ͷঢ়ଶ Λ΍ΓऔΓ͢ΔͨΊͷ΋ͷͰɺ ͠͹ Đė ૚ͷҰ෦ͱΈͳ͞ΕΔɻ Đ Ċ Ĕ ė ϝοηʔδ͸௨ৗɺ Đė ૚͋Δ͍͸ͦΕҎ্ͷ૚ͷϓϩ ϊ Ϩ ïěĊėɺĜċėð ʹΑͬͯར༻͞ΕΔɻ͍͔ͭ͘ͷ ĐĊ Ĕ ė ϝοηʔδ͸ɺϢʔβʔɾ ϓ ϩη ૹ͞ΕΔ Τϥʔ Λੜ੒͢Δɻ Đ Ċ Ĕ ė ϝοη ʔ δ͸ ɺčİĮĦý õ ç ø ʹࣔ͢Α͏ͳ Đė σʔ λάϥϜͱͯ͠సૹ͞ΕΔɻ Đėç ϔ ο μ ù÷ ϊ ͯ Π τ Đ ė σʔλάϥϜ ĐĊĔė ϝ ο η ʔδ čİ Į õ çýõø çĐ ė σʔλάϥ ϜʹΧϓηϧԽ͞Εͨ ĐĊĔė ϝ ο ηʔδ ę č Ċ ç þĀùç ĢėĶĺĻĬijçøĀÿøĩđʹ Đ Ċ Ĕ ė ͷެࣜ࢓༷͕هࡌ͞ Ε͍ͯΔ ɻ čİĮõçýõ ç ù ʹ ɺ ĐĊ Ĕ ė ϝοη ʔ δͷܗࣜΛࣔ͢ɻ ࠷ॳͷ û όΠτ͸͢΂ͯͷϝο ηʔ δͰಉ
  2. ICMPメッセージの形式 l タイプフィールド l コードフィールド l チェックサムフィールド:ICMPメッセージ全体のエラー検出用フィールド úøç ÿ ϐ

    ο τ λ Π ϓ Đ ç ÿ ç • āāāøô Đ ç øý ϐ ο τ ɾ ν Σ ο έ α Ϝ ï ಺༰͸λΠϓͱίʔυʹΑΔð č İ Į õ çý õ çù çĐĊĔė ϝοηʔδ ຊষͰ͸ɺ Đ Ċ Ĕ ė ϝοηʔδͷ֓ཁΛड़ϖɺΞυϨεɾϚεΫͷཁٻͱԠ౴ɺλΠϜελϯϓ οηʔδͷ メッセージのタイプを指定 }
  3. λ Π ϓ ί ʔ υ આ໌ রձ Τϑʔ ɻ

    ɻ ΤίʔԠ౴ ïėİĵĮ Ԡ౴ɺୈ þ ষð • ú ç ͋ͯઌ౸ୡෆՄā ɻ Φɺο๼ϫʔΫ౸ୡෆϩđï ୈ Ā ষ ú અð • ϗετ౸ୡෆՄï ୈ Ā ষ ú અð • ù ç ϓϩτίϊϨ౸ୡෆՄ • ú ç ϙʔτ౸ୡෆՄï ୈ ý ষ ü અð • û ç ϑϥάϝϯςʔγϣϯ͕ඞཁ͕ͩɺϑϥάϝϯτͯ͠͸ • ͍͚ͳ͍͜ͱΛࣔ͢ϐοτΛઃఆï ୈ øø ষ ý અð ü ç ιʔεɾϊϨʔτ͕ࣦഊï ୈ ÿ ষ ü અð • ý ç ͋ͯઌΦɺοτϫʔΫ͕ෆ໌ • þ ç ͋ͯઌϗετ͕ෆ໌ • ÿ ç ൃ৴ݩϗετ͕ݽཱï ø ø øࣜð • Ā ç ͋ͯઌωοτϫʔΫ͕؅ཧతʹېࢭ͞Ε͍ͯΔ • ø÷ç ͋ͯઌϗετ͕ූۉతʹېࢭ͞Ε͍ͯΔ • øøç ě Ė Ě ʹωοτϫʔΫ౸ୡෆՄï ୈ Ā ষ ú અð • øùç ě Ė Ě ʹϗετ౸ୡෆՄï ୈ Ā ষ ú અð • øúç ϑΟϧλϦϯάͰ௨৴͕؅ཧతʹېࢭ͞Ε͍ͯΔ • øûç ϗετ༏ઌҧ൓ • øüç ࣄ্࣮ɺ༏ઌ੾அ • û ç ɻ ൃ৴৑཈੍ï جૅతϑϩʔ੍ޚɺୈ øø ষ øø અð • ü ç ϦμΠϨΫ๼ï ୈ Ā ষ ü અð ā ç ɻ ΦɺοτϫʔΫ΁ͷϦλकΠϨΫτ • ij ç ϗετ΁ͷϦλकΠϨΫ๼ • ù ç ě Ė ĚɺΦɺοτϫʔΫ΁ͷϦλकΠϨΫ๼ • ú ç ě Ė Ěɺϗετ΁ͷϦμΠϨΫτ • ÿ ç ɻ Τίʔཁٻ ïėİĵĮ ཁٻɺୈ þ ষ ð • Ā ç ɻ ϊϨʔλҰ޿ࠂï ୈ Ā ষ ý અð • ø÷ç ɻ ϊϨʔλʔ੥ئï ୈ Ā ষ ý અð • øøç ࣌ؒ௒աā ɻ సૹதͷੜଘ࣌ؒೋ ĶïěĹĨĪĬĹĶļĻĬɺୈ ÿ ষð • ij ç ϦΞηϯϒϦதͷੜଘ࣌ؒ ĄĖïୈ øø ষ ü અð • øùç ϊĭ ϥϝλ໰୊ā ɻ Đė ϔομʹ໰୊ï ΩϟονΦʔϧɾΤϥʔð • ij ç ඞཁͳΦϓγϣϯͷܽམ • øúç ɻ λΠϜελϯϓཁٻï ୈ ý ষ û અð • øûç ɻ λΠϜελϯϓԠ౴ï ୈ ý ষ û અð • øüç ɻ ΠϯϑΥϝʔγϣϯཁٻï ø ø øࣜð • øýç ɻ ΠϯϑΥϝʔγϣϯԠ౴ ï øē Đࣜð • øþç ɻ ΞυϨεɾϚεΫཁٻï ୈ ý ষ ú અð • øÿç ɻ ΞυϨεɾϚεΫԠ౴ï ୈ ý ষ ú અð • č İ Į õ çý õ çú çĐĊĔė ϝοηʔδɾλΠϓ ICMPメッセージタイプ l ICMPメッセージはタイプフィールドと コードフィールドによって分類される l メッセージの種類は大まかに二つ ◦ 照会メッセージ ◦ エラーメッセージ
  4. ICMPエラーメッセージ l ICMPエラーメッセージには必ずIPヘッダとエラー発生原因となったIPデータグラムの 最初の8バイトが含まれる l エラーメッセージは以下のものに対しては生成されない ◦ ICMPエラーメッセージ ◦ IPブロードキャストアドレス、IPマルチキャストアドレスへのデータグラム

    ◦ リンク層ブロードキャストとして送信されたデータグラム ◦ 2つ目以降のフラグメント ◦ ゼロアドレス、ループバックアドレス、ブロードキャストアドレス、マルチキャストアドレスが 発信元であるデータグラム(発信元が1台のホストとして定義されていないデータグラム) l 以上のルールはブロードキャストストームを避けるために作られた LANでMACフレームが永遠に回り続けること 参考: http://itpro.nikkeibp.co.jp/article/Keyword/20090526/330672/?rt=nocnt
  5. ICMPアドレスマスクの要求と応答 l タイプ17, 18 コード0 l ディスクレスシステムが起動時にサブネットマスクを取得するためのもの l ICMP要求をブロードキャストする l

    サブネットマスク取得の代替方法としてBOOTPプロトコルがある(第16章) ετʔϜ͸ɺ͔ͭͯϒϩʔυΩϟε๼ɾύέοτʹԠ౴ͯ͠ૹΒΕͨ Đ Ċ Ĕ ė ΤϥʔʹΑͬͯҾ͖ ى͜͞Ε͍ͯͨɻ ø ø ý õ ú ç Đ Ċ Ĕ ė ΞυϨεɾϚεΫͷཁٻͱԠ౴ Đ Ċ Ĕ ė ΞυϨεɾϚεΫཁٻ͸ɺσΟεΫϨεɾγεςϜ͕ىಈ࣌ʹαϒΦɺο๼ɾϚεΫï ୈ ú ষ ü અð Λऔಘ͢ΔͨΊͷ΋ͷͰ͋ΔɻཁٻγεςϜ͸ Đ Ċ Ĕ ė ཁٻΛϒϩʔυΩϟε๼͢Δï ͜Ε ͸σΟεΫϨεɾγεςϜ͕ىಈ࣌ʹ ę Ĉ ę ė Λ༻͍ͯ Đė ΞυϨεΛऔಘ͢Δͷͱಉ༷ð ɻσΟε ΫϨεɾγεςϜ͕αϒΦɺο๼ɾϚεΫΛऔಘ͢Δ୅ସํ๏ͱͯ͠͸ɺୈ øý ষͰղઆ͢Δ ĉ Ė Ė ě ė ϓϩτίϧ͕͋Δɻ čİĮõýõû ͸ ɺ Đ Ċ Ĕ ė ΞυϨεɾϚεΫͷཁٻͱԠ౴ϝοηʔδͷܗࣜΛࣔͯ͠ ͠ ɺ Δ ɻ ɻ þ çÿ ç øüç øýç ί ʔ υ ï÷ð ν Σ ο έ α Ϝ ࣝผࢠ γʔέϯε൪߸ úù ϐ ο τ ɾ α ϑ ʔ ω ο τ ɾ Ϛ ε Ϋ č İ Į õ çý õ çû çĐĊĔė ΞυϨεɾϚεΫͷཁٻͱԠ౴ϝοηʔδ Đ Ċ Ĕ ė ϝοηʔδͷࣝผࢠͱγʔέϯε൪߸ϑΟʔϧυ͸ɺૹΓखͷબ୒ ij͜೚͞ΕɺͦΕΒͷ
  6. ICMPアドレスマスクの要求と応答 l 識別子とシーケンス番号はどの要求に対する応答なのか送り手が判別する のに用いられる ◦ 応答では要求と同じ値で返す ◦ 値は送り手の選択に任される ετʔϜ͸ɺ͔ͭͯϒϩʔυΩϟε๼ɾύέοτʹԠ౴ͯ͠ૹΒΕͨ Đ

    Ċ Ĕ ė ΤϥʔʹΑͬͯҾ͖ ى͜͞Ε͍ͯͨɻ ø ø ý õ ú ç Đ Ċ Ĕ ė ΞυϨεɾϚεΫͷཁٻͱԠ౴ Đ Ċ Ĕ ė ΞυϨεɾϚεΫཁٻ͸ɺσΟεΫϨεɾγεςϜ͕ىಈ࣌ʹαϒΦɺο๼ɾϚεΫï ୈ ú ষ ü અð Λऔಘ͢ΔͨΊͷ΋ͷͰ͋ΔɻཁٻγεςϜ͸ Đ Ċ Ĕ ė ཁٻΛϒϩʔυΩϟε๼͢Δï ͜Ε ͸σΟεΫϨεɾγεςϜ͕ىಈ࣌ʹ ę Ĉ ę ė Λ༻͍ͯ Đė ΞυϨεΛऔಘ͢Δͷͱಉ༷ð ɻσΟε ΫϨεɾγεςϜ͕αϒΦɺο๼ɾϚεΫΛऔಘ͢Δ୅ସํ๏ͱͯ͠͸ɺୈ øý ষͰղઆ͢Δ ĉ Ė Ė ě ė ϓϩτίϧ͕͋Δɻ čİĮõýõû ͸ ɺ Đ Ċ Ĕ ė ΞυϨεɾϚεΫͷཁٻͱԠ౴ϝοηʔδͷܗࣜΛࣔͯ͠ ͠ ɺ Δ ɻ ɻ þ çÿ ç øüç øýç ί ʔ υ ï÷ð ν Σ ο έ α Ϝ ࣝผࢠ γʔέϯε൪߸ úù ϐ ο τ ɾ α ϑ ʔ ω ο τ ɾ Ϛ ε Ϋ č İ Į õ çý õ çû çĐĊĔė ΞυϨεɾϚεΫͷཁٻͱԠ౴ϝοηʔδ Đ Ċ Ĕ ė ϝοηʔδͷࣝผࢠͱγʔέϯε൪߸ϑΟʔϧυ͸ɺૹΓखͷબ୒ ij͜೚͞ΕɺͦΕΒͷ
  7. ICMPタイムスタンプの要求と応答 l タイプ13, 14 コード0 l あるシステムから他のシステムに現在の時間を照会するときに用いられる ◦ 知れるのは時間のみ ◦

    日付は別の方法で知る必要がある l 戻り値はUTC午前0時からの経過時間(ミリ秒) øû÷õùüùõøúõúúð ʹૹΒΕͨ Đė σʔλάϥϜ͕ɺ࣮ࡍ͸ϧʔϓύοΫɾΠϯλϑΣʔεʹૹΒΕͨ ͜ͱ͕Θ͔Δɻ ĐĊĔė ΞυϨεɾϚεΫԠ౴͸ɺཁٻ͕ड͚औΒΕͨΠϯλϑΣʔεͷαϒΦɺο τɾϚεΫʹରԠ͢Δ΋ͷͰͳ͚Ε͹ͳΒͣï ͱ͍͏ͷ΋ɺϚϧνϗʔϜɾϗετ͸֤ΠϯλϑΣ ʔε͝ͱʹҟͳΔαϒΦɺο๼ɾϚεΫΛ͔࣋ͭΒͰ͋Δð ɺ૒ํͷέʔεͱ΋ཁٻ͸ϧʔϓϊĭ π ΫɾΠϯλϑΣʔε͔Βड͚औΒΕ͍ͯΔɻ ø ø ý õ çû çĐĊĔė λΠϜελϯϒͷཁٻͱԠ౴ ĐĊĔė λΠϜελϯϓͷཁٻ͸ɺ͋ΔγεςϜ͔ΒଞͷγεςϜʹݱࡏͷ࣌ฉΛরձ͢Δͱ͖ ਔ༻͍ΒΕΔɻਪ঑͞ΕΔ໭Γ஋͸ɺ ĜěĊïڠఆੈք࣌ā ैདྷͷάϦχοδඪ४࣌ð ޕલ Ė ͔࣌Β ͷܦա࣌ؒï ϛϦඵð ͱͳ͍ͬͯΔɻ͜ͷ ĐĊĔė ϝοηʔδͷ༏Εͨ఺͸ɺϛϦඵ୯Ґͷਫ਼౓Λ࣋ ͍ͬͯΔ͜ͱͩɻଞͷϗετ͔Β࣌ؒΛೖख͢Δผͷํ๏ï ͨͱ͑͹ Ĝ ĕ Đ ğ ͷ ĹīĨĻĬ ίϚϯυð ผͷํ๏Ͱ஌Βͳ͚Ε͹ͳΒͳ͍ɻ čİĮõçý õ çý ͸ ɺ ĐĊĔė λΠϜελϯϓͷཁٻ͓ΑͼԠ౴ϝοηʔδͷܗࣜΛද͍ͯ͠Δɻ ɻ þ ç ÿ ç øüç øýç ί ʔ υ ï ÷ ð ν Σ ο Ϋ α Ϝ ࣝผࢠ γʔέϯε൪߸ úù ϐοτΦϦδωʔτɾλΠϜελϯϓ ù÷ ό Π τ úù ϐ ɺ ϊ τ Ϩ γ ʔ ϒ ɾ λ Π Ϝ ε λ ϯ ϓ úù ϐ ο τ τ ϥ ϯ ε ϛ ο τ ɾ λ Π Ϝ ε λ ϯ ϓ č İ Į õ çý õ çý ç ĐĊĔė λΠϜελϯϓͷཁٻͱԠ౴ϝοηʔδ ཁٻଆ͸ΦϦδωʔτɾλΠϜελϯϓΛ֨ೲͯ͠ɺཁٻΛૹ৴͢ΔɻԠ౴͢ΔଆͷγεςϜ
  8. ICMPタイムスタンプの要求と応答 l ICMPタイムスタンプのメッセージ ◦ オリジネートタイムスタンプ: 要求時のタイムスタンプ ◦ レシーブタイムスタンプ: 応答側の受信時のタイムスタンプ ◦

    トランスミットタイムスタンプ: 応答側の送信時のタイムスタンプ ΫɾΠϯλϑΣʔε͔Βड͚औΒΕ͍ͯΔɻ ø ø ý õ çû çĐĊĔė λΠϜελϯϒͷཁٻͱԠ౴ ĐĊĔė λΠϜελϯϓͷཁٻ͸ɺ͋ΔγεςϜ͔ΒଞͷγεςϜʹݱࡏͷ࣌ฉΛরձ͢Δͱ͖ ਔ༻͍ΒΕΔɻਪ঑͞ΕΔ໭Γ஋͸ɺ ĜěĊïڠఆੈք࣌ā ैདྷͷάϦχοδඪ४࣌ð ޕલ Ė ͔࣌Β ͷܦա࣌ؒï ϛϦඵð ͱͳ͍ͬͯΔɻ͜ͷ ĐĊĔė ϝοηʔδͷ༏Εͨ఺͸ɺϛϦඵ୯Ґͷਫ਼౓Λ࣋ ͍ͬͯΔ͜ͱͩɻଞͷϗετ͔Β࣌ؒΛೖख͢Δผͷํ๏ï ͨͱ͑͹ Ĝ ĕ Đ ğ ͷ ĹīĨĻĬ ίϚϯυð ผͷํ๏Ͱ஌Βͳ͚Ε͹ͳΒͳ͍ɻ čİĮõçý õ çý ͸ ɺ ĐĊĔė λΠϜελϯϓͷཁٻ͓ΑͼԠ౴ϝοηʔδͷܗࣜΛද͍ͯ͠Δɻ ɻ þ ç ÿ ç øüç øýç ί ʔ υ ï ÷ ð ν Σ ο Ϋ α Ϝ ࣝผࢠ γʔέϯε൪߸ úù ϐοτΦϦδωʔτɾλΠϜελϯϓ ù÷ ό Π τ úù ϐ ɺ ϊ τ Ϩ γ ʔ ϒ ɾ λ Π Ϝ ε λ ϯ ϓ úù ϐ ο τ τ ϥ ϯ ε ϛ ο τ ɾ λ Π Ϝ ε λ ϯ ϓ č İ Į õ çý õ çý ç ĐĊĔė λΠϜελϯϓͷཁٻͱԠ౴ϝοηʔδ ཁٻଆ͸ΦϦδωʔτɾλΠϜελϯϓΛ֨ೲͯ͠ɺཁٻΛૹ৴͢ΔɻԠ౴͢ΔଆͷγεςϜ
  9. ICMPポート到達不可エラー l タイプ3 コード3 l ポートに到達できないときのエラーメッセージ l UDPはポートが何かのプロセスに占有されていて応答しない場合はICMP ポート到達不可を返す οηʔδΛແࢹ͠ɺ໿

    ü ඵޙʹ࠶౓ Ĝ ċ ė σʔλάϥϜΛૹΓग़͍ͯ͠Δï ୈ ü Ļ Ĺ ðɻ͜Ε͸ΫϥΠ Ξϯ๼͕͖͋ΒΊΔ·Ͱɺͦͷޙ úø೔ ij܁Γฦ͞ΕΔɻ ͜͜Ͱɺ Đ Ċ Ĕ ė ϝοηʔδ͸ϙʔτ൪αͷ͋ͯઌͳ͠ͰϗετฉͰަ׵͞ΕɺҰํɺ֤ ù÷ ϊĭ Π τ ͷ Ĝ ċ ė σʔλάϥϜ͸ಛఆͷϙʔτ ïùĀùûð ͔Βಛఆͷϙʔτ ïÿÿÿÿð ʹૹΒΕ͍ͯΔ͜ͱʹ஫ ҙ͠Α͏ɻ ֤ Ĝ ċ ė ͷߦͷ࠷ޙʹ͋Δ஋ ù÷ ͸ ɺ Ĝ ċ ė σʔλάϥϜͷதͷσʔλͷ௕͞Ͱ͋Δɻ͜ͷྫͷ ù÷ ͸ ɺ ě č ě ė ͷ ù όΠτͷΦϓίʔυɺ Ā ύΠ๼ͷψö ϧϨͯ ऴΘΔจࣈເྻ Đ Ϧ ð ĵĬ ޵ ĻĨĺĪİ ޱ İ ͷ߹đ ܭ े ͯ Ͱ ɺ ͋ Δ ï ě č ě ė ͷύέπτߏ଄ͷৄंࢗࠠࡉ ď ฉ ļʹ͍ͭͯ͸ čİĮõ øüõçø Λ ࢀ èij೔ ͤ Α ð ɻ ij İ İ đ ͡ྫΛ ĻĪķīļĹĵķ ͷôĬ Φϓγϣϯͱͱ΋ʹ࣮ߦ͢Ε͹ɺૹΓࢠʹฦ͞ΕΔ Đ Ċ Ĕ ė ϙʔτ౸ୡ ෆՄϝοηʔδͷਖ਼֬ͳ௕͞Λ஌Δ͜ͱ͕Ͱ͖Δɻͦͷ௕͞͸ þ÷ ό Π τ ͯ é ɼ čİĮõçý õ çĀ ͷΑ͏ͳߏ ੒ʹͳ͍ͬͯΔɻ ČĻįĬĴĬĻç ΁ιμ øû όΠτ Đėç ϔ þ ༦ ɺ ù÷ ϊ ʪ Π τ Đė σʔλάϥϜ ø ç Đ Ċ Ĕ ė ϝ ο η ʔ δ õ õ õ õ ø ç øô Đ Ċ Ĕ ė ϝοηʔδͷσʔλ෦෼ ôø ΤϥʔΛൃੜͨ͠ σʔλάϥϜͷ Đė ϔ ο μ ɺ ù÷ όΠτ čİĮõçý õ çĀ çİ Ĝ ċ ė ϙʔτ౸ୡෆՄʯͷྫͰฦ͖ͬͯͨ ĐĊĔė ϝοηʔδ
  10. ICMP到達不可メッセージ形式 l タイプ3 コード0〜15 l 2番目の32ビット値は0 ◦ ただしコード4のときは、パスMTUディスカバリによりルータが32ビット値の低位16ビット分に 送信インターフェースのMTUを設定する(11章で取り上げる) l

    エラーを発生させたIPヘッダとIPデータグラムのデータの少なくとも最初の 8バイトが含まれる Đ Ċ Ĕ ė ͷϊϨʔϧͷ Đ ͬͱͯ͠ɺ Đ Ċ Ĕ ė Τϥʔɾϝοηʔδ ïķõÿø ͷ čİĮõýõú ͷ࠷ޙͷཝΛࢀরð ʹ͸ɺΤϥʔΛൃੜͤͨ͞ςɻʔλάϥϜͷ Đė ϔομï ͢΂ͯͷΦϓγϣϯΛؚΉð ͦ͠Εʹଓ͍ ͯগͳ͘ͱ΋࠷ॳͷ ÿ όΠτؚ͕·Ε͍ͯͳ͚Ε͹ͳΒͳ͔ͬͨɻຊॻͷྫͰ͸ɺ Đė ϔομʹ౷ ʪ࠷ॳͷ ÿ όΠτʹ͸ɺ Ĝ ċ ė ϔομ ïčİĮõ øø õ çù ð ؚ͕·ΕΔɻ ॏཁͳͷ͸ɺ Ĝ ċ ė ϔομʹؚ·Ε͍ͯΔ΋ͷ͕ɺൃ৴ݩͱ͋ͯઌͷϙʔτ൪߸Ͱ͋Δͱ͍͏͜ ͱͩɻ͜ͷ͋ͯઌϙʔτ൪߸ ïÿÿÿÿð ͕ Đ Ċ Ĕ ė ϙʔτ౸ୡෆՄͷݪҼͱͳ͍ͬͯΔɻൃ৴ݩϙʔτ ൪ ߸ ïùĀùûð ͸ ɺ Đ Ċ Ĕ ė ΤϥʔΛड͚औͬͨγεςϜ͕ಛఆͷϢʔβʔɾϓϩηεï ͜ͷྫͰ͸ ě č ě ė ΫϥΠΞϯτð ͱؔ࿈͚ͮ͢ΔͨΊʹ༻͍ΒΕΔɻ ΤϥʔΛىͨ͜͠σʔλάϥϜͷ Đė ϔομ͕ૹΓฦ͞ΕΔཧ༝ͷ ø ͭ ͸ ɺ Đ Ċ Ĕ ė ʹରͯ͠ɺޙ ʹଓă ÿ όΠτͷ಺༰ï ຊॻͷྫͰ͸ Ĝ ċ ė ϔομð Λม׵ͤ͞Δํ๏Λ஌ΒͤΔͨΊͷϓϩτί ϊϨɾϑΟʔϧυ͕ Đė ϔομʹؚ·Ε͍ͯΔ͔ΒͰ͋Δɻ ě Ċ ė ϔομ ïčİĮõ øþõùð ʹ͍ͭͯٞ࿦͢ Δͱ͖ɺൃ৴ݩͱ͋ͯઌͷϙʔτ൪߸͕ ě Ċ ė ϔομͷ࠷ॳͷ ÿ όΠτʹؚ·Ε͍ͯΔ͜ͱΛղ આ͢Δɻ Đ Ċ Ĕ ė ౸ୡෆՄϝοηʔδͷҰൠతͳܗ͕ࣜ čİĮõýõø÷ ʹࣔ͞Ε͍ͯΔɻ ÷ þ ç ÿ ç ø ü ç øýç Ĕ ï ú ð ç Đ ç āđç ô Ĺ ô ï÷ôøüðç Đ ʜ Ϝ ະ࢖༻ï÷Ͱͳ͚Ε͹ͳΒͳͭ͠ Đė ϔομï ΦϓγϣϯΛؚΉð ò ΦϦδφϧ Đė σʔλάϥϜͷσʔλͷ࠷ॳͷ ÿ όΠτ č İ Į õ çý õ çø÷ç ĐĊĔė ౸ୡෆՄϝοηʔδ úøç ě ç İ ç čİĮõçý õ çú ͯģ ίʔυ Ė ͔Β øü ·Ͱͷ øý छͷ Đ Ċ Ĕ ė ౸ୡෆՄϝοηʔδ͕͋Δ͜ͱΛࣔͨ͠ɻ
  11. BSDのICMPメッセージ処理 l 同一の実装の中でもメッセージの処理方法が異なる λ Π ϓ ί ʔ υ આij

    Ϧ ij ॲ đijıĢ ɻ ɻ ΤίҰԠ౴ Ϣʔβʔɾϓϩηε ú ç ͋ͯઌ౸ୡෆՄā ɻ Φɺο๼ϫʔΫ౸ୡෆՄ İĕĶç ĹĶļĻĬçĻĶçįĶĺĻđç ϗετ౸ୡෆՄ İĕĶçĹĶļĻĬçĻĶçįĶĺĻ đ ç ù ç ϓϩτίϧ౸ୡෆ ă ij đ İĊĶĵĵĬĪĻİĶĵçęĬĭļĺĬīđç ú ç ϙʔτ౸ୡෆՄ İĊĶĵĵĬĪĻİĶĵçęĬĭļĺĬīđç û ç ϑϥάϝϯςʔγϣϯ͕ඞཁ͕ͩɺϑϥά İĔĬĺĺĨĮĬçĻĶĶçijĶĵĮđç ϝϯτͯ͠͸͍͚ͳ͍͜ͱΛࣔ͢ϐοτ ü ç ιʔεɾϊϨʔτ͕ࣦഊ İĕĶç ĹĶļĻĬçĻĶçįĶĺĻ đ ç ý ç ͋ͯઌΦɺοτϫʔΫ͕ෆij ø ðı İĕĬĻľĶĹIJçİ ĺ çļĵĹĬĨĪįĨĩijĬđç þ ç ͋ͯઌϗετ͕ෆ໌ İĕĶç ĹĶļĻĬçĻĶçįĶĺĻ đ ç ÿ ç ൃ৴ݩϗετ͕ݽཱ ï ø ø øࣜð İĕĶç ĹĶļĻĬçĻĶçįĶĺĻ đ ç Ā ç ͋ͯઌωοτϫʔΫ͕đ î é Ļ Đ Ă ཧతʹېࢭ͞Εͯ İĕĬĻľĶĹIJçİ ĺ ç ļĵĹĬĨĪįĨĩijĬđç ēɺ Δ ø÷ç ͋ͯઌϗετ͕؅ཧతʹېࢭ͞Ε͍ͯΔ İĕĶç ĹĶļĻĬçĻĶçįĶĺĻđç øøç ě Ė Ě ʹΦɺοτϫʔΫ౸ୡෆՄ İĕĬĻľĶĹIJçİ ĺ ç ļĵĹĬĨĪįĨĩijĬđç øùç ě Ė Ě ʹϗετ౸ୡෆՄ İĕĶç ĹĶļĻĬçĻĶçįĶĺĻđç øúç ϑΟϧλϦϯάͰ௨৴͕؅ཧతʹېࢭ͞Ε ï ແࢹð ͍ͯΔ øûç ϗετ༏ઌҧ൓ ï ແࢹð øüç ࣄ্࣮ɺ༏ઌ੾அ ï ແࢹð û ç ɻ ൃ৴৑཈੍ ě Ċ ė ͸ Χ ʔ ω ϊ Ϩ ɺ Ĝ ċ ė ͸ແࢹ ü ç ϦλकΠϨΫτā ɻ ΦɺοτϫʔΫ΁ͷϦλʔΠϨΫτ ΧʔωϊϨ͕ϊϨʔςΟϯάɾςʔ ϒϊϨΛߋ৽ Đ ç ϗετ΁ͷϦλकΠϨΫτ Χô İɺϊϨ͕ϧʔςΟϯάɾςʔ ϓϊϨΛߋ৽ ù ç ě Ė ĚɺωοτϫʔΫ΁ͷϦμΠϨΫτ ΧʔΦɺϊϨ͕ϧʔςΠϯάɾςʔ ϓϊϨΛߋ৽ ú ç ě Ė Ěɺϗετ΁ͷϦλî ΠϨΫτ ΧʔΦɺϊϨ͕ϊϨʔςΠϯάɾςʔ ϒϊϨΛߋ৽ ÿ ç ɻ Τίʔཁٻ ΧʔωϊϨ͕Ԡ౴Λ î ø ā੒ Ā ç ɻ ϊϨʔλҰ޿ࠂ Ϣʔβʔɾϓϩηε ø÷ç ɻ ϊϨʔλʔ੥ئ Ϣʔβʔɾϓϩηε øøç ࣌ؒ௒աā ɻ సૹதͷੜଘ࣌ؒ Ą ÷ Ϣʔβʔɾϓϩηε ϦΞηϯϒϦதͷੜଘ࣌ؒ Ą ÷ Ϣʔβʔɾϓϩηε øùç ύϥϝλ໰୊ā ɻ Đė ϔομʹ໰୊ï ΩϟονΦʔϧɾΤϥʔð İėĹĶĻĶĪĶijçĵĶĻçĨĽĨİijĨĩijĬđç ij ç ඞཁͳΦϓγϣϯͷܽམ İėĹĶĻĶĪĶijçĵĶĻçĨĽĨİijĨĩijĬđç øúç ɻ λΠϜελϯϓཁٻï ୈ ý ষ û અð ΧʔΦɺϊϨ͕Ԡ౴Λੜ੒ øûç ɻ λΠϜελϯϓԠ౴ï ୈ ý ষ û અð Ϣʔβʔɾϓϩηε øüç ɻ ΠϯϑΥϝʔγϣϯཁٻï ø ø øࣜð ï ແࢹð øýç ɻ ΠϯϑΥϝʔγϣϯԠ౴ ï ø ø øࣜð Ϣʔβʔɾϓϩηε øþç ɻ ΞυϨεɾϚεΫཁٻï ୈ ý ষ ú અð Χʔωö Ϩ͕Ԡ౴Λੜ੒ øÿç ɻ ΞυϨεɾϚεΫԠ౴ï ୈ ý ষ ú અð Ϣʔβʔɾϓϩηε čİĮõýõøùç ûõûĉĚċ ʹΑΔ Đ Ċ Ĕ ė ϝοηʔδϯάॲཧͷλΠϓ ýõýç ûõûçĉĚċͷĐ Ċ Ĕ ėϝοηʔδॲཧ Āú
  12. 6章まとめ l ICMP ◦ エラーメッセージやその他の状態をやりとりするためのプロトコル l ICMP要求・応答メッセージ ◦ ICMPアドレスマスク ◦

    ICMPタイムスタンプ ◦ 識別子とシーケンス番号を持つ l ICMPエラーメッセージ ◦ ポート到達不可エラー ◦ IPヘッダとそれに続くIPデータグラムの最初の8バイト(発信元と宛先ポート番号)を持つ
  13. Pingプログラム l サーバーはクライアントから送られて来た識別子、シーケンス番号、 オプションのデータをそのまま送り返さなければならない ◦ 送り手側で応答を識別するため l UNIX実装では識別子は送り手のプロセスのプロセスID l シーケンス番号は0からスタートし、新しいエコー要求が送られるたびに増加

    ϐεɺΞυϨεɾϚεΫͱλΠϜελϯϓཁٻ΋·ͨɺΧʔωϊϨͯɺμΠϨΫτʹॲཧ͞ΕΔð ɻ čİĮõþõø ͸ Đ Ċ Ĕ ė ΤίʔཁٻͱΤίʔԠ౴ϝοηʔδΛ͍ࣔͯ͠Δɻ ɻ þ çÿ ç øüç øýç ί ʔ υ ï ÷ ð ν Σ ο έ α Ϝ ࣝผࢠ γʔέϯε൪߸ Φϓγϣϯͷσʔλ čİĮõçþõøç ΤίʔཁٻͱΤίʔԠ౴ͷ Đ Ċ Ĕ ė ϝοηʔδͷܗࣜ úøç þ ç İ ç ଞͷ Đ Ċ Ĕ ė রձϝοηʔδͱಉ༷ɺαʔόʔ͸ࣝผࢠͱγʔέϯε൪߸ϑΟʔϊϨυΛΤίʔ͠ ͳ͚Ε͹ͳΒͳ͍ɻ·ͨɺΫϥΠΞϯτ͔ΒૹΒΕͨΦϓγϣϯσʔλ΋Τίʔ͞Εͳ͚Ε͹ͳ
  14. IPヘッダのレコードルートオプションの形式 l IPヘッダのオプションの上限値は40バイト、レコードルートオプションの最初 が3バイトであるから、追加できるIPアドレスは9個まで l コード:IPオプションのタイプ(RRオプションは7) l データ長:RRオプションのバイト数(通常は39) l ポインタ:次のIPアドレスが格納される場所

    ͩ ɻ čİĮõ ú õ ç ø ç ï ķ õ çúÿð Ͱ Đė ϔομͷϔομ௕͕ û ϐοτɾϑΟʔϧυɺ͢΂ͯͷ Đė ϔομ͕ øü ݸ ͷ úù ϐοτɾϫʔυ ïý÷ ϊĭ Π๼ð ʹ੍ݶ͞Ε͍ͯΔ͜ͱΛݟͨɻ Đė ϔομͷݻఆ௕͕ ù÷ όΠτ ͯ î õ ɼ ę ę ΦϓγϣϯͷΦʔόʔϔουï ͜Εʹ͍ͭͯ͸ޙड़͢Δð ͕ ú όΠτͰ͋Δ͜ͱ͔ΒɺϦε τʹ͸ úþ όΠτ ïý÷ôù÷ôúð ͕࢒͞Εɺ Ā ͭͷ Đė ΞυϨε·ͰʞΧόʔͰɺ͖Δɻ Ĉ ę ė Ĉ ĕ Č ě ͷॳظ ͷࠒ͸ɺ Ā ͭͷ Đė ΞυϨεͰ΋े෼ͱݟΒΕ͍͕ͯͨɺԟ෮ͷϦετͰ͋Δ͜ͱΛߟ͑Ε͹ ïôę ΦϓγϣϯΛ͚ͭͯ ķİĵĮ Λ࣮ߦͨ͠৔߹ð ɺࠓ೔Ͱ͸ͦͷར༻ਔ͸ݶք͕͋ΔͱݴΘ͟ΔΛಘͳ ͍ ï ୈ ÿ ষͰģ σʔλάϥϜͷϊϨʔτΛܾఆ͢Δ ěĹĨĪĬĹĶļĻĬ πʔϊϨΛղઆ͢Δð ɻ͜͏ͨܽ͠఺ɺ͸ ͋Δ΋ͷͷɺϨίʔυɾϊϨʔτɾΦϓγϣϯ͸ Đė ΦϓγϣϯͷॲཧͷৄࡉΛνΣοΫ͢ΔͨΊʹ ໾ʹཱ͍ͬͯΔɻ čİĮõçþ õ çú ͸ Đė σʔλάϥϜͷ ę ę ΦϓγϣϯͷҰൠతͳܗࣜΛ͍ࣔͯ͠Δɻ úĀ όΠτ č İ Į õ çþ õ çú çĐ ė ϔομͷϨίʔυɾϧʔτɾΦϓγϣϯͷҰใܗࣜ ίʔυ͸ Đė ΦϓγϣϯͷλΠϓΛࢦఆ͢Δ øϊĭ ΠτͷϑΟʔϊϨυͰ͋Δɻ ę ę Φϓγϣϯͷ஋
  15. IPタイムスタンプオプション l 通過したルータのタイムスタンプが知れる l コード:IPタイムスタンプオプションは0x44 l データ長:オプションの合計のバイト数(通常は36または40) l ポインタ:次の利用可能なエントリ σʔλάϥϜ͕ྲྀΕΔϊϨʔτ͕ࣔ͞ΕΔɻ

    Đ Ċ Ĕ ė ϦμΠϨΫτʹ͍ͭͯ͸ɺୈ Ā ষ ü અͰৄࡉΛ ղઆ͢Δɻ ø ø þ õ çû çĐė λΠϜελϯϒɾΦϓγϣϯ Đė λΠϜελϯϓɾΦϓγϣϯ͸ɺϨίʔυɾϊϨʔτɾΦϓγϣϯͱΑ͘ࣅ͍ͯΔɻ čİĮõ þ õ ç þ ͸ Đė λΠϜελϯϓɾΦϓγϣϯͷܗ͕ࣜࣔ͞Ε͍ͯΔ ïčİĮõ þ õ ç ú ͱൺֱͤΑð ɻ û÷ ό Π τ č İ Į õ çþ õ çþ çĐ ė ϔομͷλΠϜελϯϓɾΦϓγϣϯͷҰൠܗࣜ
  16. IPタイムスタンプオプション l FL(フラグフィールド, 4ビット):下図 l OF(オーバーフローフィールド, 4ビット):タイムスタンプのスペースがなくなっ た場合に増加させる č İ

    Į õ çþ õ çþ çĐ ė ϔομͷλΠϜελϯϓɾΦϓγϣϯͷҰൠܗࣜ λΠϜελϯϓɾΦϓγϣϯͷίʔυɾϑΟʔϧυ͸ Ė Ŀ û û Ͱ͋Δɻσʔλ௕ͱϙΠϯλ͸ɺ ϨίʔυɾϧʔτɾΦϓγϣϯͱಉ͡ͰɺΦϓγϣϯͷ߹ܭͷ௕͞ï ௨ৗ úý ͋Δ͍͸ û÷ð ͱ࣍ͷར ༻ՄೳͳΤϯτϦ ï üɺĀɺøú ͳͲð Λࣔ͢ϙΠϯλͰ͋Δɻ ࣍ͷ ùͭͷϑΟʔϧυ͸ û ϐοτ஋ͯɼ Ėč ͸ΦʔόʔϑϩʔɾϑΟʔϊϨυɺ čē ͸ϑϥάɾϑ ΟʔϧυͰ͋ΔɻλΠϜελϯϓɾΦϓγϣϯͷૢ࡞͸ɺ čİĮõ þ õ ç ÿ ʹࣔ͢Α͏ʹɺϑϥάɾϑΟʔ ϊϨυʹΑͬͯߦΘΕΔɻ ϑϥά આ໌ ɻ λΠϜελϯϓͷΈΛه࿥ɻ čİĮõ þ õ ç þͰࣔͨ͠΋ͷɻ ø ç ֤ϧʔλʔ͸ Đė ΞυϨεͱλΠϜελϯϓΛه࿥͢ΔɻΦϓγϣϯɾϦετʹ͸͜ ΕΒͷ΃Ξͷ û ͭ·Ͱͷεϖʔε͔͠ͳ͍ɻ ú ç ૹΓࢠ͸ΦϓγϣϯɾϦετΛ࠷େ û ͭͷ Đė ΞυϨεͷ΃Ξͱ ÷ λΠϓελϯϓ ͰॳظԽ͢Δɻϧʔλʔ͸Ϧετʹ͋Δ࣍ͷ Đė ΞυϨε͕ϧʔλʔࣗ਎ͷ΋ͷͱ ద߹ͨ͠ͱ͖ͷΈλΠϜελϯϓΛه࿥͢Δɻ čİĮõþõÿç λΠϓελϯϓɾΦϓγϣϯͷϑϥά஋ͷҙຯ λΠϜελϯϓͷεϖʔε͕ͳ͘ͳͬͨ৔߹ɺϧʔλʔ͸ΦʔόʔϑϩʔɾϑΟʔϊϨυΛ૿Ճ
  17. 7章まとめ l Pingプログラム ◦ TCP/IPが稼働する二つのシステム間の接続テストを行うもの ◦ ICMPエコー要求とICMPエコー応答を利用 ◦ カーネルのICMP実装の一部 l

    IPレコードルートオプション ◦ 通過するルータのIPアドレスを出力 l IPタイムスタンプオプション ◦ 通過するルータのタイムスタンプ、IPアドレスを出力