Replies: 16 comments 18 replies
-
I am not sure I understand the sequence that you should. E.g. what is meant by "Sent 1) Received"? Sent by Client or Server? Who is the receiver? Does "1)" mean a packet number? Also, can you add more information about each packet? At least what is the packet size. It would help if you can include the data part of each packet when applicable (e.g. by viewing the tcpdump output using Wireshark). |
Beta Was this translation helpful? Give feedback.
-
It seems that the problem happens in the parameters exchange phase (i.e. that the 1 data byte in packet 12 is 0x09). Packets 14-17 are probably the packet that contains the parameters the client sent and its retries. More info may help the evaluation:
|
Beta Was this translation helpful? Give feedback.
-
Just to make sure, did you set the I believe that the 4 data bytes (tcpdump length) of packet 12 is the length of the packet 14 which includes the parameters JSON. If this is correct, then packet 12 4 data bytes value should be 118 (0x0076). Is this correct or the value is different? (Using the If this is correct, then after receiving the JSON length in packet 12 (probably acked by packet 13), the server is trying to read this amount of data (received in packet 14). It seems that somehow the server is stack in reading, e.e because there is a mismatch between the length in packet 12 and the length of packet 14. Can you send the full client command that you are using (obscuring the IP address if needed)? Did you try TCP test works (by removing the |
Beta Was this translation helpful? Give feedback.
-
Correct. As the length agrees with packet 14, I am not sure what may be the issue, especially because the client doesn't show the "send_parameters: ..." which should be printed before packet 14 is sent. Are you able to install/build a newer iperf3 version? It includes |
Beta Was this translation helpful? Give feedback.
-
Thanks for the information. It seem that for some reason the server got stack during the parameters exchange with the client. From the information available I can't tell what may be the problem. I therefore prepared a debug version, with several additional debug messages: https://github.com/davidBar-On/iperf/tree/issue-1470-client-server-handshake-fail. Can you build and try this version? The client may show additional "select failed ..." message and the server should show several additional ""**TEST: ..." messages and/or "select failed ..." message. |
Beta Was this translation helpful? Give feedback.
-
Thanks for taking the time for testing. As the issue seem to be in get_parameters(), I have added several test messages. Can you retry the test with the updated code? |
Beta Was this translation helpful? Give feedback.
-
This is strange, as in the stage of failure the As In the last set of Nread() messages, one of the test messages should be "**TEST in JSON_read: ntol() returned hzise=.... (0x...)". This is the value received in packet 12 and should be the same as the length of packet 14. Can you verify that? |
Beta Was this translation helpful? Give feedback.
-
It seems that This may be a system issue, not iperf3, but there is still one test approach I can think of. Before the Can you try this version? Note the "**TEST in Nread: select() return value=...." message when |
Beta Was this translation helpful? Give feedback.
-
I am not sure what is the reason for the first timeout (before reading the 4 bytes). The only thing I can think of that there may be a delay in receiving the data. In the tcpdump output, do you see a large time diff (seconds) between the 4 bytes and the 0x8e bytes packets? As it seems that the |
Beta Was this translation helpful? Give feedback.
-
The 5ms delay is the time between Packets 6 and 8. After sending packet 6 the server immediately waits for packet 8.
This is the problem ... For some reason the TCP stack stops working, at least for the server's connection, so it is even not sending the ack for receiving the packet (this is done by the TCP stack, not iperf3). Currently I don't have any idea for iperf3 changes that can help analysis. Other approaches should be used to analyze the problem. Some actions I can think of:
|
Beta Was this translation helpful? Give feedback.
-
@bgee-eng, that for your effort to try resolving this issue. From the info you sent I don't see something that can help, but the following may help:
|
Beta Was this translation helpful? Give feedback.
-
Oops! My mistake. No "clientIP" should be specified for the server ... Sorry for the mistake. The
It seems that the parameters exchange was successful and that the server is trying to read the first "1448 Byte Block" (first data packet). Does tcpdump show that this is the case? I.e. that there are other packets after the 142 bytes packet. If this is the case, can you send the new tcpdump output?
Was there any related error on the client side that may have caused this "Resource Temporarily unavailable;" error on the server side? |
Beta Was this translation helpful? Give feedback.
-
Per this answer try to add
This is because
That may be the case, but I am not sure what may cause such problem.
Did the client print all the 10 intervals before quitting? In any case, can you try a test using TCP with relatively short packet size? E.g. |
Beta Was this translation helpful? Give feedback.
-
Ok after passing the "-n" parameter, I can see that only down to line "W" shows up on the server side. Client side reports succeeded. Sending Ping to the larger packet increases the latency by 1 ms. The Client prints 1 interval while the host prints 4 intervals. As I repeat the process, iperf3 seems to be failing at different points in the handshake. This includes seeing on the client "errno -32 Broken pipe: unable to send control message - port may not be available" |
Beta Was this translation helpful? Give feedback.
-
That probably means that the delay is not an issue.
|
Beta Was this translation helpful? Give feedback.
-
@bgee-eng, I am not sure what are the two bytes packets the server sends at end of the list you sent for both UDP and TCP. My guess is that these are repeated retries of sending the "START" (0x01) and "RUNNING" (0x02) statuses. If my guess is correct, it means that somehow the client-server connection was broken at this stage somehow. I don't have further ideas for how to continue evaluating this issue remotely. Unless others that follow this discussion can help, it seems that local evaluation is needed. I suggest to first make sure that Also, evaluating the traffic using Wireshark can help. This is by recording the tcpdump for Wireshark (using Another evaluation approach is to try understanding the network architecture and find whether there may be a component that is causing issues. For example, are there routers/switches between the server and client machines that may cause a problem? |
Beta Was this translation helpful? Give feedback.
-
I have two systems setup to run with udp packets. When I send the client command to the server, the system never completes the initial handshake. With a tcpdump, I can see the client side Sends a total of 3 eth messages, and receives a total of two. On the Server Side tcpdump, I see a total of 3 eth packets received and it sending out only 2. Any idea as to why the client does not continue with the rest of the handshake and stops after Receiving the second packet from the Server?
Server Client
No other traffic is generated and Iperf3 terminal just hangs.
Beta Was this translation helpful? Give feedback.
All reactions