网络编程设置TTL

本文深入探讨了TTL(Time To Live)在IP数据包中的作用及其在网络编程中的应用,详细解释了TTL如何避免数据包在网络中的无限循环,节省网络资源。文章还介绍了在Windows和Linux系统下如何设置和修改TTL值,以及如何使用Socket API进行TTL的编程配置。
摘要由CSDN通过智能技术生成

最近遇到一个问题,领导让我查一下关于多播的TTL配置的问题,我也是看了diam之后才知道的原来TTL可以通过编程来实现,说起来网络编程能力欠佳啊

TTL

TTL是 Time To Live的缩写,该字段指定IP包被路由器丢弃之前允许通过的最大网段数量。TTL是IPv4包头的一个8 bit字段.

在IPv4包头中TTL是一个8 bit字段,它位于IPv4包的第9个字节。如下图所示,每

一行表示 32 bit(4字节),位从0开始编号,即0~31。

 

TTL的作用是限制IP数据包在计算机网络中的存在的时间。TTL的最大值是255,TTL的一个推荐值是64.

虽然TTL从字面上翻译,是可以存活的时间,但实际上TTL是IP数据包在计算机网络中可以转发的最大跳数。TTL字段由IP数据包的发送者设置,在IP数据包从源到目的的整个转发路径上,每经过一个路由器,路由器都会修改这个TTL字段值,具体的做法是把该TTL的值减1,然后再将IP包转发出去。如果在IP包到达目的IP之前,TTL减少为0,路由器将会丢弃收到的TTL=0的IP包并向IP包的发送者发送 ICMP time exceeded消息。

TTL的主要作用是避免IP包在网络中的无限循环和收发,节省了网络资源,并能使IP包的发送者能收到告警消息。

TTL 是由发送主机设置的,以防止数据包不断在IP互联网络上永不终止地循环。转发IP数据包时,要求路由器至少将 TTL 减小 1。

Windows

TTL值的注册表位置HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters 其中有个DefaultTTL的DWORD值,其数据就是默认的TTL值了,我们可以修改,但不能大于十进制的255。Windows系统设置后重启才生效。

Linux

linux系统 TTL值的修改位置是/proc/sys/net/ipv4/ip_default_ttl,

echo 128 > /proc/sys/net/ipv4/ip_default_ttl

  若要设置长久的可以:

  修改/etc/sysctl.conf配置文件,添加如下一行

  net.ipv4.ip_default_ttl=128

Socket

#include <sys/types.h>
#include <sys/socket.h>
int getsockopt(int s, int level, int optname, void *optval, socklen_t *optlen);
int setsockopt(int s, int level, int optname, const void *optval, socklen_t optlen);

  int ttl = 64;
  int yes = 1;
  setsockopt(fd, IPPROTO_IP, IP_MULTICAST_TTL, (char *)&ttl, sizeof(ttl));  //设置组播TTL
  setsockopt(fd, IPPROTO_IP, IP_TTL, (char *)&ttl, sizeof(ttl)); //set ttl  on all sockets
  setsockopt(fd, IPPROTO_IP, IP_RECVTTL , &yes, sizeof(yes));//Tell me the TTL of incomming packets.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值