路由器对IP包做了什么处理?
[bold]网关路由对数据包所做的处理?[/bold][bold][/bold]
[italic]
[/italic]
通过Ether Peek抓取IP包,分析这些数据包后我发现它们有一个共同特征(都含有如下四部分信息):
Destination:
目的主机的MAC地址Source:
源主机的MAC地址
Source IP Address:
目的IP(不一定是与Destination MAC对应的IP)Dest. IP Address:
源IP(不一定是与Source MAC对应的IP) 我想得知网关路由对数据包所做的处理,做了以下试验:
1 Ping 某主机(该主机与我的网关路由器处于同一级局域网,也就是我所在子网的上一级网络)
2 抓包
3 总结一共抓取到了10个有关的IP包(如下统计)
ARP请求 1个 由本机发出广播,查询我使用的网关的MACARP应答
ARP应答 1个 由我的网关路由发出ICMP Request
[size=3][font=宋体]ICMP Request 4个 包中部分信息如下[/font][/size]
Destination:
我的网关路由MACSource:
我的网卡MAC
Source IP Address:
我的IPDest. IP Address:
ICMP Response 4个 包中部分信息如下
Destination:
我的网卡MACSource:
我的网关路由MAC
Source IP Address:
目标IPDest. IP Address:
我的IP 我想得知网关路由对数据包所做的处理,但是我无法抓取到我的ICMP Request包通过路由后的包。仔细一想,我虽然不能抓取到我的ICMP Request包通过路由后的包但是我能抓取到目标主机返回的数据包通过路由后的数据包。我上面所抓取的4个Arp Response包就是这样的包。
推测一:
分析这四个包,我推测如下:通过网关路由器的数据包,网关路由器并没有修改“Source IP Address:
, Dest. IP Address:”这两部分内容,只是修改了“Destination:,Source:”这两部分内容。
推测二:
根据我的这个推测我试图解释整个Ping过程的数据包发送情况(假设所有机器的ARP缓存刚开始都是空的):当我在CMD下输入”Ping IP”并按下回车后,本地网络服务程序先判断该IP是否是同一局域网的IP(通过子网掩码与该IP进行运算)。如果是内网IP则先通过ARP广播获取目的主机的MAC,得到MAC后网络服务程序就将含有ICMP包发送至目的主机。如果不是内网IP则先获取网关路由的MAC,然后将ICMP包先发至网关,网关收到该数据包,先判断包中的“Dest. IP Address:”,然后决定是继续发送到下一路由还是发送到同一级的网络主机(当然这一过程也少不了ARP查询)。总之,这样一级一级地传送,最终这个ICMP包被传送到了目的主机。目的主机利用包中的“Source IP Address:”信息产生响应的ICMP应答信息数据包,该包中的“Dest. IP Address:”与收到的ICMP请求包中的“Source IP Address:”一致。这样该数据包就再通过一级一级的传送最终到达我的机器。
我这样的推测似乎合理,但是如果我发送的ICMP请求中的“Source IP Address:”是内网IP,那么目的主机怎么能正确地将响应数据包发送给我呢?
请问我的推测一正确吗?推测二呢?如果推测二正确那最后的那个问题该如何解释呢?
[[italic] 本帖最后由 redice 于 2007-11-29 06:26 编辑 [/italic]]