-
Notifications
You must be signed in to change notification settings - Fork 9
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Convert to TCP from UDP #909
Comments
Edit: Did some more research on this, in fact packet fragmentation is bad. The MTU the IPv4 protocol can support is 576 - UDP datagram header bytes after this Mr Fragmentation starts. https://en.wikipedia.org/wiki/Maximum_transmission_unit Mr Fragmentation causes the packet to split up, if 1 fragment is not caught the whole datagram is lost. This is why it is better to chunk/fragment the packet inside our own application so we have control over failure and re-requesting. |
@atlassanjay why don't you for now put a method in the pipeline flush handler that counts the bytes if it is over the size limit chunk the message, on the other end you can read a field saying "is_chunked" which buffers the packet until all chunks are received. depending on time to implement you could put placeholders in and throw an exception if too big. |
freezing this for now as we are not experiencing UDP packet fragmentation but something to be considered |
I think this will be more difficult then just using a ReplayingDecoder(Unless it supports the following), that would work for TCP but a UDP packet fragment can arrive unordered, might get dropped from an invalid checksum and won't get retried unless a custom header is built over the packet that has ordering and retry logic. |
Yeah i think a custom fragmenting & retry system would be needed on the application layer instead of allowing the IP layer to fragment the packets. By having this in the application we have control over fragmentation and retries. |
Feature Request
Is your feature request related to a problem? Please describe.
Currently in the system the Transaction object can hold many entries. However if the Transaction object and other proto objects designed to send over UDP become greater than 1472 bytes the UDP packet will fragment over the IP layer.
See Ref: https://support.citrix.com/article/CTX115434
Currently our system does not support fragmentation
Describe the solution you'd like
Use the Replaying Decoder in Netty to support UDP fragmentation.
Describe alternatives you've considered
The text was updated successfully, but these errors were encountered: