DF bit is needed to discover the MTU on the application level, exactly 
because MTU discovery can be broken on lower levels of the network stack. 
QUIC specifies this procedure here: 
https://tools.ietf.org/html/draft-ietf-quic-transport-05#page-53

On Saturday, April 24, 2021 at 1:37:26 PM UTC-7 ico....@gmail.com wrote:

> I'm curious, why do you need to set DF bit? I'm asking, because as a 
> network engineer I'm often experiencing broken apps with this setting. It 
> usually ends up network pointing to app and vice versa.
> New tunnel along the path, either GRE or IPSec is lowering MTU, new 
> technologies like Cisco SD-WAN are all tunnel inside tunnel inside MPLS and 
> MTU can go as low as 1260. 
> Different workarounds are configured on routers as dynamic mss size 
> adjustment.
> In your case you are at least trying to discover MTU, but path could be in 
> many cases asymmetric. 
>
> On Friday, April 23, 2021 at 8:20:15 AM UTC+2 Marten Seemann wrote:
>
>> For my QUIC implementation <https://github.com/lucas-clemente/quic-go/>, 
>> I'm trying to set the DF bit on outgoing packets.
>>
>> The following code works fine on Linux:
>> addr, _ := net.ResolveUDPAddr("udp", ":0")
>> conn, _ := net.ListenUDP("udp", addr)
>> rawConn, _ := conn.SyscallConn()
>> rawConn.Control(func(fd uintptr) {
>>     unix.SetsockoptInt(int(fd), unix.IPPROTO_IP, unix.IP_MTU_DISCOVER, 1)
>> })
>>
>> On OSX, the sockopt doesn't have a named constant, the correct value to 
>> use here is 28. The code above only works if I'm listening on an address 
>> that's unambiguously IPv4, e.g. *127.0.0.1:0 <http://127.0.0.1:0>*.
>> If I listen on an address that allows me to send and receive both IPv4 
>> and IPv6 (like *:0*), it doesn't work anymore: *SetsockoptInt *now 
>> returns error 22 (invalid argument). That's unfortunate as users of the 
>> library often listen on *:0*.
>>
>> Is there any way to make this work analogously to how it works on Linux?
>>
>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/9407910f-0cd2-4a35-ba24-9b367c9fda50n%40googlegroups.com.

Reply via email to