udhcp详解(七)——udhcp报文

   udhcp中,由serverpacket.c完成了服务器报文的发送,而clientpacket则完成了客户端报文的发送。它们最终调用的都是packet.c中的接口完成报文向网络中的发送。

struct dhcpMessage {
	u_int8_t op;
	u_int8_t htype;
	u_int8_t hlen;
	u_int8_t hops;
	u_int32_t xid;/*DHCPREQUEST 时产生的数据,以作为DHCPREPLY的数据*/
	u_int16_t secs;/*client端启动时间*/
	u_int16_t flags;
	u_int32_t ciaddr;/*要是client想继续使用之前取得地址,则列于这里*/
	u_int32_t yiaddr;/*在DHCPOFFER和DHCPACK中,这里表示client的ip地址*/
	u_int32_t siaddr;/*用于网络开机*/
	u_int32_t giaddr;/*跨网络的dhcp发放时,这里用来保存relayagent地址*/
	u_int8_t chaddr[16];/*client硬件地址*/
	u_int8_t sname[64];/*server之名称字窜*/
	u_int8_t file[128];
	u_int32_t cookie;
	u_int8_t options[308]; /* 312 - cookie */ 
};

packet.c里面定义了报文dhcp报文的格式,这个格式大部分和rfc2131中所定义的一致,其中rfc2131规定了报文最小长度为312字节,故这里udhcp所使用的是最小的报文格式。

 

值得注意的是packet.c中定义了两种发送报文的方式:raw_packet和kernel_packet。

intraw_packet(struct dhcpMessage *payload, u_int32_t source_ip, int source_port,

                      u_int32_t dest_ip, int dest_port, unsignedchar *dest_arp, int ifindex)

这个函数主要是在不知道客户端IP地址的情况下,凭借mac地址将dhcp报文从ifindex接口单播给客户端。

intkernel_packet(struct dhcpMessage *payload, u_int32_t source_ip, intsource_port,

                      u_int32_t dest_ip, int dest_port)

该函数则是使用ip地址发送报文,通常用于客户端向服务器发送的比如dhcprequest、dhcpinform报文。

当然packet.c函数也包括了报文头的封装和报文的读取和校验和工作。

 

serverpacket.c和clientpacket.c函数一看即明白就不细述了。

本人享有博客文章的版权,转载请标明出处http://blog.csdn.net/baidu20008


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值