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

286 天前
 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

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

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

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

需要外网主动向内网发起访问。
FaiChou
286 天前
不良林这视频讲的挺详细的, 属于保存下来隔段时间就刷一遍的网络通讯:

<amp-youtube data-videoid="P38FmPAq09E" layout="responsive" width="480" height="270"></amp-youtube>
shermie
286 天前
我曾经和你有一模一样的疑问,也想过那岂不是一个局域网下最多只能有 65535 个端口映射,后面看了一些书似懂非懂的,但是核心就是 ip:port 做路由映射,看那个日本人写的《网络是怎么样连接的》这本书,比较容易理解
leconio
286 天前
[路由器是如何路由的?(上集)-哔哩哔哩] https://b23.tv/qhvbWWQ
之前看过一个视频,讲的挺好的
Shinglee
286 天前
上面的推荐的不良林视频,建议你先看看。感觉你的整个思路都有问题。
feaul
286 天前
@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
286 天前
1. 一个很常见的误区,家用”路由器“它不是书里面提到的”路由“器,它就是一个 ”NAT 设备“+”二层交换机“的二合一设备。

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

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

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

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

https://www.v2ex.com/t/1027635

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

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

© 2021 V2EX