2012年2月12日

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

akisutesama が今朝から通信の勉強を始めたようです. 最初のうちは読書メモのようだったのですが, V 先輩との活発なやり取りが起き非常に盛り上がった感じになりました. エアリプライのつぶやきは拾えてない可能性があるので, 自由に追加してください.
10
akisute/Masashi Ono @akisutesama

TCP/IPの勉強をしている。データリンク層とかネットワーク層が全く理解できていなかったことがわかって来た。

2012-02-12 09:50:25
akisute/Masashi Ono @akisutesama

どうして電話屋がIPじゃなくて回線交換みたいな感じなのかが何となくわかってくる。俺らは上の層から下を見る。連中は下の層から上を見る。で、昔はネットワーク層がコネクション張る回線交換だったわけだ。コネクションレスなIPの扱い方は違うんだろうなと。

2012-02-12 09:52:55
akisute/Masashi Ono @akisutesama

プロトコルと、それをプログラム上でどう使うかはまるで別物だな。

2012-02-12 10:13:14
akisute/Masashi Ono @akisutesama

UNIX系OSの場合は言わずと知れたsys/socket.hだ。socket()関数の引数で、ネットワーク層(AF_INET)とトランスポート層(SOCK_STREAM)を指定するんだな。ソケット自体はUNIXの概念だと聞いていたが、TCP/IPのインターフェースでもあるのか。

2012-02-12 10:20:25
akisute/Masashi Ono @akisutesama

UDPだとsocket()の第二引数がSOCK_DGRAMとかになるわけだな。なるほど。つまりsocketがTCP/IPを使うための上位インターフェースみたいな感じか。ふーむ面白い。

2012-02-12 10:22:21
akisute/Masashi Ono @akisutesama

いままでsocketが一番下だと思っていたのでかなりオバカさんだったんだなぁと

2012-02-12 10:22:35
akisute/Masashi Ono @akisutesama

要するにIPアドレス入れればつながるだろボケみたいな脳だったのだが、よく考えたらその「IPアドレスを入れればネットワーク層での接続が保証される」実装をしなくてもすむようにsocket()がインターフェースを提供してくれていただけなんだな。じゃあそれより下の実装ってどうやってるんだ

2012-02-12 10:23:33
akisute/Masashi Ono @akisutesama

デバイスドライバクラスになってくるのかな、それより下は。うへー。UNIXのsys/socket.hとか読めばいいのか。死んでも読みたくないので今は勘弁してくれ。

2012-02-12 10:23:58
akisute/Masashi Ono @akisutesama

しかし恐ろしく勉強になった。IPアドレスを入れればとりあえずつながる脳はすでに上位レイヤーすぎる考えだったんだと。それより下がかすかながらも見えてきたのは大きな収穫だな。

2012-02-12 10:25:09
akisute/Masashi Ono @akisutesama

だから本気でOSが提供しているもの以外で通信しようと思ったら、ネットワークカードのデバイスドライバを書くレベル。デバドラの中では直接生のビットを触ってIPを実装するみたいな感じになる、のか?よくわからんが、まぁそんなイメージ。すげえな。下のレイヤーは凄まじい。

2012-02-12 10:26:21
Shinji Kono @shinji_kono

@akisutesama そこには長い物語が… arp とかroutingとか…

2012-02-12 10:27:49
AKIRA_TRYSTAR @AKIRA_TRYSTAR

@akisutesama IPアドレスの下は、MACアドレスを参照してますよ〜 

2012-02-12 10:28:15
akisute/Masashi Ono @akisutesama

またどうしてIPv6への対応が面倒かもわかってきたぞ。UNIXが提供しているsocketインターフェース、sockaddr_inだな、こいつがIPv4とv6で当然指定が違うわけだ。しかもこのレベルのsocket触るコードはアプリケーションレイヤにも時々混ざる。

2012-02-12 10:28:26
akisute/Masashi Ono @akisutesama

最悪、生でsocket触ってる通信アプリは全滅ってわけだ。こいつより上位があればまだいいのかもしれないが、IPv4アドレスなのかv6アドレスなのかを自動的に判断して適切なネットワーク層のプロトコルを選択する通信ライブラリが標準的に存在しないといけない、と。はぁーなるほど。

2012-02-12 10:29:37
akisute/Masashi Ono @akisutesama

根っこが深いんだなーIPv6問題ってのは。超勉強になった。っていうかこんなの知らないでネットコード書いてるド三流プログラマですすみませんすみません

2012-02-12 10:30:16
sakamoto.kazuki @splhack

@akisutesama そこまでいくとethernetとかWiFiの仕組み(物理層)に入ってきますね

2012-02-12 10:33:16
akisute/Masashi Ono @akisutesama

@splhack ほへー。データリンク層ってやつですよね。てかsplhackさんはなんでそんな詳しいんスカ><

2012-02-12 10:34:37
sakamoto.kazuki @splhack

@akisutesama NetBSDのnetwork device driver移植、NetBSDのTCP/IP stackをITRONに移植とかしましたからー

2012-02-12 10:36:53
tomo🐧@learning @cocoatomo

@akisutesama 一番下は物理層なので, プログラミングの領域ではなくなってますね. http://t.co/pDZgC9XS 自分は全く詳しくないですが, 通信を伴うものを作ってる V 先輩に聞いてみると勉強になりそうです.

2012-02-12 10:37:47
akisute/Masashi Ono @akisutesama

@cocoatomo ですなー。もうコレより下になるとvの人に聞いてみるのがよさそうっすね。さっぱりわからん>< でもネットワーク層レベルぐらいから上は理解できてないとダメだなという印象が強くなりました。UNIXが提供している基本のインターフェースがその層なので。

2012-02-12 10:39:55
sakamoto.kazuki @splhack

@akisutesama 1からデバイスドライバ書けて、かつゲームエンジンの実装一部担当でした :-)

2012-02-12 10:40:29
akisute/Masashi Ono @akisutesama

@splhack ダブル神とお呼びさせてください

2012-02-12 10:40:46
akisute/Masashi Ono @akisutesama

身近にダブル神がいたこの衝撃

2012-02-12 10:41:02
tomo🐧@learning @cocoatomo

@akisutesama 後はまだ層の区別が自分ができてないので, 理解しときたいなーとこんな本 http://t.co/SvIbVUrb を少しずつ読んでます. ソースコード載ってるし, 図も分かりやすいので良い本っぽいです.ソースコードが一番理解できる, ってノリの人向けです

2012-02-12 10:46:40
拡大
akisute/Masashi Ono @akisutesama

なんかHTTPサーバの糞ド単純なやつぐらいなら普通に書けそうな気がしてきたぞ。socket用意して適当なポートで待受して、接続があったらconnect()してTCP開いてHTTPヘッダと適当な本文を突き返してやればいいんだろう?

2012-02-12 10:47:42
残りを読む(148)

コメント

tomo🐧@learning @cocoatomo 2012年2月12日
末尾にちょこっと追加しました.
0
neji ꙮ @drillbits 2012年2月12日
ホイットニー関係ないwww
0
トランスヒューマン 5G Ultra(技適取得済み) @tri_man 2012年2月13日
3G回線はレイテンシーが大変な事になるので、使い方は注意したほうがいいっす。
0