提问:最近学习网络层协议,一直不理解不同子网的机器如何通信,请大佬指教

2024-03-28 09:15:42 +08:00
 zhyf2901

问题:子网 A 的机器如果向子网 B 机器发送数据

网络结构

如果机器 1 和机器 3 首次通信,流程是什么样的。。

我理解的流程:

  1. 机器 1:构造 ip 报文, 源 ip:192.168.1.2 目标 ip:116.153.22.1
  2. 机器 1:arp 协议,寻找目标 ip 的 mac 地址,找到路由器 B mac
  3. 机器 1:构造数据包 发送到路由器 A ,
    • 源 mac:机器 1
    • 目标 mac:路由器 B
    • 源 ip:192.168.1.2
    • 目标 ip:116.153.22.1
  4. 路由器 A: 到这里就理解不了了,已知的数据包内容完全定位不到 机器 3 ,甚至定位不到路由器 C

已阅读资料: https://cloud.tencent.com/developer/article/1173761 https://blog.csdn.net/qq_42911741/article/details/132514748

6038 次点击
所在节点    Linux
64 条回复
nekoneko
2024-03-28 14:24:12 +08:00
这俩没法通信, 通信的前提是一方是在广域网上内被找到的.
所以需要内网穿透
sketcherly
2024-03-28 14:25:33 +08:00
wanguorui123
2024-03-28 14:35:46 +08:00
先得学习 NAT 协议,然后了解下 TCP 打洞原理
IDAEngine
2024-03-28 14:39:48 +08:00
网关都不一样,不能通信,除非搭建 VPN 让机器在同一个子网,比如用 ZeroTier/LogMeIn/TailScale 这些
zeroDev
2024-03-28 14:50:43 +08:00
@zhyf2901 #14
https://127.0.0.1:1080
应用协议://ip 层(地址和 ip )
地址是路由器管得
nekoneko
2024-03-28 14:51:34 +08:00
dode
2024-03-28 15:07:48 +08:00
每一台网络设备都会查看数据包是不是发给本网络下的对端设备,不是的话数据包就会发送给这个设备的默认路由

每一个网关路由设备会保存当前网络和其它网络 TCP&UDB 会话列表,记录网络连接状态
tool2d
2024-03-28 15:21:00 +08:00
你这情况比较特殊,需要自己手动构造路由表,估计要上软路由。

普通路由器都会限制 WAN 主动传入流量,甚至会主动 DROP WAN 端口的向内流量。一般都是 LAN 向外传,你需求是刚好相反的。

需要外网主动向内网发起访问。
FaiChou
2024-03-28 15:25:16 +08:00
不良林这视频讲的挺详细的, 属于保存下来隔段时间就刷一遍的网络通讯:

<amp-youtube data-videoid="P38FmPAq09E" layout="responsive" width="480" height="270"></amp-youtube>
shermie
2024-03-28 15:36:59 +08:00
我曾经和你有一模一样的疑问,也想过那岂不是一个局域网下最多只能有 65535 个端口映射,后面看了一些书似懂非懂的,但是核心就是 ip:port 做路由映射,看那个日本人写的《网络是怎么样连接的》这本书,比较容易理解
leconio
2024-03-28 16:16:05 +08:00
[路由器是如何路由的?(上集)-哔哩哔哩] https://b23.tv/qhvbWWQ
之前看过一个视频,讲的挺好的
Shinglee
2024-03-28 16:19:52 +08:00
上面的推荐的不良林视频,建议你先看看。感觉你的整个思路都有问题。
feaul
2024-03-28 16:46:16 +08:00
@wy315700 说的不错,因为在不同的私网里,并且私网路由无法在公网上传播,
首先先把 3 的端口映射出来。在 B 上做 C 的映射,在 C 上做 3 的映射,这样就是 1 直接访问 B 了,
1 ,机器 1 源 ip:192.168.1.2 目标 ip:116.153.22.2 发现是跨网段的,直接转发给网关
2 ,路由器 A 做源 NAT 把源地址更换 源 ip:116.153.22.1 目标 ip:116.153.22.2
3 ,路由器 B 查找映射表 做目的 NAT 把目的地址更换 源 ip:116.153.22.1 目标 ip:192.168.1.2
4. 路由器 C 查找映射表 做目的 NAT 把目的地址更换 源 ip:116.153.22.1 目标 ip:192.168.0.100
cdlnls
2024-03-28 16:51:01 +08:00
1. 一个很常见的误区,家用”路由器“它不是书里面提到的”路由“器,它就是一个 ”NAT 设备“+”二层交换机“的二合一设备。

2. 真正的路由器 它只负责转发数据包,即“路由”。进过它的包进去是啥,出去还是啥。

3. 虚假的路由器(家用路由器/光猫),它看上去在“路由”,实际上背地里在做 NAT 地址转换。

两个不能混在一起谈。
Songxwn
2024-03-28 16:54:26 +08:00
不同子网的机器,是扔给网关的,二层 MAC 地址是网关的。
feaul
2024-03-28 17:05:10 +08:00
@zhyf2901 对是的,做的映射的数量是有限制的,实际的需求中不会做怎么多的映射,如果非要映射怎么多,可以配置多个公网地址。
julyclyde
2024-03-28 21:09:13 +08:00
首先要理解:
冲突域、数据链路层 访问控制子层
广播域、网络层
这两组关系
smallfount
2024-03-28 21:42:05 +08:00
你不能理解是因为你一上来就错了啊。。。
机器本身也会带路由表。。。
你的目标在本地带的明细路由不存在的情况下。。
机器的路由表会把你的包丢去默认路由指向的 IP, 也就是网卡的网关地址。
这时候 MAC 就不在有太大的作用了。。。数据包进到网关 IP 后就会根据路由设备的路由表转发流量
如果有 NAT 就映射地址。。没 NAT 就直接根据目标出去。
公网地址大部分都是默认路由出去了就。。
zhyf2901
2024-03-28 21:44:02 +08:00
多谢大家,给了很多思路和学习资料,暂时看不完,感觉要补的课有点多,我去回炉重造一下。
crab
2024-03-28 22:01:31 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://yangjunhui.monster/t/1027635

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX