“淡泊明志,心静如水”,心静可以产生智慧,如果诸位不信,可以尝试一次,当心完全静下来时,会不经意产生很多灵感。
计算机网络架构非常清晰,美国人发明了TCP/IP协议,这个协议栈向上支持各种应用程序,比如浏览器、邮件客户端等,向下和网卡/驱动程序对接起来,这样应用程序发出的数据,被TCP/IP协议栈在中间处理了一下,最后被网卡发出,最终到达目的地。
之所以要被TCP/IP处理一下,是因为加上一些IP头、TCP头,为何要加上这些头,因为IP头可以找到世界任何角落的电脑A,TCP头可以找到电脑A上的进程。
在用户眼中,网络就三大块:网卡/驱动程序、TCP/IP协议栈、应用程序,用户对于网卡、浏览器等应用程序会有直观的感受,因为可以肉眼看到,但TCP/IP却跑在操作系统的内核里无法看到,但操作系统却提供了足够的工具让用户观看,比如在 windows 系统提供以下工具:
IPconfig
这个工具可以观察IP接口参数,可以使用 /all,/renew /release 来观察DHCP的工作过程
netstat
这个工具可以观察 TCP连接,UDP会话
Nslookup
这个工具可以观察域名解析DNS 的工作过程
Route print
这个工具可以观察路由表
ARP
这个工具可以MAC地址的解析缓存
Ping/Tracert
这个工具可以观察 ICMP工作过程
有这些观察工具可以对TCP/IP协议有一些感性认识,但这还不够,还需要一个抓包工具来研究这些协议的协议字段、以及交互过程。
现在警察破案基本上都靠监控,依据嫌疑人的衣帽特征、时间窗口,追踪他从哪里来,到哪里去,最终准确锁定嫌疑人的身份并抓捕。
而抓包工具就是网络流量的监控,可以还原现场,需要用协议过滤器来缩小包围圈,如果只想研究ARP,那就把它过滤出来,其它统统不要,那研究的注意力就会集中,不会受到干扰。
协议里的字段都有其必要的作用,举个例子,比如DHCP Discovery报文里,有“client Hardware Address”这个字段,刚研究的时候,我在想为何以太帧头已经有了“Source MAC Address”,为何DHCP报文还需要嵌入客户端MAC?
其一:网卡提交给IP层的数据里,没有以太帧头,自然就没有“Source MAC”,那DHCP Server 也无法获得
其二:一般的网络都是通过DHCP Relay 将广播的DHCP Discovery 通过单播路由到DHCP Server,自然会丢失客户端的MAC地址
而DHCP报文嵌入客户端MAC地址,可以让DHCP服务器得到客户端MAC,以此来分配IP地址。
学习过程中会遇到很多难以理解的问题,先放一放,随着学习的深入,那些问题会迎刃而解,当一步一步迈过最初的艰难旅程,会发现接下来的旅程轻车熟路,因为计算机网络的协议都是人类发明出来的,都是遵循极其类似的套路。