网络包之旅
两个网络
如下拓扑,aaaa代表mac地址,.10代表ip地址,123代表端口
发送过程
假如我们想把一个数据从A发D
0.一切开始之前,因为这个网络拓扑,所以在网络就绪之初,路由器拿出小本本在路由表
记录下:
eth1 11.11.11.0/24
eth2 22.22.22.0/24
-
首先,A要给D发包,A是知道D的IP地址的
-
A构建一个数据
DATA
L3
SRC:11.11.11.10
DST:22.22.22.40
-
A首先要找它的网关(11.11.11.1)
-
于是,A就发一个ARP请求到11.11.11.1。
请求发出,交换机swX收到消息,于是交换机拿出小本本在MAC地址表
中记录下
2 aaaa.aaaa.aaaa
-
交换机此时还不知道谁是11.11.11.1,于是它向所有连接它的设备转发ARP请求
-
B收到ARP请求,一看,不关我事,忽略
-
路由器收到ARP请求,一看,找我的,赶紧拿出小本本记录,记在
ARP表
中
11.11.11.10 aaaa
-
记录之后,路由器得回复这个ARP请求,于是发送响应
-
交换机swX收到请求,于是拿出小本本在
MAC地址表
中记录下
3 ee01.ee01.ee01
-
交互机转发请求,这次它已经知道A是连接2口的(step4),所以只会从2口出,发给A
-
A 收到响应,也拿出小本本在
ARP表
中记录下
11.11.11.1 ee01
步骤3到步骤11,只是为了找到网络出口。我们可以看到在此过程中,主机、交换机、路由器会记录一些东西,目的就是后面每次干活都来这么一次“找出口”的操作
- 此时A知道了网络出口,于是它把发送的数据再完善下
DATA
L3
SRC:11.11.11.10
DST:22.22.22.40
L2
SRC:aaaa.aaaa.aaaa
DST:ee01.ee01.ee01
-
开始发送数据,swX收到消息,看了L2的数据,一查小本本就知道要发给路由器(而不是广播)
-
路由器收到包,把L2去掉了,它是干L3的活的。
DATA
L3
SRC:11.11.11.10
DST:22.22.22.40
数据包终于到了路由器
-
路由器一看,你要到22.22.22.0/24网络去,翻出小本本一看,从eth2口出
-
路由器找到网络可不行,还得找到谁是22.22.22.40。
有了上面的经验,你可能想到了,就是发送ARP请求,看看在网络内部谁响应。
于是,路由器就开始发送一个ARP请求,说我要找22.22.22.40 -
交换机swY收到ARP请求,拿出小本本在
MAC地址表
记下
4 ee02.ee02.ee02
-
交换机swY广播给C和D
-
同理,C忽略
-
D一看,找我的,先记录到
ARP表
22.22.22.1 ee02
-
D响应ARP请求
-
交换机swY收到,记录
MAC地址表
5 dddd.dddd.dddd
- 交换机swY转发ARP响应给路由器,路由器也更新
ARP表
22.22.22.40 dddd
步骤16到步骤23还是网络内部找目标,通过发送ARP请求,找到了目标主机。同时,路由器、交换机、主机也更新了他们对应的表,下次就不会这么麻烦了
- 路由器更新包
DATA
L3
SRC:11.11.11.10
DST:22.22.22.40
L2
SRC:ee02.ee02.ee02
DST:dddd.dddd.dddd
-
开始发包,交换机swY收到包,经过刚才的学习,它知道发给D
-
D收到包,去掉L2 L3,拿到DATA
DATA
如果D要给A响应,那么将会很快,因为在数据包来的路上,各个设备都已经学习并记录了关键信息,知道从哪来到哪去
Ref
https://www.youtube.com/watch?v=rYodcvhh7b