这是我参与「第五届青训营 」伴学笔记创作活动的第14天
首先是DHCP(Dynamic Host Configuration Protocol, 动态主机配置协议), 主机联网后通过DHCP协议可以自动获取到本机需要的ip地址, 子网掩码以及路由地址
第一步, 主机向本地网段发出广播, 申请ip
第二步, dhcp服务器收到消息后, 会在ip池里分出来一个空闲的ip, 通过广播的形式发送给主机, 网段中的其他机子会忽略掉这些信息
第三步, 主机拿到ip后, 再次发起广播, 声明占有ip
第四步, dhcp服务器回复ACK信息, 主机可以在一定时间内使用该ip(可以续约)
这四部过程与三次握手感觉很像, 前两部申请确认ip, 后两步确认没有其他主机抢占ip
因为这个过程中使用了广播进行接收发送消息, 所以只能选用UDP协议, 而tcp因为需要建立连接, 这里无法替代udp
这四部全部使用广播理论上效果会很好, 但是会造成其他无关机器对广播信号的冗余解析, 因此部分dhcp服务器在第二步, 发出ip的时候会采用单播的形式.
对于手机等移动设备, 存在一个缓存表, 当表中记录下当前网络下曾经使用过的IP时, 重新联网时, 会优先申请该ip, 这样可以省去第一, 二步, 只执行第三, 四步.
dhcp分配ip必须保证本地网段内ip不重不漏, 但是难免会出现重复的情况, 一是手动设置ip重复, 而是两个dhcp服务器维护的ip池有重复.
在主机收到dhcp的ack信息后, 也不能立刻使用该ip, 而是要先发送三条ARP信息
ARP消息的目的是通过IP地址去获得mac地址。所以普通的ARP消息里,是填了IP地址,不填mac地址的。
而这三条为无偿ARP信息, 填入了主机自己的ip和mac地址, 告诉本网段的所有机器, 将这个ip记录到各自的ARP缓存中, 并且也确认有没有其他机器和本主机ip重复, 若是重复, 必须重新走一次DHCP流程
等到三次无偿ARP结束后, 才会使用这个ip进行通信