- ベストアンサー
TCPヘッダのヘッダ長について
誰か知っていましたら御教示ください。 TCPヘッダのヘッダ長は,通常5または6を使用するものだと考えてました 7を使用するのは,どのような場合でしょうか? なぜこのような質問するかは,以下のことをおこなって専用制御装置とPCでTCP/IPの通信が出来なくなっためです。 (1)PC側のOSを winNT→2Kへ変えたところ専用制御装置との通信断となりました。 (2)イーサアナライザで解析したらPCからのSYN送信にてTCPヘッダにおけるヘッダ長がNTの時は,6(24バイト)なのにwin2Kでは,7(28バイト)になった (3)専用制御装置側はTCPヘッダのヘッダ長7は,エラーと判定し通信しない設計になってました (4)PCのアプリはwinsockの単なるソケット通信 そのため,TCPヘッダを書き換えることはできません (5)おそらくOSがwin2Kになったことが原因だと思います。 win2KでwinNTの時のように SYN送信でTCPヘッダのヘッダ長を6にする方法は,あるのでしょうか? 大変恐縮ですが誰か御回答ください。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
NTになくて2000にあるものとして、RFC 1323のTCP Window Scale Optionっていうのがあり、 これが3バイトのオプション(パディングして4byte)でSYNで送信されるらしいので、これが原因と思われます。 本来は制御装置側でこのオプションを無視すればそれで済むと思うんですが。 で、対処ですが、#3の方の回答にあるドキュメントにも記述がありますので、調べて見て下さい。 レジストリのTcpWindowSize,Tcp1323Optsあたりの変更とか、プログラムを修正可能ならsetsockopt()あたりで制御できそうな感じです。 まずはTcp1323Opts を 0 にして試してみては。 しかし、オプションって普通に使ってたんですね。 だいたいどこ見てもTCPヘッダのオプションとしか書いてなくて具体例まで書いてないから、普通に使われているとは思わなかった(^^;;
その他の回答 (5)
- ceita
- ベストアンサー率24% (304/1218)
#1です。 今自分のパケットを見たら確かに、 オプション指定がありました。 Etherealというパケットアナライザを専らしようしていますが、 オプションもデコードして意味がわかるようにしてくれます。 下手な市販ソフトより高機能ですよたぶん。
- 参考URL:
- http://www.ethereal.com/
- terra5
- ベストアンサー率34% (574/1662)
TCP オプションの種類、長さ、名前、内容 >http://support.microsoft.com/default.aspx?scid=kb;ja;224829 から判断して, 01010402 は、kind = 1 の No Operation(パディング用) と、 kind = 4 の TCP SACK permittedのようです。 # SACK (Selective ACK - RFC 2018) で、参考URLの解説によると、レジストリの SackOpts でしか無効に出来ないように書かれてますね。 設定変えてもNT4.0と同じ様になるだけで、エラー時のパフォーマンスが落ちるだけでしょうから, 諦めてレジストリをいじるしか無いように思いますが。
- khurata
- ベストアンサー率40% (54/134)
詳細について明確に回答する事は出来ないのですが、下記 Microsoftサイトで入手出来る資料(ホワイトペーパー)の3ページ目に、各 Windows製品における TCP/IPの機能比較表というのがあります。 http://www.microsoft.com/japan/windows2000/techinfo/howitworks/communications/networkbasics/tcpip_implement.asp これによりますと、NTと 2000の間にはかなりの機能差があり、これがヘッダ長に反映されている可能性があるのではないか、と考えられます。 また、ホワイトペーパーの付録には、レジストリエディタで設定可能な TCP/IPパラメータなどが掲載されており、問題解決の足がかりになるかも知れません。
- YanYas
- ベストアンサー率34% (26/75)
専用制御装置側の切り替えはできないのでしょうか? メーカーに問い合わせすれば解決策が見つかるのかもしれません。 もしくはWin2K対応版みたいな製品があるのかも。
- ceita
- ベストアンサー率24% (304/1218)
普通のTCPヘッダ長は0x5で20Byteだと思います。 それが、0x6や0x7ということは オプションがついてるということですよね。 そのオプションの内容によって どういった設定の変更が必要かが もしかしたらわかるかも知れません。 (わからないかもしれませんが。)
補足
他の方々も含めて早々の御回答ありがとうございます レジストリの修正は,内容が完全に理解できず 他の機能に影響することも考えると最後の手段だと考えます。 また TCPヘッダ長 7における内容がRFC1323に書いてある内容に当てはまらないような気がします。 できればだれか以下のoption内容教えてくれないでしょうか? Time = 20:51:26-314 Length = 62 MAC: Destination Address: 00-00-87-60-E9-AD MAC: (Hitachi) MAC: Source Address: 00-00-87-9A-B5-99 MAC: (Hitachi) MAC: Ethernet Type: 0800 MAC: (DOD Internet Protocol (IP)) IP: Version: 4, Header Length: 20, Total Length: 48 IP: Service Type: IP: Precedence: 0 IP: IP: Delay: 0 IP: Throughput: 0 IP: Reliablitiy: 0 IP: Low-cost: 0 IP: IP: Flagmentation Control: IP: Identification: 0x13DD IP: ( reserved ) bit: 0 IP: do not fragment bit: 1 IP: more fragments bit: 0 IP: Fragment Offset: 0 IP: IP: Time To Live: 128 (Seconds/Hops) IP: Protocol: 0x06(TCP) IP: Header Checksum: 25999 IP: Source Address = 192.168.0.10 IP: Destination Address = 192.168.0.1 TCP: Source Port: 1046 ( - ) TCP: Destination Port: 7000 (dos) TCP: Sequence Number: 875199157 TCP: Acknowledgement Number: 0 TCP: Header Length: 28 TCP: TCP: Code Bits TCP: URG: 0 TCP: ACK: 0 TCP: PSH: 0 TCP: RST: 0 TCP: SYN: 1 TCP: FIN: 0 TCP: TCP: Window: 16384 TCP: Checksum: 62325 TCP: Urgent Pointer: 0 TCP: TCP: Options: (8bytes) 0000( 0) 020405B4 01010402 ........ ← ここの内容 先頭4byteはkind 2 MSS 1460バイト。後半4バイトの意味は? またsetsockopt()で変更する場合,できれば使用方法を教えていただけないでしょうか? (MSDNをみているのですがどれなのかがよくわかりませんでした)