#norelated
#title(コンピュータネットワーク2の授業メモ)

[[FrontPage>FrontPage]] > [[Network2>./]] (Now)

------------------------------
#contents
------------------------------


* はじめに [#p621168b]
2年生時、秋学期、コンピュータネットワーク2の授業のメモ。

* 準備 [#a14b6e5b]
TCP/IP 下位層は、「プリ、デブ、ネル」だ!

:[[アプリケーション層>./Application]] | アプリケーション層


* 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 入門編 - 著者 発行日 出版社:]] | 教科書。

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Ads by Sitemix