ピットシリーズ——TCP/IP中のNagleアルゴリズム


質問:
取引所シミュレーションゲートウェイ送信ツールを書くとき、スナップショットの全リンク時間は200マイクロ余り、ペンごとに80マイクロ余りを測定した.時間異常の大きさ、TCPのデフォルトはNagleアルゴリズムをオープンすることを発見して、TCP_を設定していませんNODELAYはキャッシュ待ち時間を計算しすぎて時間がかかりすぎます.
分析:
TCP/IPプロトコルではTCPのデフォルトに対してNagleアルゴリズムがオンになっている.Nagleアルゴリズムは,伝送を必要とするパケットを低減し,ネットワークの利用率を向上させることによってネットワークを最適化する.遅延感度が高く、データ伝送量が少ないアプリケーションではTCP_をオンにすることができる.NODELAYオプション.Nagleアルゴリズムをオンにすると、データが一定量キャッシュされた後に送信され、遅延が増加することは避けられません.TCP Delayed ACK遅延確認メカニズム(1、応答データがある場合、ACKに応答データが付いている場合は相手に送信する2、応答データがなく、1つの遅延Delay Timeを待って送信する)と特性を組み合わせると、遅延がより顕著になり、基本的に40 ms程度になる.この現象は2回連続して書く操作を行うときにしか現れない.
Wikipediaから抜粋したNagleアルゴリズムの擬似コード実装:
if there is new data to send
  if the window size >= MSS and available data is >= MSS
    send complete MSS segment now
  else
    if there is unconfirmed data still in the pipe
      enqueue data in the buffer until an acknowledge is received
    else
      send data immediately
    end if
  end if
end if

この疑似コードにより、読み取り-書き込み-読み取り-書き込みモードに対してTCP_を閉じることが分かった.NODELAYの問題は大きくありません.連続して小さなパケットの書き込み操作を複数回行い、読み取り、アプリケーションレイヤで最適化する必要があります.
参考文献:
https://www.zhihu.com/question/42308970
https://blog.csdn.net/asklw/article/details/79246959
https://blog.csdn.net/historyasamirror/article/details/6423235
https://blog.csdn.net/historyasamirror/article/details/6122284