ネットワークにおいてOSI参照モデルについての質問なのですが・・・
データリンク層と物理層はハードウェアが処理を行っているのですか??
どの層までがソフトウェアの部分なのでしょうか??
それとプロトコルはどのような言語でプログラミングしているのでしょうか?
C言語あたりでしょうか??
パケットはどのようにして生成しているのでしょうか?
データ分割と各層におけるヘッダの追加作業などはどのようにして行っているのですか?
ネットワークの基本的なことをかなり詳しく知りたいです。
教えていただければ幸いです。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答4件
0
ベストアンサー
現在のネットワークのほとんど全てはEthernetとTCP/IPが使われています。そして、TCP/IPはOSI参照モデルとは少しずれがあります。ましてやさらに上位層となるHTTPやSMTPなどでは、プロトコル毎に状況が変わってくるため、OSI参照モデルのどこまでカバーするのかが変わる場合があります。
つまり、OSI参照モデルのどの層がどうなっているか一般的に述べることは難しく、具体的なそれぞれのプロトコルについて述べることしかできないと言うことです。
Ethernetから見ていきましょう。Ethernetは物理層とデータリンク層あたりに相当します。パソコンの場合であれば、NIC自体(ハード)およびNICのコントローラチップ(ハード)とOSのNICドライバ(ソフト)によって処理されます。どこがどこまでやっているかはNICによると思われますが、LANケーブルを流れる具体的な電圧の変化を起こしたり、読み取ったりすることは少なくともハード側でしょう。電圧の変化から作られたフレームの処理(自分宛かの判断など)はソフト側と思われます。ただ、パソコンでは無いL2スイッチなどではほぼ全てハードで処理をしていると考えられます。なお、NICドライバはC/C++作られる場合が多いです。
TCP/IPになると、ほとんどの場合はOSで処理します。TCP/IPはネットワーク層、トランスポート層、セッション層が混ざった形です。こちらもC/C++で作られることが多いでしょう。こちらもL3スイッチなどでは高速化のためにある程度ハードで処理している場合がありますので、全てがソフトというわけではありません。TCP/IPは下位のIPと上位のTCP, UDP等に分けることができますが、規格として一緒に存在するため、L3スイッチなどIPしかみない場合を除いて、同じ所で処理されていると考えて問題ないと思います。
更に上位のHTTPやSMTPになると、それを提供するアプリケーションが処理しています。HTTPのサーバーであればApache HTTP Server、nginx、Apache Tomcat、node.jsのhttp-server、Pythonのhttp.server、RubyのPuma、PHPのビルトインウェブサーバーなど多くの実装が存在しますし、クライアント側はさらに各種ブラウザを初めとした多くの実装が存在します。具体的なプログラミング言語はアプリケーションによるため多岐にわたります。高速な動作を目的にしている場合は、C/C++などのコンパイル出来る言語が使われる場合がありますが、Webrickのようなスクリプト言語であるRubyだけ作られたものもあります。
OSがTCP/IPを提供し、各言語でTCP/IPをやり取りできるためのインタフェースやライブラリを初めから用意している場合がほとんどになります。ほとんどのプログラマにとっては、TCP/IPを扱うインタフェースやライブラリだけがわかっていればすむ形であり、それによって具体的なパケットをどのように作るかはOSの開発者が考えることになります。IPパケットからEthernetフレームがどのように作られ、どのような電気信号になるかはNICの開発者の関心事なります。こういった低レベルでの処理に関心があるのであればLinuxカーネルのソースコードが参考になると思います。
投稿2016/06/10 21:14
総合スコア21735
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
こんにちは。
データリンク層と物理層はハードウェアが処理を行っているのですか??
物理層は流石にハードウェアと思います。
データリンク層はものによると思いますが、最近はハードウェアが主流と思います。
どの層までがソフトウェアの部分なのでしょうか??
ネットワーク層以上はソフトウェアを使うケースが多いように思います。
L3スイッチと呼ばれる高速なルータ的な装置ではハードウェアを使っているようです。
L2スイッチ, L3スイッチ, ルータの違いが参考になります。
それとプロトコルはどのような言語でプログラミングしているのでしょうか?
C言語あたりでしょうか??
私も直接みたことはないですが、C言語が多いだろうと思います。
生産性よりギチギチに最適化することを優先したい部分ですので、C++よりはCの方が却って開発し易いはずです。アセンブラは使える場面が少なすぎます。その他の言語は速度とリソース的に問題外と思います。
ネットワークの基本的なことをかなり詳しく知りたいです。
教えていただければ幸いです。
本が数冊かけるような規模の話になります。ですので、QAサイトで質問しても回答は得られないでしょう。
学習するのに適切な書籍やサイトを質問した方がよいと思いますよ。
投稿2016/06/10 14:22
編集2016/06/10 14:23総合スコア23272
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
スイッチやルータの規格、仕様を調べましょう。おそらく「物に依る」という答えになると思います。
まあルータはL3スイッチに比べて専用ハードウェアを持っている傾向があるように思えます。とりあえずIPパケットレベルの処理ならばWindowsでもLinuxでも標準APIだけで難しくはないはず(ルーティング処理を自前で書くことは難しくない。もちろんOSPFへの対応とかは別として)、Ethernetフレームレベルは試したことないです(Vlanタグも同様です)。
投稿2016/06/10 13:27
総合スコア4830
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
かなり詳しい内容をここで聞くのは仕組み的に無理ですよ。
とりあえず、参考まで。
パケットを自前で生成してTCP接続する
投稿2016/06/10 13:15
退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。