从一道面试题开始说起(基础版)
前言
从大概一个月之前, 我开始正式向B站上传一些视频,刚开始上传的视频是一些散碎的HCNP实验视频,后来看到有同学点赞,又上传一套关于CRT终端程序使用的视频,发现又有一些同学点赞,直到后来我又上传了一些我在阅读《wireshark网络分析就这么简单》的视频,发现开始有粉丝了,然后一致到今天2023年1月17日,粉丝的数量已经1000多了,暗自窃喜之余又有些自我怀疑,窃喜之处在于我一个没有经过任何剪辑美化的视频竟然有了1000多粉丝(我目前在视频剪辑方面只会视频分割和视频合并这两项技能),自我怀疑之处在于我做的视频真能给别的同学带来帮助吗?
说实话,我从来没有想着做一套视频教程,因为我特意在视频下方明确注明了:“这不是一套教程”,但随着关注人数的增加,我发现有些同学竟然在非常认真的观看我的视频,并提出自己的见解和意见,我渐渐感到了一些压力,同时也感觉到自身欠缺很多。比如,我经常事先不做PPT,也不备课,加上我自身语言表达能力并不好,常常在视频录制当中“卡壳”,“嘴瓢”,语无论次,逻辑混乱,有些话会多次重复……,总之,非常感谢大家的担待和支持。
我不知道如何才能给大家更多的帮助,我自己想了几条:
- 以后的每个视频我都会带上文档或实验手册
- 把实验环境也给大家附带上,这样大家也能在自己的电脑上复现实验结果。
- 我会努力提高自己的语言表达能力,努力把事情说清楚,这一点还需要大家给我一点时间……,我会努力的
我今天翻阅了一下视频,发现大部分同学都非常关注前两小节,即《从一道面试题开始说起》,由于当时我在录制那两小节的时候,并没有想到地有这么多同学关注,所以当然也没有好好的准备,导致其中有一些操作不当或口误的地方,所以我今天打算重新录制一下这两个视频,以答谢同学们的支持。
A PING B 理论分析过程
-
A需要判断B是否和它是一个网段
A通过自己的掩码判断自己的网段是192.168.26.0/24,用自己的掩码与B主机的IP地址做“与”运算,计算出B主机 的网段也是192.168.26.0/24,于是A认为B与它处于同一个网段。
-
A会按照通信规则,发ARP广播询问B主机的MAC地址
- who has 192.168.26.3,tell 192.168.26.129
-
B主机由于和A主机处于同一个交换机的同一个VLAN,所以B主机会收到A发送的ARP广播,那B主机会这么处理:
B主机并不会再去判断A主机是否于它处于同一个网段,而直接进行ARP的单播回复,将自己的MAC地址告诉A。
-
A主机收到B主机的回复之后,就开始准备ICMP的单播请求报文
源IP:192.168.26.129 目标IP:192.168.26.3
源MAC:00:aa:aa:aa:aa:aa 目标MAC:00:bb:bb:bb:bb:bb
-
A发送的ICMP单播请求报文经常交换机的转发顺利到达B主机,B主机这些开始着手准备ICMP的回复报文
- 注意,注意,这个时候,B会判断A是否和它处于同一个网段
- B通过自己的子网掩码判断出自己的网段是192.168.26.0/27,然后通过自己的子网掩码判断A主机的网段为192.168.26.128/27,于是B主机认为A主机和它并不处于同一个网段。
- B主机由于意识到目标主机和它并不处于同一个网段,需要经过网关的帮忙 ,于是,B主机会ARP广播网关的MAC地址,网关回复它之后,它才开始准备ICMP的回复报文:
- 源IP:192.168.26.3 目标IP:192.168.26.129
- 源MAC:00:bb:bb:bb:bb:bb 目标MAC:00:50:56:E7:51:F1
- 注意,注意,这个时候,B会判断A是否和它处于同一个网段
-
B发送的ICMP回复报文由网关转发到A主机之后,ICMP完成一次请求和回复。
B PING A理论分析过程
第一步:B判断A与自己不是一个网段,于是向网关发ARP广播询问网关的MAC
第二步:封装ICMP请求时:
- 源IP是192.168.26.3,目标IP是192.168.26.129
- 源MAC是00:bb:bb:bb:bb:bb 目标MAC是网关的MAC
第三步:网关将数据包转发给A之后,A开始回复ICMP,于是A判断B与它是一个网段,所以直接ARP广播问B的MAC地址
第四步:注意,这时候,ARP广播到达B之后,B不会再次判断对方与自己是否是同一个网段,B会直接进行回复
第五步:A正式开始封装
- 源IP是192.168.26.129 目标IP是192.168.26.3
- 源MAC是00:aa:aa:aa:aa:aa,目标MAC是00:bb:bb:bb:bb:bb
我认为最关键的点
我看到有些同学在说,这个实验的关键点在于是否将对方判断成同一个网段,我刚开始也这样认为,但后来察觉,关键点不是这里,而是在ARP上,ARP是一个特殊的协议,而ARP当中的回复报文又是特殊当中的特殊,它的特殊体现在什么地方呢?ARP的回复报文不会像ARP请求报文那样,预先判断对方是否和自己是一个网段,而是会直接进行回复;据我所知,除了ARP的回复报文不会判断对方的IP地址是否和自己一个网段,其它正常的协议无论是请求还是回复都会都判断的。
实验建议
- 最好是通过kali linux去做,修改MAC地址比较方便
- 在抓包的时候关闭混杂模式
- 在抓包之后,注意清空ARP缓存
- 最好是只ping 一个包,通过-c 来指定个数
视频讲解演示
https://www.bilibili.com/video/BV1aA411Z7U9?p=2&vd_source=4134b92c3a7468ae0a22c27b16a3440f