网络包之旅
两个网络
如下拓扑,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响应,那么将会很快,因为在数据包来的路上,各个设备都已经学习并记录了关键信息,知道从哪来到哪去
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
2017-08-09 【译】第36节---基于代码迁移
2017-08-09 【译】第35节---自动迁移
2017-08-09 【译】第34节---迁移
2017-08-09 【译】第33节---种子数据