6000字加图文 | 抓包带你深入了解网关到底起什么样的作用?不同网段通信的过程详解
作者:一天首发公众号:网络之路博客(ID:NetworkBlog)
不同网段通信的过程
不同网段就分两种了,同一个局域网下面,不同网段之间的通信,或者是从局域网去往互联网的通信,那么这个过程又是怎么样的呢?
https://s7.51cto.com/images/blog/202112/03093732_61a974dc91c1636266.webp
还记得第二篇这个内容吗,访问者把数据交给网关,当时候是没有讲解这个里面的细节部分,这里就来填坑,之前介绍的时候省略掉了ARP的过程,那这里就用模拟器来还原下,由于现在还没学习过路由交换的知识点,这里简化下环境。
https://s4.51cto.com/images/blog/202112/03093732_61a974dc7f1d821663.webp
看到这个图是不是比较迷糊,由于我们还没学习路由的知识点,这次【出口路由器】与【互联网】这2个设备,我会提前打通,然后这个拓扑我也会发出来,先不用管中间怎么实现的,这个在后续是我们学习的重点,这里呢,我们把重点放在访问者在访问WEB服务器的时候,整个过程,这个对于后续学习路由技术很有帮助的。
(1)准备工作
检查下访问者以及WEB服务器的地址是否已经完成。
https://s9.51cto.com/images/blog/202112/03093732_61a974dc810ad447.webp
这里说明下,我们关注的主要是访问者与服务器,但是服务器的提供的服务,每次重新打开模拟器是需要重新选择启动的,这个要注意下,然后检查下IP地址是否正确,出口路由器与互联网,暂时不去关心,并且在实际企业网部署中,运营商的网络由运营商自己维护,我们也管不着,运营商那边接通互联网,给予对应的对接信息,他们也不管你内网怎么去搭建跟规划的。(有的朋友可能在某些书籍或者实验里面发现运营商的网络也在其中,可能就迷糊了,但是实际中,运营商那边是不需要去管的,实验环境只是去模拟出来这样的效果,所以必须配置)
https://s8.51cto.com/images/blog/202112/03093732_61a974dc9648d6676.webp
(2)访问者访问WEB服务器,来看看IP规则规则
访问者(192.168.255.1/24)访问1.1.1.1的WEB服务,这个时候访问者通过掩码来计算两边是否同一个网络号,在同一个网段还是不同网段。
https://s3.51cto.com/images/blog/202112/03093732_61a974dca5ecd22451.webp
(3)不在一个网段,怎么办呢?
访问者通过计算发现网络号不相同,不再一个网段,这个时候它就不知道该怎么把这个数据包发出去了,所以这里就需要介绍另外一个功能:默认网关
https://s8.51cto.com/images/blog/202112/03093732_61a974dc6ed2b58366.webp
可能聪明的你发现了,当终端设备发现目标不再同一个网段的时候,它就把数据包交给网关进行处理,让网关把这个数据包发往目的地。想想平时上网,不管是电脑还是手机,在网卡属性里面都有IP、掩码、网关的参数,只要获取的正常就能够访问互联网,访问互联网的关键就是这个网关,终端设备把去往互联网的流量交给网关进行处理。可能有的朋友还不太理解,这个不要紧,随着学习的深入,这个会经常接触到,并且越发的理解网关的作用,这里记住,不同网段互通,必须依靠网关进行处理。
(4)网关在哪呢?
又回到了这一个问题,网关的IP知道了,通过读取网卡参数,那网关具体是链路中的哪台设备呢?
https://s7.51cto.com/images/blog/202112/03093732_61a974dccbb7450122.webp
上面这个环境只是简化的,可能192.168.255.0/24网段里面有许多的终端存在,访问者就无法确定哪台是网关设备了,所以回到分层的概念,在链路层以太网中,就用MAC地址来定位到具体的设备上,访问者只要知道了出口设备(192.168.255.254的MAC地址是多少,那自然就可以找到它了),可是访问者并不知道出口网关的MAC是多少,这就用刚讲的ARP协议,通过ARP广播请求,在该链路中发出去,出口路由器自然会收到然后通过ARP响应回复,这里我们来抓包看下。
https://s3.51cto.com/images/blog/202112/03093732_61a974dcc1efa24079.webp
抓取路由器的G0/0/0
https://s4.51cto.com/images/blog/202112/03093732_61a974dcc26a39711.webp
打开访问者,客户端信息里面有一个HTTP Client的选型,输入服务器的地址1.1.1.1,点击获取
https://s7.51cto.com/images/blog/202112/03093732_61a974dceba5157397.webp
网页已经打开成功了,这里我们不关心结果,来看看通信的过程。
https://s8.51cto.com/images/blog/202112/03093733_61a974dd0a87026400.webp
通过抓包可以发现,访问者(192.168.255.1)发送了ARP的请求包,询问192.168.255.254的MAC是多少,然后网关设备(192.168.255.254)回应了自己的MAC地址。访问者就把这个MAC地址存放在自己的ARP缓存里面(由于模拟器的问题,这个客户端是看不到ARP表项的)
https://s6.51cto.com/images/blog/202112/03093733_61a974dd36c0811005.webp (5)出口设备的处理方式
访问者在知道了网关的MAC地址以后,就可以定位到具体的设备,开始进行数据封装,然后发送给出口路由器。(从数据包封装的角度来看,如果二层的目的MAC不知道,是不是也无法完成封装)
https://s9.51cto.com/images/blog/202112/03093733_61a974dd22b6570297.webp
出口路由器收到以后,会进行解封装,读取以太网头部,通过目标MAC发现找的是自己,找自己的那就继续解封装,并且通过Type中包含的字段知道上层是IP,读取IP头部后,发现目的IP找的不是自己,那这个时候就分设备了,如果处理的设备是普通的PC、手机,这种是没有路由功能的,则会丢弃,但是如果是三层的网络设备,具有路由功能的,它会执行操作,查询
路由表,找到去往这个目的IP的应该交给谁处理。比如这里目的地址是1.1.1.1,路由器会查询自己路由表中是否有关于去往1.1.1.1的信息,知道则转发,不知道则丢弃。
https://s3.51cto.com/images/blog/202112/03093733_61a974dd0b30e11701.webp
出口路由器查找路由表,发现有1.1.1.1的路由,交给2.2.2.2处理,也就是互联网。
(6)怎么找到互联网的设备呢?
出口路由器通过查询路由表导致交给互联网处理,但是并不知道2.2.2.2的设备是哪台,通常运营商的线路牵到企业走的是光纤线路,二层也是用的以太网协议,在以太网中,不用说大家都知道了,知道对方的MAC地址就能找到对方了,所以出口路由器也会发送ARP请求报询问2.2.2.2的MAC是多少,互联网路由器收到以后进行单播回应。
https://s2.51cto.com/images/blog/202112/03093733_61a974dd3fcc560089.webp
出口路由器知道了2.2.2.2的MAC地址,通过封装把数据包重新打包(封装的二层源MAC是出口路由器G0/0/1接口的MAC,目标MAC是互联网G0/0/0接口的MAC)通过路由表条目信息发送给2.2.2.2(互联网设备)
(7)怎么找到互联网的设备呢?
互联网设备收到以后同样进行解封装,首先看MAC地址是找的自己,上层协议是IP,读取IP头部后,发现IP找到不是自己,同样的自己拥有路由功能,查询路由表,看这个数据包自己能否进行转发出去。
https://s9.51cto.com/images/blog/202112/03093733_61a974dd5024b18280.webp
互联网设备通过查询路由表发现1.1.1.1就在它的身后直连网络,于是互联网设备也会发送ARP报文请求来询问1.1.1.1的MAC是多少,然后WEB服务器收到后进行回应。
https://s6.51cto.com/images/blog/202112/03093733_61a974dd412b543145.webp
(8)WEB服务器收到数据后的处理
互联网设备处理完成后,开始进行封重新把数据打包发送给WEB服务器,WEB服务器收到以后,同样先查看以太网头部发现是自己,通过type知道上层协议是IP,读取IP头部后发现目的IP也是自己,继续上层解封装,直到读取到对应的数据。
(9)WEB服务器回包过程精简(跟来的时候相同)
[*]WEB收到请求后,开始回应,这个时候IP头部的变化:源为自己(1.1.1.1),目的为访问者(192.168.255.1),以太网头部:源为自己,目的为互联网接口的MAC,因为WEB服务器也是通过子网掩码计算,发现192.168.255.1与自己不在同一个网段,交给1.1.1.2网关处理。
[*]互联网收到以后查询路由表,交给出口路由器处理
[*]出口路由器收到以后,继续查询路由表,发现192.168.255.1是身后直连网络,直接封装好数据包从这个口发送出去
https://s6.51cto.com/images/blog/202112/03093733_61a974dd5b6d786868.webp
[*]访问者收到以后,通过层层的解封装,得到了服务器的响应,最终把这个内容呈现在了浏览器里面,变成我们能看懂的形式展现出来。
不同网段通信过程重点回顾
(1)当发起者通过自己的掩码计算出目的IP与自己不再同一个网段的时候,这个数据包会交给默认网关地址处理,如果没有默认网关地址则这个数据包会发送不出去,被丢弃。
(2)找到默认网关的目的MAC地址需要通过ARP协议来完成,否则不知道对方的MAC是多少,无法找到对方,也完成不了以太网头部的封装。(这个一定要切记,可能后续遇到故障,就是因为不知道对方的MAC地址是多少,通信不正常)
(3)网关路由器收到这个数据包的时候,它会看以太网的目的MAC是不是找的自己,如果是继续读取上层,IP目的地址找到不是自己,就通过查询路由表,查看是否有对应的信息条目,有的话则转发,没有则丢弃(路由表转发功能只有三层的网络设备才具有这样的处理功能,普通的PC、手机是不具备的,这个也是我们后面学习的重点)
(4)网关设备通过路由表找到下一台转发设备的信息,如果二层跑的是以太网,同样需要知道对方的MAC地址信息进行封装与链路定位,使用的方法也是ARP协议进行查找,然后把数据包重新封装三层、二层转发给下一台设备--互联网。
(5)互联网设备收到以后执行跟网关设备同样的操作,通过查询路由表知道目的地址在哪,这里目的地址为身后直连网络,所以互联网设备直接通过ARP协议查询到目的的MAC地址多少,然后重新封装数据包,交给服务器。
(6)服务器以后,通过层层解封装,最终读取到了应用层的数据。(解封装的过程要注意,读取到目的MAC为自己,就继续读取上一层,读取到IP目的地址为自己,继续读取上层,所以一个设备收到数据包是否继续解封装读取上层内容,取决于对应层里面的标识是否是自己)
(7)回包的过程跟来的过程一样,同样是服务器层层封装数据包后交给默认网关----中间三层设备解封装到IP头部信息查找路由表查找目的地,然后重新封装,继续转发,这样到达目的地,访问者收到后层层解封装,最终把读取的网页数据,呈现在浏览器里面。
https://s8.51cto.com/images/blog/202112/03093733_61a974ddc219932251.webp
(8)有一个很关键的细节地方,不知道大家有没有发现,IP头部虽然在中间路由器解封装进行读取对应的目的IP参数来查询路由表,但是在重新封装的时候源目IP信息是保持不变的,因为这个目的IP是到达对方的关键,不能被修改。同样以太网头部也被解封装进行读取了,读取的原因是通过目的MAC来判断是否找的是自己,但是你会发现,在重新封装的时候,源目MAC地址是发生了变化的,因为不同链路之间的信息是不一样的,访问者到出口路由器,以太网头部的源是访问者,目标MAC是出口路由器,是为了在这个链路中找到出口路由器的链路位置,出了这个链路范围这个信息就没用了,到了出口路由器到互联网这段链路上,会发现出口路由器会把源MAC变成自己(1号接口的MAC),目的MAC为互联网(2.2.2.2)的,如果还保持着之前的访问者到出口路由器的话,从数据包解封装读取的过程,互联网发现这个MAC不是找自己的,那不就给丢掉了,同样WEB服务器收到了也不直接丢弃,更不会去看IP头部信息了,所以整体的通信过程中,源目IP地址保持不变,源目MAC每经过一个三层设备,是会变成该链路上对应设备的MAC地址信息,只有这个信息才能够在这个链路上找到正确的目标设备,以及对方收到后才能能够正常解封装处理上层的内容进行下一步的操作。
上面那段话可能有点难理解,来举一个生活中的例子
博主8月份准备去四川凉山旅游(媳妇的闺蜜在那,喊了她几次了,这次正好闺女也放假,一起去),通过APP查询,没有直通的车,都需要中转,需要先做高铁到始发站、火车、班车才能抵达目的地,这些需要的车票都通过APP已经订好,做好了行程表规划。
把高铁票、火车票、班车票,每张票只能够在限定的区域内移动,这个区域是不是就跟数据链路层一样,区域内的出发点相当于源MAC,目标地址相当于MAC地址。
https://s6.51cto.com/images/blog/202112/03093733_61a974dd7294994003.webp
整个旅游的行程表是不是就相当于网络层一样,充当定位的功能,起始点相当于源IP,终端相当于目的IP地址。如果整个行程中,只有行程表而没有对应的车票,无法通过这些交通工具抵达目的地,同样,如果只有车票没有行程表,那也抵达不了目的地,因为不知道目标怎么走,需要做什么车,中间怎么换乘。
所以,最终两者配合,既有某个区域的车票又有整个旅游的行程表,才能抵达最终目的地,同样在计算机网络通信中也是一样,通过数据链路层与网络层的对应分层配合实现了最终目的地的通信互访。
整个旅途中不断变化的是交通工具,但是整个旅途的出发点与目标终点保持不变,这就对应了上面提到的,源目IP地址在传输过程中不会变化,只有源目MAC每经过一个链路区域就发生变化。另外同一个链路区域内的转发就依靠的是二层设备(通过MAC地址表进行查询,然后交给对应接口下的终端),不同区域内的数据转发依靠三层设备(通过路由表查询,交给下一个转发设备或者最终目的地处理)。
结合抓包验证理论
https://s9.51cto.com/images/blog/202112/03093733_61a974dd7b8ed32900.webp
分别抓取这三个接口的包,来看看以太网的包,是不是如上面说的发生了变化。(服务器的没法抓)
https://s4.51cto.com/images/blog/202112/03093733_61a974dd7fd3b60416.webp
这里简单点,就Ping一下好了,次数1,如果觉得开三个抓包,分不清楚哪个是哪个的话,可以分别抓,开一个窗口ping 一次。
https://s3.51cto.com/images/blog/202112/03093733_61a974dd8ae6786351.webp
三个链路区域的源目MAC都是变化的,源目IP一直没变。
Windows命令行学习
在实际中不能只会配置网络设备,对于常见的Windows命令使用也得掌握,这样对于我们排错或者查看来说是方便很多的。
(1)进入CMD,通过win键+R组合调用出来运行,然后输入cmd回车
https://s2.51cto.com/images/blog/202112/03093733_61a974ddb108f72132.webp
(2)查看IP、子网掩码、网关等信息
https://s5.51cto.com/images/blog/202112/03093734_61a974de0345193329.webp
通过输入ipconfig可以查看对应网卡上面的IP地址、掩码、网关等信息,但是看不到MAC地址
https://s6.51cto.com/images/blog/202112/03093733_61a974ddd6b5d6007.webp
输入ipconfig /all可以看到Windows上所有主机的更加详细的信息,包括网关等参数。
(3)查看ARP缓存表
https://s5.51cto.com/images/blog/202112/03093733_61a974ddd1d7b38933.webp
可以通过arp -a来查看当前主机的ARP缓存,验证是否正确,通常排错的时候会使用,如果发现错误,可以通过arp -d来清空ARP缓存,也可以使用arp -s来静态绑定(通常会绑定网关),删除某个静态绑定也是通过arp -d后面跟明细。
(4)其他小经验分享
https://s3.51cto.com/images/blog/202112/03093733_61a974ddd856560163.webp
有一个小经验,像Windows系统都带有帮助介绍的,通过ipconfig / 直接回车,Windows识别不出来完整的命令,会把所有的格式跟命令都介绍出来。
小提问
假设一个网络中,本身已经有一台电脑或者设备使用了192.168.1.1的地址,但是由于使用人员不懂计算机网络知识,他也把自己的电脑设置成了192.168.1.1,会惊奇的发现,Windows系统会出现IP地址冲突提示,那么这台主机它是怎么知道地址冲突了的呢?
“承上启下”
至此IP地址、子网掩码、网关、同网段以及不同网段的通信的作用与过程,也把第二篇的链路层与网络层的细节都填补上了,这些内容一次肯定是不能全部吸收的,建议学完后面的知识点后在把前面这些知识点过一次,会有更深入的理解(也可以配合视频一起看,效果更佳),下一篇我们来填补下这次用到一个协议,ICMP,看看它有什么的作用。
作者:一天,公众号:网络之路博客(ID:NetworkBlog)。让你的网络之路不在孤单,一起学习,一起成长。
https://blog.51cto.com/ccieh3c/4740394
页:
[1]