タグ

tcpに関するamari3のブックマーク (10)

  • 第4回 BBRの出現 | gihyo.jp

    バッファサイズ増加とバッファ遅延増大 近年、ルータやスイッチ等のネットワーク機器に搭載されるバッファメモリのサイズが増加してきました。この主な要因としては、メモリの低価格化が進んだことが挙げられます。またネットワーク機器に限らず、メモリサイズは大きい方が良い、という通念が主流となってきたことも大きく影響しているでしょう。ネットワーク機器のバッファサイズが大きくなることで、パケット廃棄が起こりにくくなるという利点があります(図1⁠)⁠。すなわち、ネットワーク機器に一度に大量のパケットが到着した場合にも、それらのパケットをメモリに蓄積しておき、順番に送出することができるようになります。 図1 バッファサイズとパケットロス しかしながら、バッファサイズが大きくなることによる弊害もあり、それがバッファ遅延の増大です。バッファ遅延の増大によって生じる遅延の増加現象はバッファブロート(Bufferbl

    第4回 BBRの出現 | gihyo.jp
    amari3
    amari3 2019/10/17
  • 堅牢なTCPサーバを作るために - katsubushiの知見から/kamakura.go#5

    kamakura.go #5

    堅牢なTCPサーバを作るために - katsubushiの知見から/kamakura.go#5
  • Google、TCPのスループットとレイテンシを改善する輻輳制御アルゴリズム「TCP BBR」をGoogle Cloudで利用開始

    Google、TCPのスループットとレイテンシを改善する輻輳制御アルゴリズム「TCP BBR」をGoogle Cloudで利用開始 Googleは、同社が開発したTCPの輻輳制御アルゴリズム「TCP BBR」をGoogle Cloud Platformで利用可能にしたと発表しました。 インターネットにおける通信にはTCPを用いる場合とUDPを用いる場合に分かれますが、BBRはTCPにおける輻輳制御アルゴリズムを改善したもの。すでにGoogleはTCP BBRをYouTubeのネットワークで利用しており、従来のパケットロスをベースにした輻輳制御アルゴリズムであるCUBICを用いた場合と比較して、スループットが平均で4%、最大で14%以上改善したことを明らかにしています。 TCP BBRは現在の高速なネットワークに適した輻輳制御アルゴリズム TCP BBRのBBRは「Bottleneck Ba

    Google、TCPのスループットとレイテンシを改善する輻輳制御アルゴリズム「TCP BBR」をGoogle Cloudで利用開始
  • nginxによるTCPロードバランサー | メルカリエンジニアリング

    SREチームの@cubicdaiyaです。今回はnginxによるTCPレイヤーでのロードバランスについて解説します。 ロードバランサーとしてのnginx nginxはHTTPやTCP、UDP等の複数のレイヤーでロードバランサーとして稼働させることができます。(TCPロードバランサーは1.9.0以降、UDPロードバランサーは1.9.13以降で利用可能です) また、ngx_http_ssl_module や ngx_stream_ssl_module を利用することでそれぞれのレイヤーでTLSを有効化することも可能です。 TCPロードバランサー用のモジュールを有効にする HTTPレイヤーでロードバランスするためのモジュールはデフォルトで組み込まれますが、TCP(とUDP)レイヤーでロードバランスするにはnginxのconfigureスクリプトに--with-stream(あるいは --with

    nginxによるTCPロードバランサー | メルカリエンジニアリング
  • listen()のbacklogが不足した際のTCP_DEFER_ACCEPTの動作について - blog.nomadscafe.jp

    TCP_DEFER_ACCEPTは、LinuxでサポートされているTCPのオプションで、サーバ側で使用した場合にはaccept(2)からのブロック解除をTCP接続が完了したタイミングではなく最初のデータが到着したタイミングで行ってくれるオプションです。 Webサーバ・アプリケーションサーバではリクエストが到着してからaccept(2)のブロックを解除するので、リクエストの到着をWebサーバ・アプリケーションサーバで待つ必要がなくなり、特にprefork型のサーバでは効率的にプロセスを使えるようになるという利点があります。PerlではStarletがこの機能を有効にしています ところが、某サービスでTCP_DEFER_ACCEPTが有効にも関わらず、accept後のreadでデータが読めず、最悪の場合、デフォルトのtimeoutである5分間プロセスがストールすることがありました。strace

  • tcpflow: httpレスポンスボディをリアルタイムで見たいとき | Ore no homepage

    tcpdumpの表示では見にくいし、pcapをいちいちwiresharkにわせてfollow tcp streamするのは面倒。そんなときに使えるツール。 (1) tcpflow tcpflow(最新はgithubかな) http://www.circlemud.org/jelson/software/tcpflow/ https://github.com/simsong/tcpflow (2) インストール 自分のメモをペッと貼付けただけなので、バージョンやダウンロード先は適当に読みかえてください。 yum install libpcap-devel wget http://www.circlemud.org/pub/jelson/tcpflow/tcpflow-0.21.tar.gz tar xvfz tcpflow-0.21.tar.gz cd tcpflow-0.21 ./con

  • tcpdumpツール

    tcpdumpとは、 tcpdump は真偽値の条件式に一致するネットワークインターフェース上のヘッダを表示するもの。単純にオプション無しで実行しても大量の通信内容が表示されるだけだ。tcpdump を上手く使うには、条件式をうまく使う必要があります。ネットワーク上を流れるパケットで、TCP、UDP、IP、ICMPなどの各種プロトコルに対応していますので、localhost のどのポートからどのホストのどのポートへ接続が行われたか、そのパケット内容等の詳細なデータを取ることができます。

  • 見落としがちなLinuxのWEBチューニング | Act as Professional

    WEBコンテンツ配信にLinuxを使うのは一般的になりましたが、CentOSやUbuntuをはじめ、大抵のディストリビューションが低スペックなマシンでも動くような初期設定になっています。 トラフィックの上限でもない CPUリソースの枯渇でもない HDDのIOが遅い問題でもない コンテンツが重くなる(接続できない)というケースで、見落としがちなLinuxのネットワーク周りのチューニングについてです。 iptables関連iptablesを使用している場合、下記のパラメータを注意して下さい。 /proc/sys/net/ipv4/ip_conntrack_maxip_conntrackに記録できる最大値です。65536あたりが初期設定になっているかと思います。これだとパケットの取りこぼしがすぐに起きてしまいます。1コネクションあたり約350バイト消費するので、実装されているメモリに応じて値を変

    見落としがちなLinuxのWEBチューニング | Act as Professional
  • TCP/IP で TIME_WAIT が残る時間を短くする

    TIME_WAIT 状態の TCP コネクションが多数残る netstat コマンドで TCP コネクションの状態を確認していると、"TIME_WAIT" という状態のコネクションがたくさん確認される場合があります。 "TIME_WAIT" 状態というのは TCP コネクションにおいて、こちら側から通信をした場合に "FIN_WAIT_1" (FIN ACK 受信) から、"FIN_WAIT_2" (ACK 受信) または "CLOSING" (FIN 受信, ACK 送信)を経て、コネクションを閉じられる状態となったことを示すもののようです。 そしてこの "TIME_WAIT" から、実際にそのコネクションが閉じられて "CLOSED" となるまでの間に待ち時間があり、これによって、短時間に通信が集中すると、その分だけ通信終了間際の "TIME_WAIT" 状態のコネクションが多数、ne

  • Socketとかがよくわからずハマったメモ - すぎゃーんメモ

    Test::TCPを使って何故かハマった http://d.hatena.ne.jp/tokuhirom/20080817/1218953905 を見つつ、試しに書いてみた #!/usr/bin/perl use strict; use warnings; use Test::TCP; use IO::Socket::INET; test_tcp( client => sub { my $port1 = shift; test_tcp( client => sub { my $port2 = shift; while (1) { sleep 1; } }, server => sub { my $port2 = shift; server($port2); }, ); }, server => sub { my $port1 = shift; server($port1); }, ); s

    Socketとかがよくわからずハマったメモ - すぎゃーんメモ
  • 1