UDP, linux and packets greater 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.
|