udhcp详解(七)——udhcp报文
来源:互联网 发布:张思然淘宝店名字 编辑:程序博客网 时间:2024/05/20 17:27
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
- udhcp详解(七)——udhcp报文
- udhcp详解源码(序)
- udhcp源码详解(一)
- udhcp源码详解(二)
- udhcp源码详解(四)
- udhcp源码详解(五)
- udhcp详解源码(序)
- udhcp源码详解(一)
- udhcp源码详解(二)
- udhcp源码详解(四)
- udhcp源码详解(五)
- udhcp详解(八)——udhcpd.c的执行主线
- udhcp源码详解(三)上
- udhcp源码详解(三)下
- udhcp源码详解(六)--script
- udhcp源码详解(三)上
- udhcp源码详解(三)下
- udhcp源码详解 续
- Android的callback(一)
- POJ 1459 Power Network
- 定义函数模板
- hdu 1083 Courses
- hdu4527小明系列故事——玩转十滴水 (BFS+DFS)
- udhcp详解(七)——udhcp报文
- C#get Set
- Web.Config配置错误页面处理
- 简单的GridView嵌套实现
- 黑马程序员--05.类加载器--01【类加载器基本知识】【类加载器的委托机制】
- 下一个七年(希望给你启发)
- 08-12华为技术面试时面试官出的题目
- UVA400
- B-树和B+树的应用:数据搜索和数据库索引