隧道代理的原理是什么,为什么能简化编程难度?