# 背景

[TCP技術入門](https://gihyo.jp/book/2019/978-4-297-10623-2)を読んで、TCPについて勉強しています。  
4.3章「プロトコルアナライザー「Wireshark」実践入門」に従って、FTP通信をWireSahrkでキャプチャしました。

# キャプチャしたFTP通信

## 環境

  * OS: ubuntu/xenial64
  * TCP輻輳制御アルゴリズム：`net.ipv4.tcp_congestion_control=reno`
  * IPアドレス： 
    * guest1: 192.168.33.10
    * guest2: 192.168.33.20
  * VirtualBox 
    * ネットワークアダプタのモード：内部ネットワーク

以下のVagrantfileを使って仮想マシンを起動しました。  
<https://github.com/neko9laboratories/tcp-
book/blob/master/wireshark/vagrant/Vagrantfile>

## 操作手順

  1. `vagrant ssh guest1`でguest1にログインする。
  2. WireSahrkを起動している状態で、以下のFTPコマンドを実行する。

```

    open 192.168.33.20
    user vagrant vagrant
    prompt
    put tempfile
    
```

<https://github.com/neko9laboratories/tcp-
book/blob/master/wireshark/ftp_conf.txt>

# 質問

WireSharkでTCP通信を確認したところ、重複ACKの通信がありました。  
[![重複ACK](https://i.stack.imgur.com/ayGdl.png)](https://i.stack.imgur.com/ayGdl.png)  
重複ACKを受け取ったということは、TCPセグメントが喪失されたということになると思います。

2つのゲストOS間で通信しているのに、なぜTCPセグメントが消失するのでしょうか？  
インターネットを通る通信なら、ネットワークの輻輳によりTCPセグメントが消失するのは理解できます。  
ローカル内での通信なら、ネットワークの輻輳は発生しないので、TCPセグメントも消失しないと考えています。

# 補足情報

参考情報としてTCP Stream Graphsを添付します。  
[![Sequence
Numbers](https://i.stack.imgur.com/NTrSO.png)](https://i.stack.imgur.com/NTrSO.png)  
[![Window
Scaling](https://i.stack.imgur.com/24Cvi.png)](https://i.stack.imgur.com/24Cvi.png)

# 参考情報

[重複ACKに関する別の質問](https://ja.stackoverflow.com/questions/85715)
CC BY-SA 4.0
2022-01-15T15:45:25.987
85716
2022-01-15T15:45:25.987
19524
question
tcp wireshark
ゲストOS間のTCP通信で重複ACKを確認しました。インターネットを介していないのに、なぜ重複ACKが発生するのでしょうか？