tshark -r server.pcapng -o tcp.check_checksum:TRUE -T fields -e frame.number -e frame.time_relative -e eth.trailer -e _ws.col.Source -e _ws.col.Destination -e _ws.col.Protocol -e frame.len -e _ws.col.Info<frame.number> <frame.time_relative> <SERVER_IP> <CLIENT_IP> TCP 54 80 → 23433 [ACK] Seq=26 Ack=890 Win=262656 [TCP CHECKSUM INCORRECT] Len=0<frame.number> <frame.time_relative> <SERVER_IP> <CLIENT_IP> HTTP 4065 HTTP/1.1 200 OK [Unreassembled Packet [incorrect TCP checksum]]<frame.number> <frame.time_relative> fefefefefefe <CLIENT_IP> <SERVER_IP> TCP 60 23433 → 80 [ACK] Seq=890 Ack=4037 Win=8047 [TCP CHECKSUM INCORRECT] Len=0 <=== this packet is ignored by the server.<frame.number> <frame.time_relative> <SERVER_IP> <CLIENT_IP> HTTP 1391 [TCP Spurious Retransmission] HTTP/1.1 200 OK [Unreassembled Packet [incorrect TCP checksum]]<frame.number> <frame.time_relative> <CLIENT_IP> <SERVER_IP> TCP 60 [TCP Dup ACK 280#1] 23433 → 80 [ACK] Seq=890 Ack=4037 Win=8047 Len=0
NOTE: When ethernet trailer is non-zero, actual eth.trailer value such as "fefefefefefe" is displayed.
In this example, only the line ignored by the server has eth.trailer displayed.
When ethernet trailer is zero, the command output is empty.
NSX 4.2.1.1
ESX 8.0 U3
This issue occurs due to a conflict between certain NIC hardware/firmware and how ESX handles Geneve-encapsulated packets.
When a packet contains a non-zero Ethernet trailer, the hardware-based checksum offload (CSO) may fail to calculate the correct TCP checksum for the inner packet of a Geneve tunnel. The receiving end identifies the incorrect checksum and ignores the ACK, leading the sender to believe the packet was lost and trigger spurious retransmissions.
In this example:
To resolve this issue on ESX, configure the ESX host to perform IPv4 checksum calculations via software instead of relying on the hardware offload for the affected physical adapters (vmnics).
esxcli network nic software listesxcli network nic software set --ipv4cso=1 -n vmnicX