canonical / canonical/multipass

Simplified error example of: TCP Previous segment not captured

Open
#3,038 13 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

mystery
Dominant language
C++
Stars
9.2k
Forks
829
Avg merge
3d 2h
Merged PRs (30d)
45

Description

ENV

multipass version
multipass   1.11.1+mac
multipassd  1.11.1+mac

Mac Apple M1
MacOS 12.5.1

curl hangs half way through a large file(small file no problem) , if the server(multipass vm) is running in multipass on different computers on different vLAN.

Steps
  1. Create multipass vm and mount from the same folder:
multipass launch --name myvm --network=en0
multipass mount . myvm:~/speed

Question: Is it a "Bonded interface", when using --network=en0

  1. Generate a large file:
    multipass shell myvm
base64 /dev/urandom | head -c 100000 > file.txt
echo "\The end" >> file.txt
  1. run web server server in multipass vm:
multipass shell myvm
cd speed
python3 -m http.server
  1. Curl to multipass mvm - from another computer vLAN
curl <ip>/file.txt
In my case: `curl 192.170.1.231/file`
7AVzmECVWNbcShP+TE+/6AM/KZWc12AzLKvtctv0pqeSW0SNDW3OSM82SkzF+/UExUUBH4dxlIcM
dObLOlLgz9WfoiEtvZ4Hbx/yq85C+WwnFr2Trhu75qmFrg8Ht8t/x+MyDfI0MyuGw91tKqFgHL4F

Now it hangs, what to do?

If you run this python3 -m http.server on the host computer it works, just not from multipass vm.

Wireshark

If I use Wireshark I can see something standing out(Line 2) right about where it hangs:

10287	0.000580	0.000580	64	192.168.1.22	192.170.1.231	TCP	54	53941 → 80 [RST] Seq=1 Win=0 Len=0

4818	0.004338	0.004338	62	192.170.1.231	192.168.1.22	TCP	1514	[TCP Previous segment not captured] 80 → 50623 [ACK] Seq=84853 Ack=86 Win=65152 Len=1448 TSval=1019606200 TSecr=2732723127 [TCP segment of a reassembled PDU]

4820	0.000249	0.000249	64	192.168.1.22	192.170.1.231	TCP	78	[TCP Dup ACK 4817#1] 50623 → 80 [ACK] Seq=86 Ack=67477 Win=131072 Len=0 TSval=2732723132 TSecr=1019605978 SLE=84853 SRE=86301

4821	0.000057	0.000057	64	192.168.1.22	192.170.1.231	TCP	78	[TCP Dup ACK 4817#2] 50623 → 80 [ACK] Seq=86 Ack=67477 Win=131072 Len=0 TSval=2732723132 TSecr=1019605978 SLE=84853 SRE=87749

4822	0.002414	0.002414	62	192.170.1.231	192.168.1.22	TCP	1514	[TCP Fast Retransmission] 80 → 50623 [ACK] Seq=67477 Ack=86 Win=65152 Len=1448 TSval=1019606202 TSecr=2732723132 [TCP segment of a reassembled PDU]

4823	0.000001	0.000001	62	192.170.1.231	192.168.1.22	TCP	1514	[TCP Out-Of-Order] 80 → 50623 [ACK] Seq=68925 Ack=86 Win=65152 Len=1448 TSval=1019606203 TSecr=2732723132 [TCP segment of a reassembled PDU]

4827	0.002141	0.002141	62	192.170.1.231	192.168.1.22	TCP	1514	[TCP Out-Of-Order] 80 → 50623 [ACK] Seq=70373 Ack=86 Win=65152 Len=1448 TSval=1019606205 TSecr=2732723135 [TCP segment of a reassembled PDU]

4829	0.000165	0.000165	62	192.170.1.231	192.168.1.22	TCP	1514	[TCP Retransmission] 80 → 50623 [PSH, ACK] Seq=71821 Ack=86 Win=65152 Len=1448 TSval=1019606205 TSecr=2732723135

4830	0.000002	0.000002	62	192.170.1.231	192.168.1.22	TCP	1514	[TCP Retransmission] 80 → 50623 [ACK] Seq=73269 Ack=86 Win=65152 Len=1448 TSval=1019606205 TSecr=2732723135

4831	0.000000	0.000000	62	192.170.1.231	192.168.1.22	TCP	1514	[TCP Retransmission] 80 → 50623 [ACK] Seq=74717 Ack=86 Win=65152 Len=1448 TSval=1019606205 TSecr=2732723135

iperf - to multipass vm

iperf -c 192.170.1.98
------------------------------------------------------------
Client connecting to 192.170.1.98, TCP port 5001
TCP window size:  128 KByte (default)
------------------------------------------------------------
[  1] local 192.168.1.135 port 53580 connected with 192.170.1.98 port 5001 (icwnd/mss/irtt=14/1448/4000)
[ ID] Interval       Transfer     Bandwidth
[  1] 0.00-10.11 sec   348 MBytes   288 Mbits/sec

iperf - to multipass host machine

iperf -c 192.170.1.36
------------------------------------------------------------
Client connecting to 192.170.1.36, TCP port 5001
TCP window size:  128 KByte (default)
------------------------------------------------------------
[  1] local 192.168.1.135 port 53640 connected with 192.170.1.36 port 5001 (icwnd/mss/irtt=14/1448/3000)
[ ID] Interval       Transfer     Bandwidth
[  1] 0.00-10.06 sec   350 MBytes   291 Mbits/sec

I have added this issue to:
Hyperkit: https://github.com/moby/hyperkit/issues/338
Qemu: https://gitlab.com/qemu-project/qemu/-/issues/1584
stackoverflow.com: https://stackoverflow.com/questions/73753103/multipass-tcp-previous-segment-not-captured

Thanks

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Reproduce the report with multipass launch --name myvm --network=en0, the mounted directory, and python3 -m http.server, then compare large-file curl behavior with the supplied Wireshark and iperf results. Read the linked HyperKit, QEMU, and Stack Overflow investigations first; done requires a confirmed cause and a documented or implemented resolution for the cross-vLAN TCP hang.

Written by the indexing model from the issue text.

Assessment

Tech stack
macos, python
Domain
networking, operating-systems
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.