[#48450] 1.8.7と1.9.2の挙動の違いについて — "Jun'ya Shimoda" <jun-shimo@...>

下田です。

13 messages 2011/10/09

[ruby-list:48481] Re: net/https のproxy経由接続シーケンスについて

From: Hiroki NAJIMA <h.najima@...>
Date: 2011-10-17 14:54:23 UTC
List: ruby-list #48481
春日さん

名島です。
疑問が解消したようでなによりです。

> このFirewallは、何も設定しなくても今回の短い(CONNECT部分だけの)TCP fragmentを破棄するので、
> もしかすると、短すぎるtcp fragmentは攻撃と見なして廃棄しているのかと想像していました。
それは怖いFirewallですね。
パケットの分割はどのタイミングで起こってもおかしくなく、
これ以外にも影響が出ているかもしれませんので、きちんと問題を調べることをお勧めします。

> Rubyの、CONNECTとHost:がtcp fragmentで送信されるというのは、
> 他(例えばブラウザ)では見られなかったので、意図した動作では無いのでは?
> と考えたのですが、名島さんの指摘のように、アプリ層では意識できないので
> は、仕方ないですね。
はい。socketを用いてTCP通信している以上、どうしようもないです。

特に問題を解決したいということではないようですが、
バッファに送信電文をためて一気にwriteすれば、パケット分割されにくくはなります。

手元の環境では、実行プログラムコードも、Rubyのバイナリも同じという条件で、
Windows 7 SP1(x64)では分割されず、Windows XP SP3(x86)では分割されました。
さらにhttp.rbを書き換え、CONNECTとHost:を1回のwriteで書き込むようにすると、
XPでも分割されないようになりました。
そういうもんです。ご参考まで。

-- 2011-10-17
Hiroki NAJIMA aka Nazy

(2011/10/17 8:58), KASUGA Toru (春日 玄) wrote:
> 名島様
> 
> 春日です。
> 
> 以下、回答ありがとうございました。
> 
> 質問の意図は、Rubyの挙動の確認です。このFirewallは、何も設定しなくても今回の短い(CONNECT部分だけの)TCP fragmentを破棄するので、もしかすると、短すぎるtcp fragmentは攻撃と見なして廃棄しているのかと想像 
> していました。
> 
> しかし、おっしゃるとおり、TCPに対する私の知識不足です。すみません。
> 
> Rubyの、CONNECTとHost:がtcp fragmentで送信されるというのは、他(例えばブラウザ)では見られなかったので、意図した動作では無いのでは? と考えたのですが、名島さんの指摘のように、アプリ層では意識できないので 
> は、仕方ないですね。
> 
> ありがとうございました。
> 
> From: 名島太樹 <h.najima@gmail.com>
> Subject: [ruby-list:48468] Re: net/https のproxy経由接続シーケンスについて
> Date: Fri, 14 Oct 2011 17:25:45 +0900
> Message-ID: <CAKSUK0h5pjxLp5vL_gcXKi_Sj-y-y7=NMvzuBg3gH7irBPnz4g@mail.gmail.com>
> 
>> よくこのメールの目的が分からないのですが、問題の解決が目的ならば、
>> 「Firewallそのものか、Firewallのフィルタ定義がバグってるので、そちらを直してください。」となります。
>>
>> 伝送路(ここではFirewall)が明らかにおかしいことが分かってるだから、そちらを対処すれば万事解決です。
>>
>> また、net::httpsの該当部分は、極めてまっとうです。
>>
>> たぶんTCP通信を誤解しているようですが、TCPはストリーム通信なのでパケットの切れ目はプログラム側で意識してはなりませんし、出来ません。
>> パケットへの分割は、Rubyよりも下のレイヤーでやってます。
> 
> -----------------------------------------
> 春日 玄 (KASUGA Toru)
> E-mail : kasuga.toru@jp.fujitsu.com

In This Thread