# Round Trip Time と私の時間 :::info この記事は[群馬大学電子計算機研究会 IGGG Advent Calendar 2017](https://adventar.org/calendars/2300) 15日目の記事です ::: ## なぜRound Trip Timeが大事か TCPを利用した通信において,Round Trip Time(RTT)は非常に重要になります. TCPにおけるRTTはセグメント送信からACKが戻ってくるまでの時間を計算することで求められるようです. RTTを用いて,TCPのスループットを決定することができます. $T$をスループット,$W$をTCPウィンドウサイズ(KB),$t$をRTT(s)とすると, $T = \frac{W *8}{t}$ と求められます.[^1] TCPの場合,ACKが戻ってこないと次のセグメントを送ることができず待つため,このRTTで待つ時間というのを最適な値にすることが,スループットの決定に影響します. [^1]: http://jehupc.exblog.jp/15349359/ ## RTTを計測する RTTを計測する簡単な方法は`ping`コマンドを利用することです.今回はUbuntu Linuxを利用してやってみます. ``` root@9b11a86b1024:/# ping -c 5 8.8.8.8 PING 8.8.8.8 (8.8.8.8): 56 data bytes 64 bytes from 8.8.8.8: icmp_seq=0 ttl=37 time=6.818 ms 64 bytes from 8.8.8.8: icmp_seq=1 ttl=37 time=6.932 ms 64 bytes from 8.8.8.8: icmp_seq=2 ttl=37 time=15.309 ms 64 bytes from 8.8.8.8: icmp_seq=3 ttl=37 time=7.459 ms 64 bytes from 8.8.8.8: icmp_seq=4 ttl=37 time=82.272 ms --- 8.8.8.8 ping statistics --- 5 packets transmitted, 5 packets received, 0% packet loss round-trip min/avg/max/stddev = 6.818/23.758/82.272/29.431 ms ``` `round-trip min/avg/max/stddev`の部分を読めばRTTが分かります.それぞれ最小,平均,最大,標準偏差であることが読めます. 今回は`GNU inetutils`の`ping`を用いてみましたが,その他のOSやpingツールでも大体同じ結果が得られるはずです. ## TCPのRTTを良い感じ制御 in Linux 現在のLinuxにはGoogleの開発した(?)[Bottleneck Bandwidth and RTT (BBR) congestion control](https://github.com/torvalds/linux/blob/master/net/ipv4/tcp_bbr.c)が実装されています. Linux 2.6では[CUBIC-TCP](http://blog.yuuk.io/entry/cubictcp)が実装されているようです. ## 詳説をしたかったんですが やる気が起きませんでした.すみません.