mones2
[Mona PJ Wiki:mones2/22.ネットワークサーバ/03.uIPのサーバーを作ろう簡単なRead] NetServerの深遠部でのReadインターフェースの実装がすんだ。(Windows上) server->SetListen(9000); // ポート9000をListen Buffer* buffer = server->Read(9000); // ポー…
uIPが正常動作し、MonaがWebサーバになりました。 涙が出そうなくらいうれしいですね。 1.MonaでuIPを起動します。 2.ブラウザからアクセスします 3.Monaからコンテンツが返ってきます 4.Live HTTP headersで見てみると HTTP/1.x 200 OK Server: Mona OS 0.3…
Monaに無理やり移植したuIPを実行しても、動いていないように見える。 症状は Windows側からのpingに反応しない Windows側からのwgetに反応しない こういうときのデバッグの際に、どうやって犯人を追い詰めるかの過程を書いてみると、だめな点が分かったり他…
uip.cのuip_tcpchksumの呼び出しをコメントアウトすると動く。 checksumがincorrect。 chksumは uip_arch.cにあって、正式にはuipの一部ではなくてサンプル扱い。 これを利用したのがまずかったか? うーん?分からん・・・ Etherealで確かめたところ、やはり…
id:higepon:20051020:1129823076で紹介したuIP。 uIPはとてもコンパクトなネットワークプロトコルスタック実装です。 uIPは環境にあまり依存せず、移植を意識した作りになっています。 更にサポートされていない環境への移植ドキュメント(これ)まで用意され…
mones2の実装をいろいろ進めていましたが2つの狙いがありました。 実装を通してのドライバインターフェースの設計の種とする ネットワークの知識の習得 「実装を通してのドライバインターフェースの設計の種とする」 狙い NICドライバの最小インターフェース…
uipとFreeBSDのプロトコルスタックどちらもある程度、移植実績があるようですが、どれくらい規模や移植の手間が違うだろうか。 自分でいろいろ調べているのですが、この辺りに詳しい方のご意見とかうかがえるととても助かります。 どれくらいOSの機能に依存…
SYNフラグを立ててTCP送信してみようと試みる。 手順としては あて先IPアドレスを適当に決める ARPでIPアドレス⇒MACアドレス変換 Etherフレームを整える IPヘッダを用意 TCPヘッダを用意 相手が分かっているので1, 2 あたりは省略。 でやってみたらうまく行…
とりあえずTCPのヘッダを表示するプログラムを作ってみました。 出力はこんな感じ。 srcport=5632 dstport=25606 seqnum=448123589 acknum=1488452443 reserved=0 headlen=5 urg=0 ack=1 psh=1 rst=0 syn=0 fin=0 wndsize=20509
TCP(Transmission Control Protocol)の勉強を始めました。 ↓の本を軽く読んで見ましたが、一回では頭に入りませんでしたw。マスタリングTCP/IP 応用編作者: Philip Miller,苅田幸雄出版社/メーカー: オーム社発売日: 1998/05/01メディア: 単行本購入: 7人 …
あっさりとできました。 コードは以前のMona版とほぼ同じなので割愛。 WinPcap最高!
昨日の受信に引き続いて、パケットの送信をしてみました。 結果から言うと簡単でした。 pcap_sendpacket(handle, (byte*)(&reply), 100); のように、引数にアダプタのハンドル、パケット、パケットサイズを渡してやれば送信終了です。 これを使用して存在し…
Monaのネットワーク実装に、なぜWinPcapが関係あるのか?と思われた方もいるかもしれません。 がんばってWinPcapの使い方を学んだのには理由があります。 それは、Mona用のプロトコルスタックの開発のほとんどをWindows上で行ってしまおうという意図があるか…
id:higepon:20051206:1133877107の続きです。WinPcapでは2つの方法でパケットを受信できます。 1つ目の方法はパケット受信ハンドラを登録する方法。 2つ目の方法はパケットを能動的にループで受信する方法です。 今回は今後のMonaでの実装を考えて後者の方法…
id:Hossy:20051130で知ったWinPcapを試してみました。 WinPcap, The Packet Capture and Network Monitoring Library for Windows http://www.winpcap.org/ WinPcapとは? WindowsでEtherフレームの送受信ができるライブラリ。(だと思う) インストール Win…
一方通行メッセンジャーキタコレ! Windows側で ruby udp.rb # メッセージ送信 Monaで受信 祭りですよ祭り。ヽ(;´Д`)ノ
MonaでのUDPテストに、Windows側からパケット送信する必要が出てきました。 C++、Perl、Java、C#と選択肢はいろいろあるのですがここは、やはりRubyでしょう。 最近Geekの間では、こっそりRubyを勉強するのが流行っているようですし(;´Д`) とても簡単です…
IPが分かっていれば、特に難しいところはなさそうです。 ネットワークレイヤ的には イーサーネットタイプ 0x800 によりIP IPプロトコル 17 により UDP UDPのポート番号を元にアプリケーションを特定 アプリケーション特定のプロトコルでほげほげ という感じ…
ICMP応答のまとめ Echo要求のICMPHeader->data部に、id, sequence が入っている Echo応答する場合は、これとまったく同一のものを、Headerに格納して送信する これで、要求に対する応答のマッチングが行われる。 べた書きで、書いていたコードをリファクタリ…
MonaがWindowsのpingに返事するようになりました。 アドバイスを下さった方どうもありがとうございました。 pingに返事をするようになった瞬間は、Monaで初めてGUIが動いたり、文字が出たりと同じくらい感動しました。 今後は、pingに答える→ICMP応答できる→…
ICMP応答がうまくいかないのはなぜ? 今のところ二つの疑惑が id/sequence問題 id:fiberfiberさんによる指摘。 #素人ですが、rfc792をちょっと見てみました。 IdentifierとSequence numberはEcho requestのものを正しくコピーしてますか? Identifier=192.1…
WindowsからのICMPエコー要求(ping)に対して、MonaがICMPエコー応答を返すようになった。 でも・・・。Windows側の ping はパケットロス100%とおっしゃる。 Etherealでパケットを見ていると、きちんと応答していて特におかしな点は見られない。 うーんなんで…
昨日ARPのバグは直ったので、Windows側でARPがキャッシュされるようになった Etherealのパケットダンプとにらめっこして二つのバグを修正した。 関係ないIPパケットにICMP応答してた(ぉ パケットサイズを0と誤って指定していた これをやったところEthereal…
Etherealで解析したところ3点おかしい Ether Frame check sequenceがおかしい おかしいが悪さはしていないようなのであとまわし ARPのsrc mac addressが0になっている MessageInfo.strのコピーバグだった。monapi/Message.cppを修正しました。 ARPのsrc ip a…
ICMPエコー応答を返すコードを実装してみた。 ICMPヘッダをごにょごにょ作って、それをIPヘッダのdata部にセットして送る感じ。 checkSumのロジックまでは追わず、id:Yamamiさんのロジックをそのまま拝借。 Monaを起動して、Windows側から ping を打ってみて…
id:obacheさん、えびさん、id:desutaiさんからコメントを頂きました。コメントいただいたものをまとめると デフォルトゲートウェイがすべてのルーティングを知っているとは限らない(NIC2枚差しで内外とか) PCもルーティングしないだけでルーターだ(ルーテ…
ルーティング解決とは?実装編 - Higepon’s blogの続きです。 えびさんから貴重なコメントを頂きました。 えび 『はじめまして。いつもROMさせてもらってました。 あえてはじめは簡略化しているのだとは思いますが 同一サブネットじゃなかった場合のあて先は…
id:obacheさんからコメントを頂きました。 # obache 『いやいや、ネットワーク上にルータは一つとは限らないわけで。たとえば社外へのルータと社内の別部署へのルータとか。で、宛先のIPアドレスに応じて、自分の持ってるルーティングテーブルに応じて、どの…
ルーティング解決とは? - Higepon’s blogの続き。 まずはストレートに実装を dword getIpRoute(Config& config, dword destIp) { dword destSubnet = destIp & config.getSubnetAddress(); dword mySubnet = config.getIpAddress() & config.getSubnetAddre…
何だか連載チックになってきましたが、次はICMP応答だ - Higepon’s blogの続きです。 ping に応答するにはIPパケット送信が必須で、パケット送信の手順は以下の通りだ。というところで終わっていました。 ルーティング解決 ARPによるMACアドレス取得 ICMPヘ…