hsqiyaqiang 发表于 2015-10-12 09:43:47

GNS3用路由器模拟PC的几个误区

拓扑如下:
http://imgsrc.baidu.com/forum/w%3D580/sign=27567ed53f12b31bc76ccd21b6193674/0dfe9c44ebf81a4c05d40e5bd12a6059272da68f.jpg

hsqiyaqiang 发表于 2015-10-12 10:02:01

很多人在做实验的时候,都喜欢拿路由器模拟PC(no ip routing之类的)
但实际上PC和路由器的工作机制相同吗?这么模拟的结果会不会误导人呢?




参照上述拓扑PC1 – PC2的场合:


PC1的arp表如下
http://imgsrc.baidu.com/forum/w%3D580/sign=6597704e8c13632715edc23ba18ea056/9610ba44ad345982c6ff09000af431adcaef847c.jpg

PC1去往10.26.218.235,由于PC1不知道10.26.218.235的MAC地址(无法封装帧)
此时PC1检查自身路由表(如下)
http://imgsrc.baidu.com/forum/w%3D580/sign=62f2734e8c13632715edc23ba18ea056/9610ba44ad345982c19a0a000af431adcaef8459.jpg

得知10.26.218.235和自身处于同一网段
(PC设置IP地址和子网掩码会自动生成一条直连路由,设置网关地址会自动生成一条缺省路由)

PC1判断目的IP(10.26.218.235)和自身处于同一网段,但又不知道目的IP的MAC地址,此时PC1会发送arp请求,询问10.26.218.235对应的MAC地址
http://imgsrc.baidu.com/forum/w%3D580/sign=48b6db4b3f01213fcf334ed464e636f8/66c4d23d70cf3bc75a9b227ed700baa1cf112ad2.jpg

10.26.218.235会应答PC1


PC1收到应答后,更新本地arp表
http://imgsrc.baidu.com/forum/w%3D580/sign=7e4a7fbcaed3fd1f3609a232004f25ce/fa20b064034f78f00bf776617f310a55b1191cf5.jpg
PC1知道了10.26.218.235的MAC地址,于是可以进行帧的封装,进而完成通信
http://imgsrc.baidu.com/forum/w%3D580/sign=742dafab4d36acaf59e096f44cd88d03/31833e1f95cad1c8184410b5793e6709cb3d51f6.jpg



PC1 – PC3的场合(PC填写正确的网关地址):

PC1的arp表如下
http://imgsrc.baidu.com/forum/w%3D580/sign=61c17ead4dfbfbeddc59367748f1f78e/5823266d55fbb2fb7878b780494a20a44723dc1a.jpg

PC1去往10.26.220.1,由于PC1不知道10.26.220.1的MAC地址(无法封装帧)
此时PC1检查自身路由表(如下)
http://imgsrc.baidu.com/forum/w%3D580/sign=c88f155e18178a82ce3c7fa8c602737f/7a061146f21fbe0921ca2c866d600c338544addd.jpg

得知10.26.220.1不和自身处于同一网段
但PC1根据缺省路由得知去往10.26.220.1下一跳是10.26.218.233

此时PC1会发送arp请求,询问下一跳(10.26.218.233)的MAC地址
http://imgsrc.baidu.com/forum/w%3D580/sign=c009aa6d3dc79f3d8fe1e4388aa0cdbc/1fda9182b9014a90ff37a92faf773912b21bee60.jpg

网关收到arp请求后会应答PC1

PC1收到应答后更新本地arp表
http://imgsrc.baidu.com/forum/w%3D580/sign=b6af5713cd1349547e1ee86c664f92dd/96e6cf0735fae6cd93f944f309b30f2443a70f24.jpg

PC1知道了10.26.218.233的MAC地址后,去往10.26.220.1的时候,封装帧的时候目的MAC地址为10.26.218.233的MAC地址(如下)
http://imgsrc.baidu.com/forum/w%3D580/sign=3d09d0f7b519ebc4c0787691b227cf79/083a8b529822720e48cb0d687dcb0a46f31fab6c.jpg




PC1 – PC3的场合(PC不填写网关地址):
http://imgsrc.baidu.com/forum/w%3D580/sign=6514704e8c13632715edc23ba18ea056/9610ba44ad345982c67c09000af431adc9ef84ff.jpg

PC1去往10.26.220.1,由于PC1不知道10.26.220.1的MAC地址(无法封装帧)
此时PC1检查自身路由表(如下)
http://imgsrc.baidu.com/forum/w%3D580/sign=8330c7b58c82b9013dadc33b438ca97e/0b8be91fbe096b63bae8b2c20a338744e9f8acf8.jpg


PC1根据自身路由表无法得知怎么去往10.26.220.1
(由于PC1没有填写网关地址,因此PC1不会有缺省路由)

此时PC1根本就不会发送arp请求10.26.220.1的MAC地址(如下)
http://imgsrc.baidu.com/forum/w%3D580/sign=21a393f60f23dd542173a760e108b3df/3437fdcd7b899e51e503d58644a7d933ca950de4.jpg
PC1不发送任何arp信息,直接返回“目的主机不可达”




PC1 – PC3的场合(PC填写错误的网关地址):
http://imgsrc.baidu.com/forum/w%3D580/sign=6cdaa2560cd162d985ee621421dea950/92deab7eca8065386205488191dda144af348286.jpg

PC1去往10.26.220.1,由于PC1不知道10.26.220.1的MAC地址(无法封装帧)
此时PC1检查自身路由表(如下)
http://imgsrc.baidu.com/forum/w%3D580/sign=b9d1830da20f4bfb8cd09e5c334e788f/275a42ee3d6d55fb89289ab46b224f4a22a4dd87.jpg


得知10.26.220.1不和自身处于同一网段
但PC1根据错误的缺省路由得知去往10.26.220.1下一跳是8.8.8.8

此时PC1会发送arp请求,询问错误下一跳(8.8.8.8)的MAC地址
http://imgsrc.baidu.com/forum/w%3D580/sign=4c7ac592ef24b899de3c79305e071d59/3b3e2187e950352aa21eca9a5543fbf2b3118b76.jpg

Arp是二层广播,该广播域内的所有节点(包括正确的网关地址10.26.218.233)都能收到这份arp请求,但正常的情况下,由于网关未开启代理arp特性,因此不会应答这份目的IP不为自己的arp请求

但如果网关地址开启了代理arp特性(例如思科的路由器)此时网关会应答这份arp请求,告诉PC1我就是8.8.8.8,PC获悉了8.8.8.8的MAC地址就可以进行帧的封装,从而完成通信


总结:
PC在去往一个目的IP的时候,需要先检查自身路由表来判断目的IP是否可达
如果目的IP可达,并且和PC在同一个网段,PC直接发送arp请求目的IP的MAC地址
如果目的IP可达,但不和PC在同一个网段,PC直接发送arp请求网关IP的MAC地址
如果目的IP不可达,PC不予理会(不会发送arp请求)




误区1:
MS系统的PC去往非直连网段IP的时候,不会发送arp询问非直连网段IP的MAC地址信息,PC的做法是直接检查自身路由表,发送arp请求网关的MAC地址
(如PC已知网关的MAC地址则不发arp)


误区2:
很多教学视频里在做arp实验的时候,都会拿“路由器来模拟PC(no ip routing)”
但路由器的发包机制和PC不相同
以思科的GNS3为例,路由器在no ip routing模拟PC后,在上述情况下会发送一份arp请求,请求10.26.220.1的mac地址,网关如果开启了代理arp特性会应答这份arp请求,从而使得“PC”完成通信(但真实环境中PC根本就不会发送arp请求)


误区3:
http://imgsrc.baidu.com/forum/w%3D580/sign=74d0ac4e52e736d158138c00ab514ffc/9ef0e3dcd100baa101cfa5294110b912cafc2e8a.jpg
在这个拓扑中,GNS3路由器模拟PC,双方是可以互相ping通的,但真实的PC不会
为什么呢?
其实答案很简单,路由器模拟PC需要关闭路由功能,而PC发帧时要检查自身路由表,这两者就已经相斥了


楼主之所以写这一篇贴子,是因为偶然一次在论坛里说 闫辉2015年第四讲里说代理arp有点错误,就遭到群体攻击,楼主首先说明一下,闫辉是我心中的大神,这点没问题,但是人就会出错,讲错一点没什么,大体都是正确的就行了,另外很大一部分人喜欢拿模拟器里的实验做真知,楼主说明所以然也不能令他们信服,他们只认同自己曾经错误的实验

hsqiyaqiang 发表于 2015-10-12 10:07:14

上述图片,结论,全部收录在 “ PC ARP.doc”里,可供下载交流
页: [1]
查看完整版本: GNS3用路由器模拟PC的几个误区