「こうやったらできた」 PC(ネットワーク)編

ざっくり書いて、ざっくり公開しています。理解が不十分だったり、ちょっと間違っていることや表現もあるとご了承ください。

主にWindows10、またはWindows11での内容になります。

ネットワーク

再起動後にネットワークがつながらない

Windowsの自動更新などで自動的にPCの再起動が発生した際、再起動後にネットワークが繋がらなくなることが度々発生するようになりました。

「コントロールパネル」>「ネットワークとインターネット」>「ネットワーク接続」からネットワークアダプタの状態を確認すると、対象のネットワークアダプターは「有効」の状態ながら、「ネットワークケーブルが接続されていません」という表示になっています。

Windowsが再起動しただけですから、ネットワークケーブルが抜けるなど物理層での変更はありませんし、その先のスイッチングハブやルーター等にも変化はありません。なのに、なぜか「ケーブルが接続されていない」と判断されており、当然ネットワークが一切繋がらない状況となっています。

Windowsの自動更新によって勝手に再起動してしまうこと自体が煩わしく感じることもあるのですが…。まあそれは仕方ないとして、再起動によってネットワークが全く通じない状況に陥ることには、非常に困ったものです。

自分で通常のPC再起動を行ったときにも同様の症状が出るか、またFastBootの有効/無効によって状況が変化するかは未検証です。単にネットワークアダプタやケーブルの不良や故障の可能性もあります。

根治ではないのですが、経験的に次のような対処法を得ました。

繋がっていないネットワークアダプタを一旦「無効」に切り替え、再度「有効」に切り替えることで、接続が復旧することがわかりました。一度では相変わらず「ケーブルが接続されていない」とされてしまうこともあるので、その場合には「無効」にして「有効」に戻す操作を、何度か繰り返します。

さて、自分がPC前におり、この対処が行える場合はまだ良いのですが、リモートで離れた場所からPCを操作したい場合はこの方法では対応できません。何しろネットワークが機能しなくなるのですから。

そこで、この対処を自動で行うWindowsアプリケーション「Network Adapter Checker」を作成しました。名前はもうちょっと工夫したほうが良いかもしれませんが、急いでいたのでこれで良しとします。動作、仕様としては次のとおりです。

  • Windowsが起動し自動ログインした際に自動起動する(管理者権限を要するのでタスクスケジューラで設定)。

  • アプリ起動から一定時間(60秒とした)経過後に特定のURLにpingを飛ばし、返答を確認する。

  • 返答があればネットワーク接続は正常と判断し、以降は一定時間(10分とした)間隔で再度確認を行う。

  • 返答がなくpingが正常に終了しない場合は前述のとおりネットワークアダプタが異常と判断し、アダプタの無効化(netshコマンド)を行う。

  • 無効化操作から一定時間(30秒とした)経過後にアダプタの有効化(netshコマンド)を行う。

  • 有効化操作から一定時間(30秒とした)経過後に、再びpingでネットワーク接続を確認する。

開発はVisual Studio 2017を使用し、Visual Basicで作成しました。

Network Adapter Checker

ネットワークが不通となる現象は、平時に前触れなく発生するのではなく、あくまでも再起動後に発生します。このことから、一旦このアプリケーションで接続が復旧した場合は、それ以降に繰り返して接続確認を行う必要は、基本的にはありません。ですが、十分な時間を空けて確認を行い続けるぶんには問題ないかと考えています。もちろん、自分がPC前にいるなら、アプリケーションは手動で閉じることになると思います。

また、今回取り組んだ問題である「再起動後に『ネットワークケーブルが接続されていない』という、実際と異なる理由でネットワークに接続できない」という事象を確認する方法としてpingを試みることがベストなのか、
またネットワークアダプタの無効化と有効化を繰り返す方法がベストなのかについては、「まあ、これでよし」とします

この記事が気に入ったらサポートをしてみませんか?