Linux从用户层到内核层系列 – TCP/IP协议栈部分系列4: IP层IP封包中TTL值何时修改

释放双眼,带上耳机,听听看~!

IP层IP封包中TTL值何时修改

IP包头中TTL值每过一次中间设备就会被减1,当TTL值为0的时候在网络中会被丢弃。在Linux 内核中是如何操作的?

1.对TTL值做减法的函数

static inline

int ip_decrease_ttl(struct iphdr *iph)
{

/* 重新计算IP包头的校验和 */

u32 check = (__force u32)iph->check; 

check += (__force u32)htons(0x0100);

iph->check = (__force __sum16)(check + (check>=0xFFFF));

       /* TTL值在转发前被减1 */

return –iph->ttl; 
}

补充说明的是IP首部校验和: 
协议栈在发送数据时,校验和计算: 
(1)把IP数据报的首部都置为0,包括校验和字段。  
(2)把首部看成以16位为单位的数字组成,依次进行二进制反码求和。 
(3)把得到的结果存入校验和字段中。  
协议栈在接收数据时,校验和计算:  
(1)把首部看成以16位为单位的数字组成,依次进行二进制反码求和,包括校验和字段。 
(2)检查计算出的校验和的结果是否等于零。  
(3)如果等于零,说明被整除,校验是和正确。否则,校验和就是错误的,协议栈要抛弃这个数据包。

2.何时调用ip_decrease_ttl

在TCP/IP协议栈中当中间设备收到需要转发包的时候,由ip_forward函数调用ip_ttl_decrease

给TA打赏
共{{data.count}}人
人已打赏
安全运维

WordPress网站专用docker容器环境带Waf

2020-7-18 20:04:44

安全运维

运维安全-Gitlab管理员权限安全思考

2021-9-19 9:16:14

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索