咱们搞弱电的,天天跟网线、交换机、路由器打交道。你肯定遇到过这种情况:新装一台电脑,网线一插,灯一亮,嘿,就能上网了。但你想过没有,电脑是怎么知道它该用哪个IP地址的?这背后其实有个挺有意思的协议——DHCP,也就是动态主机配置协议。
IP地址就像门牌号,没它数据包就找不着北。网络通信离不开IP,但刚插上网线那会儿,电脑还是个“黑户”,啥IP都没有。那它咋办?总不能每次都让用户手动配吧——子网掩码、网关、DNS,这些词对普通用户来说比天书还难懂。咱们工程上,能自动解决的事就别让人动手,DHCP就是干这个的。
DHCP的工作原理说起来简单,就四个阶段:找、给、要、确认。咱们用大白话捋一遍。
电脑一插网线,先广播喊一嗓子:“谁能给我个IP用用?”这叫DHCP Discover。网段里所有设备都能听到,但只有DHCP服务器(一般就是家里那台路由器)会搭理它。服务器从IP池里挑个空闲的,广播回一句:“这个IP给你。”这就是DHCP Offer。电脑收到后,再广播确认:“好,就这个IP了,我要了。”这叫DHCP Request。最后服务器回个ACK:“行,归你了。”租期一般24小时,到期前还得续租。
这里有个坑,我刚开始干这行时也犯过嘀咕:第二阶段电脑都拿到IP了,干嘛还要第三第四阶段?多此一举?后来实战多了才明白,一个网段里可能不止一台DHCP服务器。你广播一喊,好几台都给你发Offer,你总得挑一个吧?先到先得,你确认了,服务器那边也得确认这IP还没被别人抢走。就跟找工作似的,你海投简历(Discover),拿了好几个Offer,跟HR说考虑两天(Request),HR得确认岗位还在(ACK),这事儿才算定下来。要是岗位没了,服务器就回个NAK,你就得重新找。
【实战经验】 我遇到过一回,工地临时组网,两台家用路由器都开了DHCP,结果IP池重叠了。好几台监控摄像头抢同一个IP,画面乱跳,查了一下午才发现是这问题。后来我学乖了,但凡项目里有多台路由器或者三层交换机,一定把DHCP服务关掉,只留一台主设备分配IP。要是非得多台DHCP服务器,那就把IP范围划清楚,比如一台管192.168.1.100-150,另一台管151-200,别让它们打架。
咱们也可以抓包看看。在命令行敲sudo ipconfig set en0 DHCP(en0换成你的网卡名),就能强制电脑重新走一遍DHCP流程。抓到的包里,蓝框标出的四个包正好对应那四个阶段。第二阶段的Offer包里,除了IP,还带着子网掩码、网关和DNS服务器地址,全齐了。
DHCP用的是UDP协议,不是TCP。为啥?因为TCP得先建立连接,可电脑一开始连找谁都不知道,只能广播。UDP广播发到255.255.255.255这个特殊地址,网段里所有设备都能收到。TCP就不行,它得跟每个设备挨个建立连接,效率太低。所以DHCP选UDP,没毛病。
还有个细节:Offer阶段,按理说服务器应该广播回复,但实际抓包发现往往是单播。这是因为客户端在Discover包里头设了个标志位(Broadcast flag = 0),告诉服务器“我支持单播,直接发给我就行”。这么干能省点带宽,不然网段里全是广播包,非目标机器也得拆包看一眼,白费力气。不过,有些老系统不支持单播,那就只能广播了,具体看实现。
【省钱技巧】 有些项目预算紧,用便宜交换机,广播包一多就容易丢包。我遇到过几次,手机在AP之间漫游,频繁走完整DHCP四阶段,广播满天飞,结果有些设备拿不到IP。后来我建议客户把DHCP租期设长点,比如7天,减少续租频率。另外,如果终端设备多,比如教室里的平板,可以在交换机上开DHCP Snooping,过滤非法DHCP服务器,防止有人乱插路由器导致IP冲突。这招不花钱,但能省不少售后麻烦。
那是不是每次联网都得走完四个阶段?不一定。手机断网重连或者换个WiFi,抓包会发现只有Request和ACK两个阶段。因为设备记住了上次用的IP,重连时优先请求同一个,省了前两步的广播。要是服务器那边IP还在,直接续租就行。这跟咱们租房子续约一个道理,老客户省事。
DHCP分配的IP会不会重复?理论上服务器会从IP池里挑没人用的,但架不住有人手贱——手动配IP。要是有人手动配了个跟DHCP池里一样的IP,冲突就来了。一个IP对应两个MAC地址,交换机上的ARP表就乱了,数据包不知道发给谁。解决办法?要么统一走DHCP,别手动配;要么在DHCP服务器里把那个IP从池子里剔掉。要是网段里有多台DHCP服务器,IP范围重叠也会冲突,那就得把范围调开。
【踩过的坑】 有次给一个办公楼做网络改造,原来的网管把几台核心交换机的DHCP都开着,IP范围还设得一模一样。结果新装的电脑老是间歇性断网,查了半天才发现是两台交换机同时分配了同一个IP。我直接关了多余的DHCP服务,只留一台主交换机干活,问题秒解。后来我养成了习惯,新项目上架前先扫一遍网段里有多少DHCP服务器,用Wireshark一抓一个准。
拿到DHCP ACK之后,电脑就能直接用这个IP了吗?还不行。它得先发个免费ARP(Gratuitous ARP),广播通知网段里所有设备:“这个IP归我用了,你们更新一下ARP表。”这就像你入职新公司,先在群里吼一声“我到岗了”,免得别人还往旧地址发消息。要是没人回应,那这IP就正式归你了。
总之,DHCP这东西看着简单,实际上坑不少。咱们做工程的,不光要懂原理,还得知道怎么排查、怎么优化。下次插网线时,你可以跟同事吹两句:“知道不,这背后有四个阶段呢!”
