Sign in to follow this  

TCP Net.Sockets.Socket Black Hole

This topic is 3479 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

I have a black hole router between a client and a server. I am trying to send a large packet (32k) and the client never receives the packet. I tried setting the Socket.SendBufferSize = 512 to try and force separation before sending the packet. I've set DontFragment = False. What other steps can I take to try and force it through the black hole router?

Share this post


Link to post
Share on other sites
TCP has no concept of packets. It is a stream protocol, and any data you send will be automatically split into multiple packets (internally) before transmission if necessary. It is also a reliable protocol; any data that you send is guaranteed to reach the recipient as long as the connection is up.

If the client is never receiving the data then it's either not going through at all or your client is broken.

Share this post


Link to post
Share on other sites
Well, I try to send this data... I see it on the server being "sent"... on the client, it is never received. The event for the socket receiving data is never fired for the data sent. However, later on, additional "sends" that are smaller and they are received just fine.

Edit: This code works perfectly from one client to a server that uses a route without the black hole router. This code does not work when the client goes to a server that must use a route containing a black hole router.

Share this post


Link to post
Share on other sites
Quote:
Original post by Ra
TCP has no concept of packets. It is a stream protocol, and any data you send will be automatically split into multiple packets (internally) before transmission if necessary. It is also a reliable protocol; any data that you send is guaranteed to reach the recipient as long as the connection is up.

If the client is never receiving the data then it's either not going through at all or your client is broken.


It still sends data as packets, they are just transparent for user API.

The problem with black hole routers happens when TCP uses MTU to size the packets, and these packets are larger than some router's MTU.

These problems are slightly simpler to solve with UDP protocol, where each connection can use differently sized packets. For TCP, there's usually a global MTU setting.

Quote:
What other steps can I take to try and force it through the black hole router?


I don't have details handy, client might try reducing their TCP MTU. You could try reducing server's, but it will affect all connections, and may reduce throughput.

Share this post


Link to post
Share on other sites
The resolution for this is as simple as having XP SP3 installed on the client machine.

One of the new features of SP3 is that it 'sniffs' out the black hole router and makes adjustments for the black hole router.

At present, this is the only solution that has been found to work.

Share this post


Link to post
Share on other sites
Sign in to follow this