网络模型与ARP详解
自学网络协议学到什么程度才算掌握,思考很久并在网上阅读了一番后,悟出了:不同程序员,学得程度不一样。一个java程序员,掌握基本的网络模型即可,从访问一个google走过的路由,什么时候涉及什么协议。了解了大概的网络模型之后,你在编程中基本所需的已足够。再深入了解一些原理的东西,比如IP选址、ARP实现与ARP攻防。
我学习的网络模型总结:从我访问一个google开始,在浏览器中访问http://www.google.com 回车,首先是解析www.google.com这个域名,从本地的解析机制 /system32/etc/host,如果没有那么从DNS域名服务器获取对应ip,知道了目的IP之后,还需要目的MAC地址,通过ARP协议发送一个数据包,给网内的所有其他主机(广播),有无这个IP对应的MAC地址,如果有,对应的主机发送ARP应答报文给我的主机,我的主机会在本机ARP缓存表中保存一份<ip-MAC>,如果发现没有,就把这份ARP数据包转发给网关,通过路由协议,知道google的ip在哪个网关下,就发送到对应的主机,然后Google主机返回包含mac地址的ARP数据报,然后还需要知道端口号,一般是80端口,所以mac层封装mac地址,ip层封装ip地址,tcp层封装端口号,应用层是https请求,普通的页面访问。
这里画出了从网关A发送到网关B的图,最后手机发送了https请求。并收到返回数据包。到这里,一个正常的网络模型已经讲解完毕。
ARP协议的攻击问题,就是在获取目的MAC地址时,有人发送大量假的ARP应答报,又因为ARP以后到者为先,那么假的肯定有概率会被使用,那么原本应该发送给B的数据发送给了C。具体参考这系列博文。