Udp packages bigger than 1472 are not being received

1

I have a c# client app. It sends data to my server using UDP.

However, this stops working after I upgrade to Windows 2019 Server.

the reason it stopped working is contained in this link:

https://social.technet.microsoft.com/Forums/Windows/en-US/965e107e-d9b0-4240-ac3f-74797c91b476/unable-to-send-udp-packets-larger-than-the-mtu-with-windows-build-1809-using-c-udpclient?forum=win10itpronetworking

Essentially, it says:

My conclusion is that this optimization (UDP Checksum Offload) was broken in the 1809 release and continues to remain broken in 1903. To work around it for now, the optimization needs to be disabled (seems to be enabled by default). This can be done in the Device Manager. Find your network adapter card in the list and go into Advanced tab. We only deal with IPv4, but IPv6 might also be affected, so you might need to disable both.

and this does not work for me because:

We just tested the newest Windows 10 version 1903 and it still does not resolve this issue.

So, for my product I need to be able to send via a simplex mechanism. I am looking at TCP but I cannot see a simplex 'setting'?

Any advice?

ADDITIONAL

So, the reason I want to use simplex is that I am wanting to use a GSM modem attached to my Raspberry Pi to send byte array data to my server. I prefer to use UDP because it does wait for any response from the server as none is given ie info about framing is received.

I have found the GSM modem does like a duplex connection and will always reset its DHCP address rendering the application useless.

So, like I said it all works with the older windows OS but not this new one.

I would still prefer to use UDP. The suggestions in that link does not work.

So, I googled TCP connections - knowing it does not work for my application structure - but wondered if it could be setup as a simplex protocol rather than a duplex protocol thus avoiding the 'handshaking required'.

The Google results produced absolutely nothing in regards to the Simplex method.

So out of absolute desperation because I have no where else to look I pose the question here,

Andrew Simpson

Posted 2020-01-05T12:36:00.037

Reputation: 437

Relying on IP fragmentation in a stateless protocol is not a good choice anyway. Consider sending smaller packets. Packet loss is real, too, especially over wireless connections. So you may want to take that into account. // TCP does not have this problem because it stateful and can ask for retransmission etc. – Daniel B – 2020-01-05T14:53:09.980

How often do you transmit packages to the GSM modem? And what are your requirements that TCP with it's handshake is too slow for you? – Robert – 2020-01-05T14:58:07.527

@Robert sorry for the delay in my response. I send around 1500 bytes every 100ms. It is an imaging tool. Real-time. If I use TCP it will send back a ACK slowing it all down. – Andrew Simpson – 2020-01-05T16:02:39.830

@DanielB yes I agree. At the moment I have 1 client send udp to my server. it works flawlessly and has done for many years. I am sure if I add many more clients it will not? I am attempting to simulate this somehow to see the affects. I am sure there will be some! – Andrew Simpson – 2020-01-05T16:04:55.723

Answers

1

TCP is a full duplex connection, but you can send simplex data over it. At the lower layers, tcp will set up the connection and send the packets. The receiver will send acks for each segment it receives, but unless you are using raw sockets, that should be handled in the network stack.

Just make sure you enable window scaling and use a large receive window on the client, which will prevent a tcp window full problem. If the sender and receiver are on the same network, this should not be a problem with the default settings.

If you need to go across a WAN link or the internet, you may need to calculate the BDP or Bandwidth Delay Product. This uses the bandwidth you want to send and the round trip time to calculate the needed receive window.

Kevin Mason

Posted 2020-01-05T12:36:00.037

Reputation: 11

Thanks Kevin. All sounds interesting. Would you have C# sample code to show this in terms of simplex transmission? Thanks again! – Andrew Simpson – 2020-01-05T16:06:18.003

Sorry, I am not a C programmer, my specialty is network protocols and how to move data over them. Unless your application requires a response from the receiving application, none will be sent. At the tcp layer, packets sent to the client with data will have an ack sent to the server automatically.

Usually tcp is called as a stream protocol – Kevin Mason – 2020-01-05T23:29:16.677