- 论坛徽章:
- 1
|
本帖最后由 ken1980 于 2015-09-10 20:47 编辑
在创建socket的时候,会读取系统ipv4_config.no_pmtu_disc的取值,构建IP头部时,根据取值来设定DF位
inet_create ()
{
…
if (ipv4_config.no_pmtu_disc)
inet->pmtudisc = IP_PMTUDISC_DONT;
else
inet->pmtudisc = IP_PMTUDISC_WANT
…
}
ipv4_config.no_pmtu_disc = 0表示不启用“no_pmtu_disc”,即“使用MTU路径发现” , 即DF=1
ipv4_config.no_pmtu_disc = 1表示启用“no_pmtu_disc”,即“不使用MTU路径发现” , 即DF=0
修改/etc/sysctl.conf配置,加入一行net.ipv4.ip_no_pmtu_disc = 1或则0(你想要配置的值,系统默认值为0)
执行/sbin/sysctl –p (使设置立即生效)
这是全局设置;
每个网络应用程序也可以通过setsockopt来设置自己单独的DF位取值,如下:(value的值由应用程序提供,value=0对应DF=0,value=1对应DF=1)
setsockopt(sockfd,IPPROTO_IP,IP_MTU_DISCOVER,&value,sizeof(value))
不用谢,请叫我雷锋
|
|