質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.02%
TCP

TCP(Transmission Control Protocol)とは、トランスポート層のプロトコルで、コネクション型のデータサービスです。

Wireshark

Wireshark(ワイヤシャーク)は、ネットワーク・アナライザソフトウェアです。 IP、DHCPなど800以上のプロトコルを解析できる機能があり、 Windows、Linux、BSD、Mac OS Xなどで利用が可能です。

Windows Server

Windows Serverとは、Microsoft社のサーバ用オペレーティングシステムの総称です。 企業内ネットワークなどで利用されるサーバ機へ導入することを想定して開発されているため高い安定性があり、 管理機能を提供するソフトウェアが多く含まれています。

Azure

Azureは、マイクロソフトのクラウド プラットフォームで、旧称は Windows Azureです。PaaSとIaaSを組み合わせることで、 コンピューティング・ストレージ・データ・ネットワーキング・アプリケーションなど多くの機能を持ちます。

Q&A

受付中

Windows Server 2019でのTcpKeepAliveの設定方法

crybaby27
crybaby27

総合スコア0

TCP

TCP(Transmission Control Protocol)とは、トランスポート層のプロトコルで、コネクション型のデータサービスです。

Wireshark

Wireshark(ワイヤシャーク)は、ネットワーク・アナライザソフトウェアです。 IP、DHCPなど800以上のプロトコルを解析できる機能があり、 Windows、Linux、BSD、Mac OS Xなどで利用が可能です。

Windows Server

Windows Serverとは、Microsoft社のサーバ用オペレーティングシステムの総称です。 企業内ネットワークなどで利用されるサーバ機へ導入することを想定して開発されているため高い安定性があり、 管理機能を提供するソフトウェアが多く含まれています。

Azure

Azureは、マイクロソフトのクラウド プラットフォームで、旧称は Windows Azureです。PaaSとIaaSを組み合わせることで、 コンピューティング・ストレージ・データ・ネットワーキング・アプリケーションなど多くの機能を持ちます。

1回答

0グッド

0クリップ

562閲覧

投稿2022/10/03 14:09

前提

Windows Server 2019 (Amazon EC2) 上のスクリプトから
Azure 上のWebサーバに置いてある Web API に対して HTTPリクエストを投げているのですが、
今年の8月上旬ころから Connection Reset が返されるようになってしまいました。

当該APIは処理に40~50分程度時間がかかるのですが、APIがレスポンスを返す前に
Azure Load BalancerのTCPアイドルタイムアウト(最小4分~最大30分) にひっかかり
Connection Reset を返しているようです。

https://learn.microsoft.com/ja-jp/azure/load-balancer/load-balancer-tcp-reset

そもそもAPIの処理に時間かかりすぎなので API側の処理時間の見直しは必要ですが、
並行して Connection Reset を回避するため
上記URLにガイドのある通り、TCP keep-alive を使って対応したいと考えています。

以下ドキュメントによると、Windowsでは以下レジストリ
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Service\TCPIP\Parameters

KeepAliveTime という項目を設定すれば
すべてのTCP通信に KeepAlive が適用されるということだったので

KeepAliveTime REG_DWORD 0x0002bf20 (180000)

という値を仕込みました。最後のデータの送受信が行われてから、
KeepAlive パケットを送信するまでの時間として180秒を設定するという意図です。

https://social.technet.microsoft.com/Forums/ja-JP/30897df3-dc52-4c92-808b-ac01cc6936ee/tcp?forum=Wcsupportja

が、Wiresharkで確認する限り 180秒経ってもパケットを送信してないように見えます。
設定する場所が違うのでしょうか?あるいは、設定内容が間違っている?

実現したいこと

APIの呼び元である Windows Server 2019 側に TCP KeepAlive を仕込みたい。
KeepAliveTime を180秒とすることで、通信して180秒 音沙汰がなければ
KeepAlive パケットを投げるように仕込みたい。

発生している問題・エラーメッセージ

Windows Server 2019 にWiresharkをインストール、
Wireshark で当該ロードバランサとの通信ログを確認した。
15分かかる処理を呼び出したが、初回のTCP通信後180秒を経過しても
KeepAlive パケットを投げているログが確認できなかった。

該当のソースコード

設定したレジストリのキーと値

Registry

1HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Service\TCPIP\Parameters 2KeepAliveTime REG_DWORD 0x0002bf20 (180000)

Windows Server 2019 からWeb APIを呼び出しているコード (リクエスト先URLは省略)

PowerShell

1$FILE_SUFFIX = (Get-Date).ToString("yyyyMM") 2$LOG_FILE = "script_$FILE_SUFFIX.log" 3Invoke-WebRequest -Method Post -Body "datetime_from=2022-10-01 00:00:00" http://~~~~ 2>&1 >> $LOG_FILE

試したこと

KeepAliveTime の値を240000に変えてテストしてみたが変化なし。

補足情報(FW/ツールのバージョンなど)

ありません

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

回答1

0

下記の様な方法で直接指定してみてはどうでしょうか。パワーシェルではなくてすみません。
https://qiita.com/kurasho/items/275612d408d32923eabd

もしかしたらinvoke-webrequestが直接指定してるせいで効かないのかもと思いました。完全な憶測です。

投稿2022/10/29 12:25

naitou

総合スコア36

下記のような回答は推奨されていません。

  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.02%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

TCP

TCP(Transmission Control Protocol)とは、トランスポート層のプロトコルで、コネクション型のデータサービスです。

Wireshark

Wireshark(ワイヤシャーク)は、ネットワーク・アナライザソフトウェアです。 IP、DHCPなど800以上のプロトコルを解析できる機能があり、 Windows、Linux、BSD、Mac OS Xなどで利用が可能です。

Windows Server

Windows Serverとは、Microsoft社のサーバ用オペレーティングシステムの総称です。 企業内ネットワークなどで利用されるサーバ機へ導入することを想定して開発されているため高い安定性があり、 管理機能を提供するソフトウェアが多く含まれています。

Azure

Azureは、マイクロソフトのクラウド プラットフォームで、旧称は Windows Azureです。PaaSとIaaSを組み合わせることで、 コンピューティング・ストレージ・データ・ネットワーキング・アプリケーションなど多くの機能を持ちます。