implement a kad protocal