#norelated #title(コンピュータネットワーク2の授業メモ) [[FrontPage>FrontPage]] > [[Network2>./]] (Now) ------------------------------ #contents ------------------------------ * はじめに [#p621168b] 2年生時、秋学期、コンピュータネットワーク2の授業のメモ。 * 準備 [#a14b6e5b] TCP/IP 下位層は、「プリ、デブ、ネル」だ! * Lesson01 [#la142d1d] 休みました~ ** 物理層 [#r0411e42] ** データリンク層前半 [#xc87de75] * Lesson02 [#zc552660] データリンク、ネットワーク層について ** データリンク層 - 後半[#bdf3ff65] *** 役割 [#rffb9dd2] +誤り検出 +媒介アクセス制御 *** 誤り検出 [#jaac09c0] 「ネットワーク層」に大して「未検出の伝送の誤りのない回線」と見えるような回線に変換する *** 媒介アクセス制御(MAC : Media Access Control) [#y4175d78] 多元接続の機能を提供する ***Ethernetフレームフォーマット [#d78a4743] 大事なのは、宛先MACアドレス、送信元MACアドレスの2つがあること。 ***MACアドレス [#h8bccb7d] ベンダ識別子(OUI:Organiztionally Unique Identifier) + ベンダ内での識別子 ** 媒介共有型ネットワーク [#gb0e9280] *** CD/CSMA [#k3a0897b] Collision Detection/Carrier Sense Muitiple Access | 超重要な概念。~ ネットワークを監視し、もし通信の衝突が起こったら、そのことをネットワーク全体に報告(Jam Signal)し、ランダム時間待機して、再送信を行う。 ** 媒体非共有型ネットワーク [#u756c4c2] *** スイッチング技術 [#l928fd00] :スイッチングハブ | それぞれのポートがブリッジになっているハブ *** 無線LAN [#rb2761f7] :CSMA/CA | Carrer Cense Multiple Access を使用している *** ループ検出するための技術 [#b14c1ca6] :スパニングツリー | ルートブリッジを起点にブリッジ間でツリーを構築。~ 各ブリッジ間で、データのループを検出し、他のツリーに流さない。 :ソースルーティング | 送信元にデータが帰ってきたときに、経由ブリッジを把握し、効率よく送信を行う ** ネットワーク層 [#z3a36733] *** 目的 [#t6e3f83a] + 異種データリンク間の相互接続 + 拡張性の問題の解決 *** IP [#l2111b9c] :Internet Protocol | Networl Layer の勘所。~ EndToEnd の通信を実現するもの。 :IP Address | Internet に接続されるホストは、IP Address がつけられる。~ これを元に IP Paket が送られる :ルーティング | 経路制御のこと。これも IP を用いる。 *** コネクション型通信 [#j4765548] 通信開始時に、一度ネットワークを構築してから、通信を行う。~ 早さがなく、複雑になりやすいが、信頼性のある通信に用いる。 *** コネクションレス型通信 [#qe30aadb] :ポップバイポップルーティング | 各ホップごとに、最短のルートへ通信を行い、その後のことは気にしない。 早く、簡単に通信を行う。~ データの信頼性はあまりない。 *** IP Address [#zf8692bc] :IP Address | 32bit長のデータ。~ ネットワーク部 + ホスト部で構築される。 :Sub Net Mask | IP Address におけるネットワーク部のこと :クラス | A ~ D までのクラスがある。~ ネットワーク部の長さによって分けられた IP Address の分類。~ ちなみに、クラスDはブロードキャストアドレス。 :ネットワークアドレス | そのネットワークのみに対してデータ送信を行うアドレス :ブロードキャストアドレス | すべてのネットワークに対してデータ送信を行うアドレス :プライベートアドレス | 決して接続することのない端末同士が、同じ IP Address を持っていもいい仕組み *** ルーティングテーブル [#sf6a9f47] + 経路制御表を参照 +IP送信先ネットワーク決定 +送信 +次のネットワークへ *** ルーティングテーブルの集約 [#m11d4cb2] よくわからない。~ 要は、サブネットマスクを1bitのばして、一括送信する。管理する *** IPの分割処理と、再構築処理 [#h3ee3b88] 異なるネットワークに属している場合、最大送信パケット長が異なる場合がある。~ そういうときにルータにデータが届いた時点で、データを短くしたり、逆に、戻すときに復元したりする処理が必要になったりする。 :経路MTU検索 | [[IT Pro 記事:http://itpro.nikkeibp.co.jp/article/COLUMN/20051202/225628/]] *** IP ヘッダ [#yd2d3206] IPv4とかIPv6の企画に従って、ヘッダが規定されている。 *** ARP [#yaee12af] :Address Resolution Protocol | 送信先の MAC Address を取得する - MAC Address の必要性 知らないホスト間をネットワークでつなぐ際、MAC Address だけで構築されたネットワークだと、接続されたネットワークに対してすべてのパケットを送信しないといけない。~ すると、システムへの付加が大きい。~ なので、IPAddress によって構築されたネットワーク単位で解決することで、全体的な付加を軽減する。 *** ICMP [#g1154563] :Internet Control Message Protocol | IPの補助的使用~ 到達可能メッセージなど、いろいろなメッセージがある *** NAT [#ebaf0143] :Network Address Translator |ローカルネットワークでは、プライベートIPアドレスに設定~ インターネットワークでは、グローバルIPアドレスに変換 *** NAPT [#ve1de318] :Network Address Ports Translator | TCPやUDPのポートも変換する~ 一つのグローバルIPアドレスで、複数のホスト間での通信が可能 *** DHCP [#b6f1837b] :Dynamic Host Configuration Protocol | ホストのネットワーク接続時の設定を自動化 -------------------------- 実は、ここから後期の範囲 * Lesson 3 - トランスポート層[#q05e1958] ** 役割 [#ya1f8cc5] +ポート番号によるアプリケーションの識別 +通信の処理~ クライアント/サーバモデル~ サーバプログラム:デーモン、fork ** ポート番号 [#kf0e1fbc] :5つの数字による通信の識別 | IPヘッダ部(送信元IPAddress, 宛先IPAddress, TCP)と、TCPヘッダ(送信元ポート番号, 宛先ポート番号) :Well-known Port Number | 0 ~ 1023 :ほげほげなんばー? | 1024 ~ 49151 :ダイナミックなポート番号 | 49152 ~ 65535 ** UDP と TCP [#qb14622a] :User Datagram Protocol | 単純。IPを用いてコネクションレス。~ プログラマの思うがまま。リアルタイム性、多くのホスト間通信。 :Transmission Control Protocol | 複雑。コネクション、信頼性の高い通信。~ 順序制御、再送制御、ウィンドウ制御、フロー制御、輻輳制御。 *** TCPにおけるコネクションとは [#f7e12176] アプリケーション間の仮想回線(バーチャルサーキット)~ 作成するのは、ソケットAPIとか、socket()を使う。~ TCPは、通信の交通監視官みたいな。 *** パケットロスについての復習 [#p7668272] :どうして起こるのか | 回線ノイズによるビット誤り、ルータ・ホストの過負荷によるパケットロス。 *** 確認応答 [#dca8c890] :ACK| Positive Acknowledgement、肯定確認応答~ 「うんうん、そうだね」 :NACK | Negative Acknowledgement、否定確認応答~ 「え?なんだって?」 *** シーケンス番号 [#f781713f] 通信を開始してから、どんだけデータを送ったのか確認し、番号をつける *** 正常時のデータ通信 - シーケンス番号と確認応答 [#ib85427d] +A→B データ送信 シーケンス番号1〜10000 +B→A Bがデータを受け取ると、確認応答を出す シーケンス番号10001 +A→B データ送信 シーケンス番号100001〜20000 +B→A Bがデータを受け取ると、確認応答を出す シーケンス番号20001 *** 異常時のデータ通信 - パケット喪失時 [#s9ef7868] +A→B データ送信 シーケンス番号1〜10000 +途中 データ喪失 +A→B 確認応答がないので、データ再送信 シーケンス番号1〜10000 +B→A Bがデータを受け取ると、確認応答を出す シーケンス番号10001 *** 異常時のデータ通信 - 確認応答が喪失した場合 [#sb8149bc] +A→B データ送信 シーケンス番号1〜10000 +B→A Bがデータを受け取ると、確認応答を出す シーケンス番号10001 +途中 確認応答データ喪失 +A→B 確認応答がないので、データ再送信 シーケンス番号1〜10000 +B Bがデータを受け取ると、シーケンス番号で再送信かどうか理解できる +B→A Bがデータを受け取ると、確認応答を出す シーケンス番号10001 *** シーケンス番号、確認応答による制御 [#hb82bff0] 上の3つの機構を使用する事により、TCP/IPの「順序制御、再送制御」を行う *** 再送タイムアウトの設定 [#cf077d7b] :再生までどのくらい待てば良いのか|短距離の高速LAN:短時間、長距離通信:長時間とか? :RTT| Round Trip Time~ 毎回の通信毎に、このRTTとその「揺らぎ」を計測し、最適な再送タイムアウトを設定する *** コネクション確立 - スリーウェイハンドシェイク [#e00ce03c] これによって、相互通信が可能となる。~ 通信機器同士にメモリが確保されて、あとは、好き勝手にできる。 +A→B SVN。コネクション確率要求 +B→A ACK、SVN。 +A→B ACK。 *** コネクション切断 [#wad1d94a] これによって、相互通信が切断され、メモリを解放する。 +A→B FIN +B→A ACK +B→A FIN +A→B ACK *** TCP/IPは、セグメント単位でのデータ通信 [#be077cae] Path MTU Discovery 機能は、TCPで擬似的に実装されているため、あまり使われない。 *** ウィンドウ制御で速度向上 [#u8e239f5] 1パケット、1フレームごとに確認応答すると...色々無駄が生まれます~ :スライディングウィンドウ方式|確認応答を待つ間やRTT間隔の間に送信できるデータ量を、並列送信する セグメント単位ではなく、ウィンドウ単位でデータの送受信を行う * 参考プログラム [#v6ca2bcb] :[[Sock - Richard Stevens' sock Program:http://www.icir.org/christian/sock.html]] | 授業で解説があったプログラム * 参考資料 [#i1ff4340] :[[TCP/IP入門:http://www.atmarkit.co.jp/channel/tcpip/tcpip.html]] | @IT の連載記事 :[[復習を始める、その前に。TCP/IPまるわかり:http://ascii.jp/elem/000/000/424/424788/]] | ASCII.jp の連載記事 :[[仮想ネットワークの実装で学ぶTCP/IP:http://codezine.jp/article/corner/260]] | CodeAine の連載記事 * 参考文献 [#r84b7ed3] :[[マスタリングTCP/IP 入門編 - 著者 発行日 出版社:]] | 教科書。