hana_shinのLinux技術ブログ読者になるhana_shinのLinux技術ブログLinuxの技術情報を掲載しています。ネットワークをメインに掲載していきます。Offload)とは?TSOは、NICが送信パケットをMTU長に分割する仕組みです。以前は、カーネルで分割していましたが、最近はNICでパケットを分割することができます。NICでパケットを分割することで、カーネルの負荷を低減することができます。ここでは、仮想NICのTSOが有効/無効の時、TCPパケットがどのように分割されるかを確認してみます。ネットワーク構成サーバとクライアントの2台構成です。図中のens33はNICの名前です。版数サーバ、クライアントともに下記版数です。(Core)カーネル版数は以下のとおりです。事前準備サーバのTCP/11111番ポートを使用するので、TCP/11111番ポートへのアクセスを許可します。hana_shinのLinux技術ブログを参照してください。--add-port=11111/tcpsuccessポートの状態を確認します。11111番ポートが開放されたことがわかります。仮想NICのTSOを確認します。TSOが有効(★)であることがわかります。指定するオプション-kは小文字です。offクライアントからサーバに送信する送信データを作成します。データサイズは2000(byte)とします。hana_shinのLinux技術ブログを参照してください。test.datクライアントでtcpdumpを実行します。hana_shinのLinux技術ブログを参照してください。bytesサーバでncコマンドを実行します。ncプロセスがTCPの11111番ポートでListenするようにします。hana_shinのLinux技術ブログを参照してください。0.0.0.0:11111ncプロセスがListenしているポート番号を確認します。TCPの11111番ポートでListenしていることがわかります。hana_shinのLinux技術ブログを参照してください。(LISTEN)クライアントからサーバにデータを送信します。test.dattcpdumpの実行結果を確認します。tcpdumpは、カーネルとNICの間でパケットをキャプチャします。TSOが有効なので、TCP層ではなくNICでパケットの分割をするので、TCPパケットのペイロードサイズが2000(byte)と表示されています。TSO無効時ens33のTSOを無効にします。カーネルで送信パケットを分割することになります。指定するオプション-Kは大文字です。offTSOの設定有無を確認します。TSOが無効(★)になったことがわかります。指定するオプション-kは小文字です。offクライアントでtcpdumpを実行します。bytesサーバでncコマンドを実行します。ncプロセスがTCPの11111番ポートでListenするようにします。0.0.0.0:11111クライアントからサーバにデータを送信します。test.dattcpdumpの実行結果を確認します。tcpdumpは、カーネルとNICの間でパケットをキャプチャします。TSOが無効なので、TCP層でパケットを分割をするので、TCPパケットのペイロードサイズが1448(byte)と552(byte)と表示されています。・TSOが無効の場合:カーネルでパケット分割カーネルが分割するパケットサイズは、MTUからTCP/IPヘッダのサイズを引いた値になります。MTUはイーサネット環境では1500(byte)です。TCP/IPヘッダサイズは、各々20(byte)です。したがって、分割するパケットサイズは1460(byte)になります。最近はTCPヘッダに、TCPタイムスタンプオプション(12byte)が付くのが一般的です。したがって、分割するパケットサイズは、1448(byte)単位になります。handshakeの時に決定します。TCPの両端がTCPオプションを付けることに合意すれば、TCPオプションが付加されます。私が業務や記事執筆で参考にした書籍を以下のページに記載します。)はてなブログをはじめよう!hana_shinさんは、はてなブログを使っています。ブログを報告する引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。