Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2208793
  • 博文数量: 436
  • 博客积分: 9833
  • 博客等级: 中将
  • 技术积分: 5558
  • 用 户 组: 普通用户
  • 注册时间: 2010-09-29 10:27
文章存档

2013年(47)

2012年(79)

2011年(192)

2010年(118)

分类: LINUX

2010-10-29 19:54:34

                         地址掩码请求和应答报文格式

地址掩码请求报文(type=17)和地址掩码应答报文(type=18)是为了子网请求应答而加到ICMP报文中的,其报文格式如下

 

0                7  8                 15  16                             31

    类型

     代码

 

       校验和

 

               标识符

       序号

                             地址掩码

 

他假定请求的主机知道自己的Internet地址,然后向目的地址255.255.255.255广播地址掩码请求报文,这时地址掩码域中全部为“0”,知道正确地址掩码的路由器就会返回一个地址掩码应答报文,该应答报文中就包含了请求主机所需的地址掩码。

 

 /* Build ICMP ADDRESS MASK Response message. *建立的ICMP地址掩码响应消息/

  icmphr = (struct icmphdr *) (skb2->data + offset);

  icmphr->type = ICMP_ADDRESSREPLY;//ICMP报文类型

  icmphr->code = 0;//ICMP代码类型为响应应答

  icmphr->checksum = 0;//ICMP协议的校验和

  icmphr->un.echo.id = icmph->un.echo.id;//ICMP的响应IDICMP头的响应ID相同

  icmphr->un.echo.sequence = icmph->un.echo.sequence;

memcpy((char *) (icmphr + 1), (char *) &dev->pa_mask, sizeof(dev->pa_mask));//向广播发送请求地址掩码报文信息,将广播返回的地址掩码拷贝

  icmphr->checksum = ip_compute_csum((unsigned char *)icmphr, len);//计算校验和

 

  /* Ship it out - free it when done */

  ip_queue_xmit((struct sock *)NULL, dev, skb2, 1); 顺序发送 DEV SKB2数据

 

  skb->sk = NULL;           SKB->SK为空

  kfree_skb(skb, FREE_READ) ;   SKB自由写入

}

 

功能:处理地址掩码请求。

如果被配置成地址掩码代理,则填写icmp-param结构,调用icmp_build_xmit,然后释放skb结构空间。否则,仅释放skb空间

阅读(4600) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~