Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Categories

Welcome to the new platform of Programmer's Heaven! We apologize for the inconvenience caused, if you visited us from a broken link of the previous version. The main reason to move to a new platform is to provide more effective and collaborative experience to you all. Please feel free to experience the new platform and use its exciting features. Contact us for any issue that you need to get clarified. We are more than happy to help you.

UDP, linux and packets larger than 1500 bytes

Hi, I'm developing a tftp client and server and I want to dynamically select the
udp payload size to boost transfer performance.

I have tested it with two linux machines ( one has a gigabit ethernet card, the
other a fast ethernet one ). I changed the MTU of the gigabit card to 2048 bytes
and leaved the other to 1500.

I have used setsockopt(sockfd, IPPROTO_IP, IP_MTU_DISCOVER, &optval,
sizeof(optval)) to set the MTU_DISCOVER flag to IP_PMTUDISC_DO.

From what I have read this option should set the DF bit to one and so it should
be possible to find the minimum MTU of the network ( the MTU of the host that
has the lowest MTU ). However this thing only gives me an error when I send a
packet which size is bigger than the MTU of the machine from which I'm sending
packets.

Also the other machine ( the server in this case ) doesn't receive the oversized
packets ( the server has a MTU of 1500 ). All the UDP packets are dropped, the
only way is to send packets of 1472 bytes.

Why the hosts do this? From what I have read, if I send a packet larger than
MTU, the ip layer should fragment it.
Sign In or Register to comment.