在wifi中,每个station连接ap后,ap都会给station分配一个ip
地址,如果station关闭后,ap是否会一直保留这个ip地址给该
station不?答案是否定的,每个ap都有一个ip地址租约时间的配置
项,就是 station在向ap申请ip地址后,只有一个有限的时间使用该
ip地址,如果时间到后station没有再次向ap获取 ip地址,该
station就会被ap踢出去,这样做目的是为了让ap在有限的ip地址数
目下,为更多不同的station 提供连接。避免一个station一直占用一
个ip地址不放,浪费ip地址资源。
下面是android上运行的例子,一个ap的ip地址租约时间设置为
7200秒,当一个station申请一个ip地址后,该station在7200秒内
ip地址,该station就会被ap踢出。当申请ip地址时间经过大约一半
的租约时间后(约3600秒),dhcp client会再触发一次ip地址申
请,这样station就 可以继续使用ip地址了,如果申请ip地址失败,
station也会断开与ap的连
接。
相关log如下:
重新申请ip地址:
E/native ( 403): do suspend falseE/WifiStateMachine( 403): scanCount==0 - abortingI/dhcpcd ( 7767): sending signal 14 to pid 1616I/dhcpcd ( 1616): received SIGALRM, renewingI/dhcpcd ( 1616): wlan0: renewing lease of 192.168.1.101I/dhcpcd ( 1616): wlan0: acknowledged 192.168.1.101 from 192.168.1.1 `8-13 I/dhcpcd ( 1616): wlan0: leased 192.168.1.101 for 7200 seconds
申请ip地址的dhcp过程如下:
1、 机子向ap发送一个dhcp discover包,请求分配ip地址;
2、 当Ap准备分配192.168.1.100的地址给机子时,发送一个广播包,询问是否有那个机子占用了该ip地址;
3、 没有机子占用192.168.1.100地址后,发送dhcp offer包,把192.168.1.100地址分配给机子;
4、 机子接着发送一个dhcp request包,请求确认分配的192.168.1.100地址;
5、 Ap发送一个dhcp ack包,确认机子分配的192.168.1.100地址;
在dhcp offer和dhcp ack包中,都有一个“IP Address Lease Time”字段,保存着ip地址的租约时间,这样dhcp client就知道了ip地址租约的超时时间,在快到达超时时间,再发起一次ip地址续约。正常情况下,机子发送一个dhcp request包,ap回应一个dhcp ack包就可以了。