<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>networking on Ikoma's Blog</title><link>https://blog.yusukeikoma.com/ja/tags/networking/</link><description>Recent content in networking on Ikoma's Blog</description><generator>Hugo</generator><language>ja-jp</language><lastBuildDate>Mon, 05 Oct 2026 13:20:23 +0900</lastBuildDate><atom:link href="https://blog.yusukeikoma.com/ja/tags/networking/index.xml" rel="self" type="application/rss+xml"/><item><title>UDPのconnect()は何も送らず、getsockname()で自分のIPが分かる</title><link>https://blog.yusukeikoma.com/ja/posts/udp-connect-local-ip/</link><pubDate>Mon, 05 Oct 2026 13:20:23 +0900</pubDate><guid>https://blog.yusukeikoma.com/ja/posts/udp-connect-local-ip/</guid><description>Wi-Fi、VPN、コンテナのブリッジがあるマシンにはアドレスが複数あり、ホスト名の解決では間違ったものが返ることがあります。UDPソケットを宛先にconnectすると、カーネルがその宛先に使う送信元アドレスを決め、getsockname()でパケットを1つも送らずに読み出せます。Linuxで3つのインターフェースを使って確かめ、5つの宛先に対して5つの答えが得られ、IPv4とARPのフレームは流れませんでした。</description></item><item><title>HTTP/2で1本がタイムアウトしたら、閉じるのは接続ではなくストリーム</title><link>https://blog.yusukeikoma.com/ja/posts/http2-timeout-stream-vs-connection/</link><pubDate>Tue, 08 Sep 2026 12:56:00 +0900</pubDate><guid>https://blog.yusukeikoma.com/ja/posts/http2-timeout-stream-vs-connection/</guid><description>たくさんのリクエストを同時に流している1本の接続で、1つのリクエストの期限が来たとき、接続ごと閉じるべきか、そのリクエストだけを閉じるべきか。小さなNodeの実験では、HTTP/2のセッションを閉じると無関係な2本が失敗し、ストリームだけをキャンセルすると同じTCP接続のまま2本とも完了しました。ただし、TCPの1パケットの遅れは接続上の全ストリームを止めます。その場合に接続の生死を確かめる方法として、PINGを使った確認も試します。</description></item><item><title>bufferedAmountを待っても守れるのは送信側だけで、遅い受信側は守れない</title><link>https://blog.yusukeikoma.com/ja/posts/websocket-bufferedamount-backpressure/</link><pubDate>Sun, 06 Sep 2026 20:54:24 +0900</pubDate><guid>https://blog.yusukeikoma.com/ja/posts/websocket-bufferedamount-backpressure/</guid><description>WebSocketのsend()は待ってくれず、bufferedAmountが見ているのは自分のプロセスの中の待ち行列だけです。小さな実験では、bufferedAmountが減るのを待ってから送る送信側でも、受信側のメモリには、400件のほぼ全部が溜まりました。受信側が処理済みを返す「クレジット窓」(8件)なら、溜まるのは8件で止まりました。send()、bufferedAmount、メッセージサイズ、バックプレッシャーについてよくある4つの思い込みを実際に試し、使い分けの表にまとめます。</description></item><item><title>write() を2回呼ぶだけで、TCPが40ms止まる</title><link>https://blog.yusukeikoma.com/ja/posts/two-small-writes-nagle-delayed-ack/</link><pubDate>Tue, 01 Sep 2026 20:56:28 +0900</pubDate><guid>https://blog.yusukeikoma.com/ja/posts/two-small-writes-nagle-delayed-ack/</guid><description>ヘッダーと本文を小さな write() 2回に分けて送り、返事を待つと、CPUもネットワークも空いているのに、1往復ごとに約40ms止まることがあります。Nagleアルゴリズムも遅延ACKも、単体では正しい仕様です。2つが組み合わさると、タイマーが切れるまで互いに待ち合ってしまいます。この記事では、停止を予想し、50行のスクリプトで再現し、パケットトレースで確かめ、4つの対処を比べます。</description></item><item><title>死んだTCPの相手に気づくまで、書く側は約15分、読むだけの側は無期限</title><link>https://blog.yusukeikoma.com/ja/posts/tcp-half-open-connection-detection/</link><pubDate>Sun, 23 Aug 2026 15:09:06 +0900</pubDate><guid>https://blog.yusukeikoma.com/ja/posts/tcp-half-open-connection-detection/</guid><description>TCP は、相手がいなくなったことを教えてくれません。読み取り側は永遠にブロックし、書き込み側は十数分も再送を続け、SO_KEEPALIVE は未確認のデータがあるあいだ何もしません。この記事では、root 不要の1ファイルの Linux 実験環境を作り、何もしない、keepalive、TCP_USER_TIMEOUT、アプリケーションのハートビートという順に仕組みを積み上げて、気づくまでの時間を測ります。NAT と RFC がどこに関わるかも整理します。</description></item><item><title>トークンが切れても生き続けるWebSocketを、どう扱うか</title><link>https://blog.yusukeikoma.com/ja/posts/websocket-reauthentication-on-long-lived-connections/</link><pubDate>Fri, 21 Aug 2026 13:34:18 +0900</pubDate><guid>https://blog.yusukeikoma.com/ja/posts/websocket-reauthentication-on-long-lived-connections/</guid><description>101 レスポンスのあと、どのリクエストにも認証情報は載りません。サーバーが覚えているのは証拠ではなく判定結果だけです。1つのトークンをブラウザのハンドシェイクから追いかけ、ページから何が見えて何が見えないかを確かめたうえで、再接続・帯域内(in-band)・帯域外(out-of-band)の3つの更新方法を、動くサーバーとテストとヘッドレス Chrome の確認つきで比べます。</description></item><item><title>NAT の向こうでエージェントを常駐させる</title><link>https://blog.yusukeikoma.com/ja/posts/resident-agent-behind-nat/</link><pubDate>Mon, 03 Aug 2026 19:03:09 +0900</pubDate><guid>https://blog.yusukeikoma.com/ja/posts/resident-agent-behind-nat/</guid><description>NAT 配下の常駐エージェントを、外向き接続・独立した生存確認・必要時の SSH セッションで設計する方法を説明します。</description></item></channel></rss>