オプションがなければクライアントとしてサーバにコマンドを送ります。社長:これは、SMTPプロトコル互換なんですかね...開発:先人の知恵に従うということで。言いますか、SMTPでもFTPでもNNTPでもPOPでも、古典的なインターネットのアプリケーション・プロトコルはみんなこれ流ですよね。HTTPはコネクションレスなのでちょっと違いますが踏襲しているわけです。系統が違うと言えばTelnetくらいですね。基盤:マルチコアの同一ホスト上で1リクエスト750マイクロ秒もかかるんですか?開発:最近はホストのiMacもそれなりに仕事てますしね。最短だと400マイクロ秒は切ります。開発:そもそもログをコンソールにだしているので時間がかかりますから、これを時間に影響の無いのだけにしぼれば、250マイクロ秒くらいにはなります。社長:コマンドはどのようなものがあるのですか?開発:今の所HELOコマンドだけです。社長:さて、それでは焦眉のフランクフルトを呼んでみましょう。開発:750ミリ秒と出ました。基盤:ローカルホストより2000倍遅いですね。社長:きっちり250msの3回分ですか。開発:サーバのオープニングご挨拶を待たずにコマンドを送れば500msにはなると思います。基盤:SYNパケットにリクエストデータが載せられたらいいのにw社長:でもTCPが開通した後は250msで帰ってくるのでは。待って応答をACKに乗せてくれませんかね。コマンドの応答として250msなら、許容できると思います。開発:双方の現状をバックグランドで定期的に知らせ合っておけば、いざ人間がコマンドを送るという時に送る情報も少なくて済みますね。毎回応答を待つ必要も無いですね。基盤:SMTPじゃなくてFTPにしませんか?開発:構いませんよ。いうか、太古にはFTPコネクションにSMTPコマンドを同居させてたりした時代もあるようです。社長:putとgetコマンドを所望。NNTP的にPOSTでも。開発:別チャネルコネクションの問題は置いておきたいので、ダミーでUPLOADとDOWNLOADみたいなコマンドでも作りましょうか。社長:あと、やってみるまでも無いですがリモートでのファイルの超速コピーを実現するCOPYコマンドとか(^-^)開発:では刹那的に、100MBのデータをサーバに向けて送信するコマンド、UPLDを作りました。基盤:8GB/s出ますね。開発:そして問題のフランクフルト...開発:2.4MB/sでした。基盤:予想通りですね。開発:だいぶこま切れになって届いています。受信一回平均7152バイト。社長:ファイルのsyncコマンドを作りましょうよ。開発:でもちょっと休みましょう。*基盤:ところで、ポート番号ってなんなんですかね。アプリケーションプロトコルごとにポート番号を代えるより、一つのポートに入ってからどのプロトコルで話すかネゴっても良いと思うのですが。開発:まあHTTPのUpgradeとかはそれですよね。いうかそもそも初期のプロトコルにそういうプロトコルを切り替える変態コマンドを持ってるのがありましたよ。なんでしたっけ?社長:TCPなら性能上問題ないでしょうけど、UDPだとネゴった結果の状態が保持が難しいし、一つのポートに到着したパケットを誰が使うか、応用層のプログラムで振り分けたら重いんじないですかね。みたいなルータも、ただのソフトですよね。普通OSの中にあるでしょうけど。そもそもさっきの例みたいに、ソフトでやったって8GB/s程度の中継はできるみたいですから、UDPの振り分けだってユーザのアプリでやっても問題ないんじゃないでしょうか?とりあえずDeleGateのudprelayをSOCKSで使うとか。実際に使えるネットのバンド幅が100MB/sでしかないとすると、ユーザ空間のプログラムで中継をやっても楽勝っぽいですね。優先度が低くされて受信をこぼしちゃうことは増えるかもですが。社長:そういえば、カーネルの中にあると思われるUDPパケットのバッファっの量って、ユーザが設定できないんでしょうかね。ちっちゃい臭い気がするんですが。受信脳力が他のアプリの動作に影響を受けるというか、緩衝能力が低い感じ。開発:まあ1ギガビット、約100MB/sのネットなら、バッファがわずか100MBあれば、1秒間アプリでの処理が途絶えても持ちこたえる計算ですね。基盤:それでポート番号ですが、ネットワークが作られ始めたころのもろもろの処理能力とかで、処理を軽くしたかったとか、機能ごとにきっちり縦割りしたい文化とか、硬直的な機能割当てとか、ユーザにはネットワークに手を触れさせない前提とか、とにかくなんか時代錯誤な感じもするんです。開発:まあ、ポート番号ていらなくね?てすると、IPアドレスだってほとんどはいらなくね?て感じにはなると思いますけどね。アプリケーションレベルで識別する位置な名前だけあれば。末端で相手のアドレスをレゾルブする必要があるのか、とても疑問です。アプリケーションレベルで、プロキシサーバみたいのにやらせておけば良いと思うんです。社長:番号での識別子には、アクセス制御の面の利点があると思います。IPアドレスやポート番号ならハードウェアでフィルタリングできる。このポートはこのサービスに使うって確定していれば、サービスへのアクセス制御が高速にできる。ネットワークのモニタリングにも都合がよいですよね。開発:やはりシンプルな処理は、専用ハードウェアでやれば、汎用CPUで実行するソフトウェアより2桁以上は高速にできます。私自身もソフトで300マイクロ秒かかる処理が、FPGAで3マイクロ秒でできちゃうとか、感動しました。基盤:ただ、入り口は一つにして、そこで共通の認証なりアクセス制限をして、その先に進めたほうが、管理も実装も簡単になると思うんですよね。プロトコルごとにてんでにセッションの認証サブプロトコルを作るとか意味わからないです。開発:そういえば、UnixのプロセスIDとかもう、まるでユニークIDじゃなくなってますよね。1ミリ秒に1プロセス生成したら、1分で6万ですから、あっというまに一回りしてしまう。実際に普通にやるわけですし。コメントをキャンセルメールアドレスが公開されることはありません。*サイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。2020年10月17日outrage#。