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

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 条回复
zhyf2901
2024-03-28 10:02:19 +08:00
@MozzieW 是写错了,目标 ip 是 116.153.22.2
wy315700
2024-03-28 10:09:28 +08:00
@zhyf2901
ip 层或网络层没有端口
端口是 tcp 或者 UDP 上面的

你的路由器 AB 和路由器 C 其实是不同的东西。
路由器 AB 其实是网关。链接了你内网和外网并且进行了地址转换。
路由器 C 其实应该叫做三层交换机。

65535 个端口会不会不够用

现在都是对称 nat ,够用了。
gefranks
2024-03-28 10:19:33 +08:00
如果我没理解错的话, 这个网络 A, B 里面都有 192.168.1.x 这个子网, 从机器 3 的包在回 1 的时候在 C 都会有问题, overlap 了.
以前 cisco press 有本书, ip addressing fundamentals 对 ipv4 这块讲的不错.
Cisco Packet Tracer 可以模拟.
proxytoworld
2024-03-28 10:29:58 +08:00
如果发送的数据包不是自己的 IP ,会根据路由表查询,在自己路由表里面没有,则会发给默认路由,数据包到了路由器,路由器会查询自己的路由表,这个路由表根据各种算法来的。
Tumblr
2024-03-28 10:30:43 +08:00
推荐 YouTube 的一个频道: https://www.youtube.com/@PowerCertAnimatedVideos

OP 提出的这个例子中,既涉及到了路由,也涉及到了地址转换,还是个相对比较复杂的场景,建议先从同一局域网下不同 subnet 的开始分析。
Cu635
2024-03-28 10:33:49 +08:00
重修本科的网络基础课程吧。
royking930911
2024-03-28 10:51:48 +08:00
Cisco Packet Tracer 模拟器跟一下就知道了
楼主这个拓扑图跟广域网没啥关系 机器 1 和 3 通信根本不会走到广域网上去
可以这么理解 路由 CD 相当于挂在路由 A 下面
机器 3 4 N 向机器 1 2 发数据这个很简单,直接数据包往网关地址丢就行了 路由器拆包以后发送到对应端口 因为下层网络是知道上层网络的出口地址的 就是内网网关
关键是机器 1 2 向 3 4 N 发数据
由于路由器 A 并不知道 192.168.0.0 这个子网的路径 需要在路由器 A 设置路由表 将 192.168.0.0 的数据丢到 192.168.1.2 这个地址
shilyx
2024-03-28 10:52:58 +08:00
1 访问 3
情况 1 ,3 在自己的外网网关做端口映射
情况 2 ,3 在自己的外网网关那做 DNAT
情况 3 ,3 和 1 进行 udp 打洞
情况 4 、1 和 3 经 1 或 3 的外网或第三方加入一个 vpn
lcy630409
2024-03-28 11:14:50 +08:00
就和邮局的系统一样,网络寻址 通俗讲很简单的
而且你的理解有问题,要分层次理解,不要放一起混淆
而且路由器 C 和 D 有问题,路由器 C 和 D 的 ip 应该是 B 网段的,才能联通,CD 的网关应该是 B

你说的这段网络层( ip 层)的流程就是:
机器 1 根据自身路由表 找 116.153.22.2 因为没有该路由 所以走默认路由(路由器 192.168.1.1 )
路由器 A 收到你的消息之后会在根据自身路由表找寻 116.153.22.2 ,没有的话 还是走默认路由 也就是运营商,一路找过去,一直抵达路由 B ,至此完成网络层的链接

在传输层来讲
在路由器 A 收到机器 1 的数据(访问 116.153.22.2:80 )的时候 路由器会记录机器 1 的发出端口(比如 6666 ),再根据自己的安全等级( nat 类型)来选择一个端口(比如 nat 为 full 那么出发端口同样是 6666 )发到 116.153.22.2 ,这就是 nat 映射表( 192.168.1.2:6666->116.153.22.1:6666 ),此时数据经过网络层的方法达到路由器 B
路由器 B 解析数据 发现有 nat 数据,就根据自身的映射表查找访问端口 6666 是否有记录,没有就找默认转发( DMZ ),DMZ 也没有就断开链接,有记录的话就转发到相应的 ip 上去,这个相应的 ip 如果还是路由类型 继续上述步骤,如果是最终终端 就根据自身端口是否打开来接不接数据
lcy630409
2024-03-28 11:22:00 +08:00
再通俗一点 打个例子,ems 快递
什么 ARP 这些 接口层 你可以理解为现实中 你和本地邮局之间的物理路径,就是区你最近的邮局的路
ip 网络层 可以理解为你的地址 门牌号,能让本地邮局的快递员找到你
UDP TCP 传输层 可以理解为信封 信封上写着地址和包裹着内部数据 , 在快递员把信封给你的时候 你知道要给谁(收件人是你家谁)
http dns 这类 应用层 就是内部数据,最终收件人拿到信封 拆开后 看了信件内容 才能知道对方发了个啥 再根据自身的功能回啥信
kalinzhang
2024-03-28 11:25:29 +08:00
之前上网络课程有一个 lab 就是做的路由,如果想动手的话推荐一个小软件 https://mininet.org/;可以本机搭一个虚拟网络,跑几个现成的小 server 然后 traceroute 看一看
evill
2024-03-28 11:39:59 +08:00
可以看看 calico 的 IPIP ,讲解的很清晰
cybort
2024-03-28 12:56:17 +08:00
我理解楼主不是要问不同网段的机器怎么通信,而是没有公网 ip 的机器怎么通信。其实本来是不可以的,因为有了 NAT 把局域网上的机器视作公网出入口的机器的一个应用,才能相互通信,但这都属于是补丁,你自己做个私有协议也可以实现。
ben666
2024-03-28 13:04:57 +08:00
1. 同一个子网内的主机可以通过 ARP 寻址,直接通讯
2. 跨子网,需要先把报文发给网关(可以是路由器、交换机等网络设备),网关再转出去

抓包分析一下有助于理解,如果能读 C 代码,可以直接看看这部分协议栈代码
dperf 测试仪的协议栈比较简洁,可以看看 ARP 、ICMP 、UDP 是怎么实现的
https://github.com/baidu/dperf
shoco
2024-03-28 13:05:51 +08:00
上课没好好听
goodryb
2024-03-28 13:10:29 +08:00
简单看了下,你是 2 层、3 层混在一起,你都提到子网,那就好好看 3 层路由转发的逻辑,跟 mac 、arp 没啥关系

本机有路由表、 路由器也有路由表,都是按照路由表来转发的
zhaoxiaofeng
2024-03-28 14:05:24 +08:00
基础有点差,可以先搜下二三层转发,把流程弄清
xwwsxp
2024-03-28 14:09:59 +08:00
EvanQu
2024-03-28 14:17:46 +08:00
https://sspai.com/post/64634
可以看下 一共 7 篇
小白也能看懂的网络基础 由浅到深
zchyit
2024-03-28 14:20:59 +08:00
1 、机器 1 在 TCP/IP 层判断与机器 3 不在同一子网,于是将数据包转发给默认网关(即路由器 A ,机器 1 通过 ARP 获取默认网关的 MAC ,并填充到报文中,此时源目 IP 分别是 192.168.1.2 和 116.153.22.2 )。
2 、默认网关(路由器 A )收到报文,发现目的 MAC 是自己,于是收下,转交 TCP/IP 层处理。默认网关(路由器 A )发现目的 IP 在不同子网,同样转发给自己的默认网关 116.153.22.X ,并做 NAT 地址转换(此时源目 IP 分别是 116.153.22.1 和 116.153.22.2 ),接下来过程在 ISP 内部,我们快进到路由器 B 的上一跳。
3 、此时报文到达路由器 B ,需要根据 IP 和端口做 NAT 地址转换(此时源目 IP 分别是 116.153.22.1 和 192.168.0.100 ),转发到机器 3 (这里只考虑这是一次正常的回包,如果机器 1 是首次通信,还涉及内网穿透知识,背景不详,不作展开)。

依稀记得是这样的,可能有一些细节没提到。

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

https://yangjunhui.monster/t/1027635

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

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

© 2021 V2EX