
akisutesama が通信に興味を持たれたようです

TCP/IPの勉強をしている。データリンク層とかネットワーク層が全く理解できていなかったことがわかって来た。
2012-02-12 09:50:25
どうして電話屋がIPじゃなくて回線交換みたいな感じなのかが何となくわかってくる。俺らは上の層から下を見る。連中は下の層から上を見る。で、昔はネットワーク層がコネクション張る回線交換だったわけだ。コネクションレスなIPの扱い方は違うんだろうなと。
2012-02-12 09:52:55
UNIX系OSの場合は言わずと知れたsys/socket.hだ。socket()関数の引数で、ネットワーク層(AF_INET)とトランスポート層(SOCK_STREAM)を指定するんだな。ソケット自体はUNIXの概念だと聞いていたが、TCP/IPのインターフェースでもあるのか。
2012-02-12 10:20:25
UDPだとsocket()の第二引数がSOCK_DGRAMとかになるわけだな。なるほど。つまりsocketがTCP/IPを使うための上位インターフェースみたいな感じか。ふーむ面白い。
2012-02-12 10:22:21
要するにIPアドレス入れればつながるだろボケみたいな脳だったのだが、よく考えたらその「IPアドレスを入れればネットワーク層での接続が保証される」実装をしなくてもすむようにsocket()がインターフェースを提供してくれていただけなんだな。じゃあそれより下の実装ってどうやってるんだ
2012-02-12 10:23:33
デバイスドライバクラスになってくるのかな、それより下は。うへー。UNIXのsys/socket.hとか読めばいいのか。死んでも読みたくないので今は勘弁してくれ。
2012-02-12 10:23:58
しかし恐ろしく勉強になった。IPアドレスを入れればとりあえずつながる脳はすでに上位レイヤーすぎる考えだったんだと。それより下がかすかながらも見えてきたのは大きな収穫だな。
2012-02-12 10:25:09
だから本気でOSが提供しているもの以外で通信しようと思ったら、ネットワークカードのデバイスドライバを書くレベル。デバドラの中では直接生のビットを触ってIPを実装するみたいな感じになる、のか?よくわからんが、まぁそんなイメージ。すげえな。下のレイヤーは凄まじい。
2012-02-12 10:26:21
またどうしてIPv6への対応が面倒かもわかってきたぞ。UNIXが提供しているsocketインターフェース、sockaddr_inだな、こいつがIPv4とv6で当然指定が違うわけだ。しかもこのレベルのsocket触るコードはアプリケーションレイヤにも時々混ざる。
2012-02-12 10:28:26
最悪、生でsocket触ってる通信アプリは全滅ってわけだ。こいつより上位があればまだいいのかもしれないが、IPv4アドレスなのかv6アドレスなのかを自動的に判断して適切なネットワーク層のプロトコルを選択する通信ライブラリが標準的に存在しないといけない、と。はぁーなるほど。
2012-02-12 10:29:37
根っこが深いんだなーIPv6問題ってのは。超勉強になった。っていうかこんなの知らないでネットコード書いてるド三流プログラマですすみませんすみません
2012-02-12 10:30:16
@splhack ほへー。データリンク層ってやつですよね。てかsplhackさんはなんでそんな詳しいんスカ><
2012-02-12 10:34:37
@akisutesama NetBSDのnetwork device driver移植、NetBSDのTCP/IP stackをITRONに移植とかしましたからー
2012-02-12 10:36:53
@akisutesama 一番下は物理層なので, プログラミングの領域ではなくなってますね. http://t.co/pDZgC9XS 自分は全く詳しくないですが, 通信を伴うものを作ってる V 先輩に聞いてみると勉強になりそうです.
2012-02-12 10:37:47
@cocoatomo ですなー。もうコレより下になるとvの人に聞いてみるのがよさそうっすね。さっぱりわからん>< でもネットワーク層レベルぐらいから上は理解できてないとダメだなという印象が強くなりました。UNIXが提供している基本のインターフェースがその層なので。
2012-02-12 10:39:55
@akisutesama 後はまだ層の区別が自分ができてないので, 理解しときたいなーとこんな本 http://t.co/SvIbVUrb を少しずつ読んでます. ソースコード載ってるし, 図も分かりやすいので良い本っぽいです.ソースコードが一番理解できる, ってノリの人向けです
2012-02-12 10:46:40
なんかHTTPサーバの糞ド単純なやつぐらいなら普通に書けそうな気がしてきたぞ。socket用意して適当なポートで待受して、接続があったらconnect()してTCP開いてHTTPヘッダと適当な本文を突き返してやればいいんだろう?
2012-02-12 10:47:42