- - PR -
localhostへのtelnetdへ接続時のパケットが細切れ
1
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-05-23 00:52
いつもお世話になっております。
Red Hat Enterprise Linux ASの環境下で開発をしています。 Telnet通信を行うモジュールを利用しているので、 in.telnetdをxinetd下で動かして localhostをサーバシミュレータにしているのですが、 localhostで通信を行うとクライアントモジュールが sendしたコマンドが1パケット1文字ずつエコーされてしまい 非常に都合が悪いです(クライアント側がreceiveを 大量に繰り返さなければならない)。 これをなんとかsendしたコマンドを1パケットで返させるか、 もしくは少ないパケット数で返却させることはできませんでしょうか? ※telnetコマンドでset echo onとかmode lineとか試しましたが解決せず… ※接続確率時に、DO ECHO->WONT ECHO/WILL ECHO->DONT ECHOとやり取りされてます ※ログ等の開示できないこと予めお詫びします | ||||||||||||
|
投稿日時: 2007-05-23 07:46
追記です。
サーバ側ポートは23を使用しています。 | ||||||||||||
|
投稿日時: 2007-05-23 09:32
telnetdはNagleアルゴリズムを無効にしているはずです。
http://www.kt.rim.or.jp/~ksk/sock-faq/unix-socket-faq-ja-2.html#ss2.11 SOCK_STREAMなソケットにパケットなんて概念はありませんし、 recv()は読み出せるデータがあればブロックせずに復帰します。 相手が複数回に分けてsend()したものをまとめて受信する場合もあれば、 1回でsend()されたものを複数回に分けて受信する場合もあります。
試しにrecv()を呼ぶ前にsleep(1)などの待機を入れてみて下さい。 複数のデータをまとめてrecv()できるようになると思います。 これはNagleアルゴリズムの逆みたいなものです。
少ないパケット数で返させたいのは何故ですか? ネットワーク効率のためですよね。 でも、telnetからECHOで返ってくるのは、 通常はキーボードからユーザーが入力した文字です。 人間はネットワークの帯域を食い潰すほど速く入力できません。 | ||||||||||||
|
投稿日時: 2007-05-23 09:50
おはようございます。
in.telnetdはあくまでシミュレータの位置づけで、実環境ではlinemodeでの処理を行うようなプログラムを動かすということでしょうか? telnetd(8)によれば、
とあります。 デフォルトでは、linemodeは使えない可能性がありそうです。その場合はtelnetdパッケージをrebuildしてみる手はあるかもしれません。 [ メッセージ編集済み 編集者: angel 編集日時 2007-05-23 09:58 ] | ||||||||||||
|
投稿日時: 2007-05-24 07:36
あしゅさん、angelさん、レスありがとうございます。
返答が遅くて申し訳ないです。 利用していると言うこちらの書き方が不明瞭で申し訳なかったのですが、 私どもの状況を整理させていただきますと、 [A:私達のモジュール]−(利用)−[B:telnetクライアント]…(telnet)…[C:他社さんの製品] という状況で、Bは半製品で改修不可、Cは未入手のためtelnetdで シミュレートしていると言う状態です。 (※Cへの疎通は行っているので、Cがtelnetdのように細切れの応答を しないことは確認しています。) なので、私達が介入できるポイントとしては 1.Aから渡してBが送信するtelnetの電文 2.telnetサーバデーモンの設定または入れ替え のみで、かつインフラ関連を変更するのは手続き面で手間がかかる状況です。
実はtelnetクライアント(B)の都合です。 receiveの最大回数を極大まで増加させると別の部分で不都合が出るので できれば実際の対向(C)へつなぐのに十分な値と同値を使用したいと…。 開発環境なので今のところネットワーク効率は あまり考えなくてもいい状態です。
あいまいな記憶で申し訳ないんですが、 ユーザが入力した文字をECHOしない状態ってありませんでしたっけ? それが理想なんです。 Nagleアルゴリズムについては勉強になりました。
確かにtelnetdのマニュアルを見て嫌な感じは受けていました…。 電文での解決(1)の可能性をもう少し探って、無理であれば インフラ担当者に相談してみたいと思います。 |
1