2017年10月27日、モノビットエンジン勉強会inサイバーコネクトツーにて、中嶋謙互が講演しました「ネットワークゲームにおける TCPとUDPの使い分け」のスライドになります。ネットワークゲームを製作する際にご参考頂けますと幸いです。 登壇者: 株式会社モノビット 取締役 CTO 中嶋謙互Read less
インターネットは、TCP/IPというプロトコルを基盤とするコンピュータネットワークである。これからTCP/IPについて復習していくわけだが、まずは基礎的な用語とその概念を復習しよう。 インターネットを支えるTCP/IP いまやインターネットは、テレビや電話、新聞などと並ぶメジャーな媒体に数えられるようになった。この巨大なインターネットを下から支えているのが「TCP/IP」と呼ばれるプロトコル群である。 そもそも「プロトコル(protocol)」とは、ものごとの作法や手続きを明示的に取り決めて文書化したものだ。特にコンピュータネットワークの世界では、コンピュータ同士のデータのやり取りの方法を厳格に定めた規格(規約)のことを指す。コンピュータはプログラムに従って動作する機械であるため、厳密な取り決めがなければ複数のコンピュータを協調して動かすというのは難しい。 TCP/IPも、そのようなプロト
TCP/IPをわかりやすく - 通信プロトコルの基礎知識を図解で学ぼう 現在のインターネットを支える技術であるTCP/IPについて、基礎となるプロトコル群と、TCPの基本機能を丸田一輝さん、 中山悠さんに解説していただきました。 今からおよそ50年前、パケット交換方式による世界初のコンピュータネットワークであるARPANETが構築されました。それ以来、TCP/IP(Transmission Control Protocol / Internet Protocol)は通信を実現する基盤技術として使われ続けています。今ではパソコンに限らず、スマートフォンやゲーム機、センサー、最近では自動車など、無線通信機能を持ったさまざまな端末も含めコンピュータネットワークは構成されています。 その中でも「通信の信頼性を確保する」役割を担っているTCPは、その性質上、多くの機能を備えています。加えて、時代とと
1. ゆずり合うこと TCPはネットワーク帯域を他のTCPセッションと譲り合います。 TCPには、ネットワークが混雑(輻輳:ふくそう)してくると、送信されるパケット量を減らす仕組みがあります。 この譲り合いがあるからこそ、現在のインターネットは多数の人間が同時に使えています。 同様に、現実世界においても無理な競い合いを行うよりも譲り合いを行った方がスケーラビリティが上昇します。 2. 信頼はきめ細やかな確認応答で実現されること TCPでは、信頼性を確保するためにAck(Acknowledgement、確認応答)を送信してデータの到着を伝えます。 TCPのセッションが確立している間は、Ackが細かく送受信され続けます。 このきめ細かな確認応答が信頼の根幹であると言っても過言ではありません。 現実世界においても、きめ細かく応答を行う事が重要です。 メールなどを受け取っても、全く返事をしない相手
また間が開きましたが、すみだセキュリティ勉強会2015#2を開催しました。発表していただいた@inaz2さん、@yasulibさん、ありがとうございました。当日の発表資料は上記の勉強会ブログからリンクしています。 今回の私の発表は、「攻撃を『隠す』・攻撃から『隠れる』」。ポートスキャンをするとsshが100個現れる「ssh分身の術」がメイン(?)です。 当初は、パケットヘッダやプロトコルのすき間にメッセージを隠したり、ファイルを隠すなども考えていたのですが……。あまりに盛りだくさんになりそうだったので、「ポートスキャンをいかに隠れて実行するか・ポートスキャンからどうやって隠れるか」と、ポートスキャンとnmapに絞って発表しました。 発表資料 私の発表資料は以下です。 (PDF)攻撃を「隠す」、攻撃から「隠れる」 発表ノート付きなのでPDFです。以下、落穂ひろいなど。 スキャンするポート数と
リンク 【予約】【令和4年度】 教育図書 New技術・家庭 技術分野 明日を創造する 教番:702 + 明日を創造する技術ハンドブック 教番:703 - 広島県教科書販売|教科書の販売、ネット通販 【予約】【令和4年度】 教育図書 New技術・家庭 技術分野 明日を創造する 教番:702 + 明日を創造する技術ハンドブック 教番:703 - 広島県教科書販売|教科書の販売、ネット通販 広島教科書販売では、小学校・中学校・高校の教科書、教科書ガイド、入試過去問題集、教育書などの予約販売(過去問、教育小六法)、小学館教育技術(定期購読)のネット販売、通販を行っています。 教科書などの取扱商品は、海外発送も承っています。
HTTP/3はどうやってWebを加速するか? TCP、TLS、HTTP/2の問題とHTTP/3での解決策~Fastly奥氏が解説(前編) Webの世界では新しいHTTPの標準として「HTTP/3」の策定が進み、現在最終段階にあります。このHTTP/3はこれまでのHTTPをどのように改善し、高速化を実現していくのでしょうか。 2020年11月25日と26日にオンラインで開催されたFastly Japan主催のイベント「Yamagoya Traverse 2020」のセッション「Webを加速するHTTP/3」で、同社の奥一穂氏がHTTP/3の解説を行っています。 奥氏はHTTP/3に対応したHTTPサーバ「H2O」の開発を行うだけでなく、IETFでHTTP/3の標準策定にも関わるなど、日本においてもっともHTTP/3に詳しい人の一人であるといえます。 本記事では奥氏のセッションをダイジェストで
NHN Japan子会社のデータホテルとSkeedは6月12日、グローバル間のデータ転送を高速化させるクラウドサービス「データホテル クラウド コネクト」を発表した。Skeedが独自開発した通信プロトコル「Skeed Silver Bullet Protocol」(SSBP)の採用で、標準プロトコルのTCPと比較して約20~30倍の速度でグローバル間ファイル転送を行えるという。同日からβ提供を開始し、今夏に正式サービスとしてリリースする予定。 データホテル クラウド コネクトは、米国、ブラジル、アイルランド、韓国、オーストラリア、日本の6カ国10カ所に設置されたデータホテルの通信拠点を仮想ネットワークで結び、国をまたいだ2点間の通信スピードを高速化させるというサービス。例えば日本からアイルランド・ダブリンに1Gバイトのデータを送信する場合に、従来のFTP通信で90分かかっていたのを3分に短
QUIC(Quick UDP Internet Connections)プロトコルは、TCPではなくUDPをベースとして開発された、全く新しいWeb向けのプロトコルです。 (冗談で) TCP/2 と呼ぶ人までいます。 私がQUICについて知ったのは数週間前のことです。 SysCast Podcastのcurlとlibcurlについてのエピソード を聞いていた時でした。 QUICプロトコルの本当に面白い点は、UDPへの移行というところだと思います。 現在、Webの伝送プロトコルは、信頼性を確保するため、TCP上に構築されています。このTCP接続を開始するためには、 3wayハンドシェイク が行われています。つまりこれは、接続を開始するたびにラウンドトリップ (ネットワークパケットの往復) が追加されるということであり、新たな接続先に対し大幅な遅延を生じさせているのです。 (出典: UDPを介
この記事はTCPの 全て を理解する、あるいは 『TCP/IP Illustrated』 (訳注:日本語版: 『詳解TCP/IP〈Vol.1〉プロトコル』 )を読破しようとか、そういうことではありません。ほんの少しのTCPの知識がどれほど欠かせないものなのかについてお話します。まずはその理由をお話しましょう。 私が Recurse Center で働いているとき、PythonでTCPスタックを書きました( またPythonでTCPスタックを書いたらどうなるかについても書きました )。それはとても楽しく、ためになる経験でした。またそれでいいと思っていたんです。 そこから1年ぐらい経って、仕事で、誰かが「NSQへメッセージを送ったんだが、毎回40ミリ秒かかる」とSlackに投稿しているのを見つけました。私はこの問題についてすでに1週間ほど考え込んでいましたが、さっぱり答えがでませんでした。 こ
3章 Network Namespace - 1 helloworld ip netns コマンドでNetworkNamespaceの作成や操作が可能になる 作成したNetworkNamespace内で独自のネットワークを構築できる $ ip netns add helloworld $ ip netns list helloworld $ ip netns exec helloworld ip addr show 1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 $ ip netns delete helloworld # NSを作成 $ ip netns add ns1 $ ip n
ジェフ・ヒューストンのブログより。 QUICトランスポート・プロトコル(RFC 9000)は、オリジナルのTCPトランスポート・プロトコルを改良したものに過ぎないという一般的な見解があります[1][2]。私は、この意見に同意し難く、私にとってQUICは、通信のプライバシー、セッション制御の完全性、柔軟性の面で、アプリケーションが利用できるトランスポート機能における重要な変化を象徴しています。QUICは、より多くの形式のアプリケーションの動作に本質的に役立つ、異なる通信モデルを体現しています。そうです。TCPよりも高速です。私の意見では、公衆インターネットは、いずれQUICがTCPに取って代わると思っています。ですから、私にとってQUICは、TCPに少し手を加えただけのものではありません。ここでは、TCPとQUICの両方について説明し、QUICがトランスポート・テーブルに加えた変更について見
こんにちは。CX事業本部MAD事業部のYui(@MayForBlue)です。 最近読んだ「Linuxで動かしながら学ぶTCP/IPネットワーク入門」という本が、楽しくTCP/IPに入門できて良いなと思ったのでご紹介させていただきます。 本の目次 はじめに TCP/IP とは Network Namespace イーサネット トランスポート層のプロトコル アプリケーション層のプロトコル NAT ソケットプログラミング おわりに 付録 環境構築 シェルの基本的な使い方 この本を読んで学べること この本ではTCP/IPのネットワーク、パケットの流れを手元の仮想環境を使って学ぶことができます。 環境については、Network Namespace という、ネットワーク設定を分割して管理できるLinuxカーネルの機能を使います。 用意した環境の中で、通信を行うコマンドを自分で打ち込み、パケットの流れを
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
OSIとTCP/IP構造 OSI参照モデルとTCP/IPプロトコルスタックの対応関係を示しています。 OSIモデルはデータ通信のための抽象的なモデルで、7つの階層(レイヤー)から成り立っています。 一方、TCP/IPプロトコルスタックはインターネットで実際に使用されているプロトコルの集まりで、4つの階層から構成されています。 TCP/IPの4層構造 アプリケーション層:OSIモデルのアプリケーション層、プレゼンテーション層、セッション層に相当します。HTTP、FTP、SMTPなどのプロトコルが含まれます。 トランスポート層:OSIモデルのトランスポート層に相当します。TCPやUDPがこの層で動作します。 インターネット層:OSIモデルのネットワーク層に相当します。IPプロトコルがこの層で主に使用されます。 ネットワークインターフェース層:OSIモデルのデータリンク層と物理層に相当します。E
※筆者の足跡。 ストVで(パッドで張り手が出せないので)連射コンで本田を遊び、上手い人の動画を真似しつつ荒らしながらぶっ続けで練習しつつ二週間くらいでウルトラゴールドにギリギリ到達。(開幕本田堕ちスタート) 同時期に始めた友人に「戦っていてつまらない」と非難され続け、自分自身「これはキャラやセットプレイで勝っている(対策を押し付けている)だけで自分が上達しているわけではないな」と確信したため、初心者向けであるというエドに転向。 案の定コマンドやコンボがうまく完走できず。Vトリガーや投げ関連のテクニック、多すぎるキャラ対策など覚えることが多すぎてスーパーブロンズ〜シルバーを行ったりきたりしていて、それ以上上達の兆しが見えず、掛かるストレスと得られる楽しみが釣り合わなくなったため四六時中ゲーム起動している状態からさらに三ヶ月程度で燃え尽きてゲームから距離を置いた。 ・はじめにストリートファイタ
2016 - 08 - 12 Dockerホストのパフォーマンスを引き出すTCPカーネルパラメータチューニング Docker Linux もう半年くらいフルDockerでmicroservicesなサービスを運用してるんですが、イマイチパフォーマンスを出し切れていないなという面がありまして、今回Dockerホストの TCP カーネル パラメータを抜本的に見直しました。 そしたら劇的に症状が改善して、 インスタンス 数も削減できた上に安定して メシウマ状態 になったので紹介します。実際効果があったのでチューニングポイントとしてはある程度正解であったと考えていますが、もちろん扱ってるアプリケーションの特性にもよるはずなので一つの ケーススタディ であることをご了承頂ければと。 前提 まずは今回のお話の前提を。こんな環境です。 EC2 c3.xlarge ホストは Ubuntu (EC2 Opt
TCP/IP の基礎概念、アプリケーション・プロトコルについての概説、ネットワーキングにおける拡張概念とインフラストラクチャーの傾向について説明しています。
昨年末からずっとこんなことをしてまして、この時期になってようやく今年初のブログ記事です。 進捗的なアレがアレでごめんなさい。そろそろ3年目に突入の @pandax381です。 RTT > 100ms との戦い 経緯はこのへんとか見ていただけるとわかりますが「日本と海外の間を結ぶ長距離ネットワーク(いわゆるLong Fat pipe Network)において、通信時間を削減するにはどうしたらいいか?」ということを、昨年末くらいからずっとアレコレやっていました。 送信したパケットが相手に到達するまでの時間(伝送遅延)を削減するのは、光ファイバーの効率の研究とかしないと物理的に無理なので、ここで言う通信時間とは「TCP通信」における一連の通信を完了するまでの時間です。 伝送遅延については、日本国内のホスト同士であれば、RTT(往復遅延時間)はだいたい10〜30ms程度ですが、日本・北米間だと10
やっと形になってきました。 github.com 「データベースのクエリログを取得したい」 例えば、データベース(RDBMS)のクエリログを取得したいとき一番確実な方法は、そのRDBMSに備わっているログ機構を利用することです。 一方で、全てのクエリログを出力するとなるとそれなりにIO負荷がかかることが予想されるので、負荷状況によってはクエリログ出力(のIO負荷)を別サーバに分離したくなります。 では、どうすればよいかというと、例えば アプリケーションサーバとデータベースサーバの間にプロキシサーバを挟んでそこで記録することでIO負荷を分離する アプリケーションサーバ側で(notアプリケーションで)記録することで(大抵、サーバ台数の多い)アプリケーション側にIO負荷を分散する というような方法を思いつきます。 そこで、「もし、TCPコネクション上に流れている(例えば)クエリログを解析してログ
ダウンロードPDF(2MB)本書について『Working with TCP Sockets』の翻訳版を、原著者であるJesse Storimerの許可を得て島田浩二が公開するものです。 翻訳版の書名は、同シリーズの先行書『なるほどUnixプロセス ― Rubyで学ぶUnixの基礎 - 達人出版会』に揃えて『なるほどTCPソケット ― Rubyで学ぶソケットプログラミングの基礎』としました。 翻訳版も原書と同様、無料でお読みいただけます。 翻訳版の原稿は、10年ほど前に刊行を目指して翻訳したものとなっています。もし現在のRubyで動かない箇所や注釈が必要な箇所があれば、snoozer.05@gmail.com まで連絡ください。 公式ハッシュタグ:#naruhotcp 改訂履歴2024-09-23: 公開謝辞Jesse Storimer Original Author@takahashim
Disclaimer 私はネットワークの勉強もちゃんとしたことないし、Linux のソース読むのもはじめてな素人です。 何かおかしなところなどあれば、遠慮なくコメント欄でまさかりをお願いいたします。 ソースコードの引用に関して 本文中で Linux のコード/ドキュメントを引用している箇所がありますが、すべてタグ v4.11 のものです。また、日本語のコメント・翻訳文は筆者が入れたものです。 TL; DR Linux のカーネルパラメータ net.ipv4.tcp_tw_recycle は、バージョン4.12から廃止されました。 今後はこの設定は行わないようにしましょう(というかできません)。 一方、net.ipv4.tcp_tw_reuse は安全であり、引き続き利用できます。 …というだけの話なのですが、自分用にメモがてら経緯・背景などを記録しておきます。 なんで気がついたか このパラ
2022/08/09 追記 「RFC 9293 Transmission Control Protocol (TCP)」として正式なRFCが出ました TCPのコア部分の仕様は1981年に発行された「RFC793 TRANSMISSION CONTROL PROTOCOL」で標準化されています。 この、RFC793の改訂版となる「Transmission Control Protocol (TCP) Specification」は、2013年からIETFのTCPM WGで議論されてきましたが、4月4日にIESGによって承認されました(参考URL)。現在はRFC出版の準備に入っています(新しいRFC番号はこの後正式に決まります) www.ietf.org 改めてTCPの仕様を読みたい場合はこのドキュメントを読むのが良さそう。 概要 この改訂版の仕様(通称 rfc793bis)は、RFC793が
インターネット技術の標準化団体であるIETFが、TCPに代わるインターネット通信プロトコルとして注目を集めているQUICの技術仕様をまとめたRFC 9000を発表しました。これにより正式に「バージョン1」へと移行することが決まったQUICの将来について、RFC 9000の作成を手がけたジャナ・アイヤンガー氏が解説しています。 QUIC is now RFC 9000 | Fastly https://www.fastly.com/blog/quic-is-now-rfc-9000 QUIC is RFC 9000 | daniel.haxx.se https://daniel.haxx.se/blog/2021/05/27/quic-is-rfc-9000/ QUICは、現行のインターネットに使われているTCPの遅延を減らし、信頼性と安全性を改善させることを目的に開発された新しいトランスポ
Windows XP SP2とWindows Server 2003 SP1のTCP/IPスタックでは、不完全な外向きのTCP同時接続数を10接続に制限しています。接続数が10に達した場合、接続要求はキューイングされ、ある一定間隔で処理されるようになります。 この制限は、ホストがワームに感染した際、他のホストへの影響を最小限にするため、Windows XP SP2とServer 2003 SP1で新たに実装されました。しかしこの制限は、不完全な外向きのTCP接続を大量かつ同時に張るアプリケーションにおいては、大きなパフォーマンス低下を招く可能性があります。例えば、P2Pシステムや脆弱性スキャナなどが挙げられます。特に脆弱性スキャナは業務で利用するケースが多いと思いますので、パフォーマンス低下は非常に致命的です。 これを回避する選択肢の一つとして、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
「それ、QUIC使えないの?」 それがなんであれ、QUICを使うことを主張することで、みんなが「なんか良くわからないけど、TCPを置き換えたほうがいいのかな?」と思うようになるはず。全てのアプリケーションを、TCPの代わりにQUICを使うように修正するとなれば、この先10年間ぐらい、エンジニアみんなの仕事を作ることができます。業界愛ですね。 すでに、SSHやDNSのQUIC対応は始められています。既存のアプリケーションをQUICに対応させる難しさを調査するために、RustでBGP over QUICを実装してみました。 QUICの実装QUICは、TCPと同じく、パケットの再送、輻輳制御など、信頼性のある通信を実現するトランスポートプロトコルです。実装面の大きな違いは、TCPがオペレーティングシステムのプロトコルスタックの一機能として実装されるのに対して、QUICはアプリケーションで実装され
ブラウザから直接TCP・UDPで送受信する「Direct Sockets API」という仕組みが議論されています。 実験段階ですが、Chromeでは起動時にオプションを付けることでこの機能を有効にできます。今回はTCPの方で簡単に動作を見てみます。 Direct Sockets API Direct Sockets APIは、TCP・UDPで直接送受信可能にするAPIです。既存のアプリケーションプロトコル(SSHやIRC)、P2Pのような機能を実現可能になります。 もちろんセキュリティ上の問題もあるので、Chromeでは現状デフォルトでは有効になっていない機能です。 セキュリティ面についてはだいぶGithubリポジトリで議論されておりますので目を通すと良いでしょう。ローカルネットワークへの通信やSame-Origin-Policy(CORS)回避の話が上がっていますが、今回は細かくは紹介し
最新版は以下となります。 https://dev.classmethod.jp/etc/ec2-tcp-port-check-command-2018/ こんにちはコカコーラ好きの梶です。 EC2では色々なOSが構築できますよね。構築後の通信確認はどのように実施してますか? 各OSで他のインスタンスへTCP通信確認のために、ツールをインストールしたり、ICMPなどの別なプロトコルで確認するためにSecurity Groupを一時解放していませんか? 構築直後の状態で、簡単にTCPポート疎通確認可能なコマンドをご紹介します。 Amazon Linux,Ubuntu,Windows2012R2,CentOSについて自分も忘れやすいのでまとめてみました。 どなたかのお役に立てれば幸いです。 Amazon Linux 動作確認AMI:amzn-ami-hvm-2014.09.2.x86_64-eb
サーバ間で分散処理を行う際の相互通信におけるボトルネックを解消するため,smux(Socket multiplexer)を開発している. サーバ間の相互通信におけるボトルネックとその解決策 一対のサーバ間で多数のリクエストとレスポンスが送受信され,信頼性の高い通信としてTCPを利用する場合,コネクション確立のオーバーヘッドを排除するために接続の再利用が行われる.しかしながら,クライアントは送信に対する受信を待つ必要があるため,レスポンスまでに幾許かの処理時間を要する状況では送信のキューがたまってしまう.そこで複数の接続を利用することでこれを解消する方法が取られるが,追加の接続はリソース使用に関するオーバーヘッドを発生させてしまう.なにより各接続におけるレスポンス待ち時間は依然として解決しておらず,接続の利用面から見て非効率である.そこで,単一の接続において,仮想的に並行送受信を行う方法が提
A「TCP/IPのジョークを聞きたい?」 B「もちろん!TCP/IPのジョークを聞きたいです」 A「TCP/IPのジョークを聞く準備はOK?」 B「TCP/IPのジョークを聞く準備が出来ました」 A「TCP/IPのジョークはこうです」 A「TCP/IPのジョークを聞けた?」 B「TCP/IPのジョークを聞くことが出来ました」 A「OK!あなたはTCP/IPのジョークを聞くことが出来ましたね!バイバイ!」 違うバージョンもあるらしい A「TCP/IPのジョークを聞きたい?」 B「もちろん!TCP/IPのジョークを聞きたいです」 A「TCP/IPのジョークを聞く準備はOK?」 B「TCP/IPのジョークを聞く準備が出来ました」 A「TCP/IPのジョークを今話すよ.このジョークは10秒かかって2文字くらいの長さだよ.これだけなんだけど,すごい面白いオチがあるんだ」 B「分かりました.10秒で2
本書は、Pythonによる実装を前提として、ソケットプログラミングに必要な知識をわかりやすく解説する入門書です。TCP/IPやソケットの原理を説明したのち、Pythonでソケットを実装する基礎的方法を示していきます。さらに、Python固有の機能を用いたプログラミング例(モジュールを利用したサーバ実装など)を紹介します。 ダウンロードできるサンプルプログラムが多数掲載されているので、実際に試しながら読み進めて、知識と技術を身につけてください。 【本書の基本環境】 本書は、Windows・Annaconda・Python3の使用を基本としています。 しかし、使用しているモジュールはごく標準的であるため、それ以外の環境でも、本書で使用しているプログラムは問題なく動作すると考えられます。 【本書内で使用するPythonモジュール】 socket sys datetime threading os
追記 kazuho さんからの指摘いただいた通り、TCP BBRアルゴリズムがモバイル環境の通信速度向上に影響を与えているわけでは無く、キャリア/ISPが制御している回線(本記事ではIIJmio回線)を、BBR+SSRという特殊なコネクションにより、トラフィックシェイピングの挙動を変えてしまい*1、そのため帯域幅が増えたと推測されます。この利用方法では、TCPの公平性に悪影響を与えてしまう行為になる可能性があり、一般良識の範囲内で試すなど、定常的な利用は控えた方が良いでしょう。 さらに追記 IIUC同僚氏いわく、kernelのtcp実装ならBBRv1。モバイルキャリア内にありがちなユーザ毎のキューがボトルネックか、同一ユーザが並行ダウンロードを行なって確認すればいい(バンド幅の総和が不変ならユーザ毎のキューあり)。キューがあってそこがボトルネックなら輻輳制御間の公平性の懸念はない— Kaz
本章では、HTTP/3がTCPに代わって下位層で用いるQUICについて解説します。 QUICはトランスポートプロトコル QUICはトランスポートプロトコルです。QUICの説明に入る前に、トランスポートプロトコルついておさらいします。 TCP/IPの4階層モデル プロトコルは階層で役割を分担しています。TCP/IPの4階層モデルでは、アプリケーション層、トランスポート層、インターネット層、ネットワークインタフェース層に分かれます(図1)。 図1 TCP/IPの4階層モデル アプリケーション層に分類されるアプリケーションプロトコルは、クライアントやサーバで動作するアプリケーションの動作に関するデータやメッセージの通信ルールを規定します。たとえばSMTP(Simple Mail Transfer Protocol)は、メールを送信する通信ルールを規定しています。HTTPはこの層に属します。
cagra高速化にあたってのノウハウを一部公開してみます。また明日校正/更新します。つっこみ待ちです。 select(2)の代わりにepoll_wait(2), kqueue, /dev/epoll等を使う 他に山ほど解説ページがあるので略 大量のディスクリプタを処理するようなサーバの場合、多少効果があるかもしれません。しかし、クライアント数が少ない場合、劇的な性能の向上は見込めないとおもいます。クライアント数が多い場合は、1セッション1スレッドなモデルではOS側のタスクスイッチングのオーバーヘッドが効いてくることも多いです。クライアント数を増やすには複数のセッションを1スレッドで処理できるようにすると良いです。実装にあたっては、non-blocking ioを活用すると効果的です。 TCP_NODELAYを設定する Nagleアルゴリズムをオフにします。多少応答性が良くなります。 これっ
【IIJ 2023 TECHアドベントカレンダー 12/16の記事です】 この記事について 背景:TCP はコンピュータネットワークの通信において広く利用されているプロトコル・標準化された通信規格です。コンピュータは TCP/IP スタックと呼ばれるようなソフトウェアを実行することで、定められた規格に則って通信を行います。汎用 OS 環境では、TCP/IP スタックは多くの場合、カーネル空間に OS 機能の一部として実装されています。 課題:通信に関するソフトウェアの研究コミュニティでは、そのようなカーネル空間に実装されている TCP/IP スタックは、近年の高速な NIC の性能を十分に引き出すことが難しいという課題が指摘されてきました。 テクニックの紹介:当記事では、近年の研究コミュニティにおいて比較的一般的な高速化テクニックとされている「カーネルをバイパス(迂回)して TCP 通信を
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く