本地服务网络迁移设置问题

首先是相关的网络硬件设备的关系

1. 光猫 (Optical Network Terminal / Modem)

  • 核心功能信号转换
    • 它将光纤中传输的光信号转换成网线中传输的数字信号(以太网信号),反之亦然。
  • 角色定位:您家庭网络与互联网服务提供商(ISP)网络之间的边界和桥梁
  • 工作层级:主要工作在物理层和数据链路层。
  • IP地址
    • WAN侧:从ISP获取一个IP地址。在您的情况下,这是一个公网静态IP。这是您家在互联网上的“门牌号”。
    • LAN侧:它自身也是一个网关,通常拥有一个私网IP地址(如 192.168.0.1192.168.1.1),并为其下连接的设备(如您的路由器)分配私网IP地址。
  • 常见模式
    • 桥接模式:此时光猫只做纯粹的信号转换,将网络“透传”给后面的路由器,由路由器进行拨号、获取公网IP和管理内网。这是最推荐的方式。
    • 路由模式:此时光猫不仅完成信号转换,还充当了路由器和网关的角色(就像您当前的设置)。它自己拨号,获取IP,并创建第一个内网。

2. 路由器 (Router)

  • 核心功能网络寻路与转发
    • 它连接两个或多个不同的网络(比如您的家庭私网和互联网公网),并根据IP地址决定数据包该往哪里走。
  • 角色定位:不同网络之间的交通警察和翻译官
  • 工作层级:主要工作在网络层。
  • 关键技术
    • NAT:这是关键!它将您内网多个设备的私网IP(如 192.168.1.x“翻译” 成一个对外的公网IP(在您案例中,是路由器的WAN口IP 192.168.0.10,而这个IP最终又被光猫的NAT翻译成公网ip)。这使得您多台设备可以共用同一个公网IP上网。
    • DHCP:通常路由器会为连接它的设备(手机、电脑、服务器)自动分配私网IP地址。
    • 端口转发:将来自外部的、访问特定端口的数据,精准地转发给内网中指定的某台设备。
  • IP地址
    • WAN口:从一个上层网络设备(这里是光猫)获取IP。在您案例中,是动态获取的 192.168.0.10
    • LAN口:它自己有一个固定的私网IP(如 192.168.1.1),并创建了一个新的内网网段(如 192.168.1.x)。

3. 网关 (Gateway)

  • 核心功能网络的出口
    • 网关是一个逻辑概念,指一个网络通向其他网络的“大门”。对于网络内的设备来说,“网关”就是它们要把数据包发往外部世界时,第一个要投递的地址
  • 角色定位默认的下一跳地址
  • 实体:网关通常不是一个独立的物理设备,而是由路由器或具有路由功能的光猫来扮演这个角色。
    • 在您的服务器看来,它的网关就是路由器的LAN口IP(例如 192.168.1.1)。
    • 在您的路由器看来,它的网关就是光猫的LAN口IP(例如 192.168.0.1)。

联系总结

  • 光猫让物理信号得以接入。
  • 路由器在信号之上建立逻辑网络并管理数据流向。
  • 网关是路由功能的具体体现,是数据流出网络的第一个节点。
  • 在典型的家庭网络中,光猫和路由器可能合二为一(一体机)。在您的设置中,它们是分开的,形成了“光猫(路由模式) -> 路由器 -> 服务器”的双层网络结构。

相关服务的功能

1. NAT - 网络地址转换

核心要解决的问题: IPv4地址枯竭。不可能为互联网上每台设备都分配一个公网IP。

基本思想: "共用门牌号"。让一个局域网内的所有设备共用一个对外的公网IP地址。

工作原理:
NAT设备(通常是您的路由器)扮演了一个"翻译官"和"前台总机"的角色。

  • 出方向(内网设备访问外网):
    1. 内网设备(如您的手机,IP 192.168.1.101)想要访问谷歌(8.8.8.8)。
    2. 数据包到达路由器,源IP是 192.168.1.101,源端口是随机的一个高端口(如 54321)。
    3. 路由器执行NAT: 它将这个数据包的源IP替换成自己的公网IP(WAN口IP),同时将源端口替换成一个新的随机端口(如 60001)。
    4. 路由器在自己的NAT转换表中记录一条映射关系:(内网IP:内网端口) <-> (公网IP:新端口),即 (192.168.1.101:54321) <-> (123.183.148.254:60001)
    5. 修改后的数据包被发往互联网。
  • 入方向(外网响应内网设备):
    1. 谷歌的响应数据包到达您的路由器,目标地址是 公网ip:60001
    2. 路由器查询自己的NAT转换表,发现端口 60001 对应着内网的 192.168.1.101:54321
    3. 路由器执行反向NAT: 它将数据包的目标IP改回 192.168.1.101目标端口改回 54321
    4. 修改后的数据包被转发给内网的正确设备。

在您场景中的应用:
您设置的端口转发 是一种特殊的、预设的静态NAT规则。它告诉路由器:"无论谁,只要访问我公网IP的 12354 端口,就直接转发给内网的 192.168.1.100 的指定端口,无需查询动态NAT表。"


2. DHCP - 动态主机配置协议

核心要解决的问题: 手动为网络中的每一台设备配置IP地址、子网掩码、网关、DNS等参数极其繁琐且容易出错。

基本思想: "自动配置服务"。让设备一接入网络,就能自动获取所有必要的网络配置信息。

工作过程(DORA四步曲):
这个过程在您设备开机或连接WiFi时瞬间完成。

  1. D - Discover(发现):
    • 新接入的设备(DHCP客户端)在本地网络中以广播形式发送一个 DHCP发现包,大喊:"有没有DHCP服务器啊?我需要一个IP地址!"
  2. O - Offer(提供):
    • 网络中的DHCP服务器(通常是路由器)听到广播后,从自己的IP地址池中挑选一个空闲的IP,然后向客户端发送一个 DHCP提供包,说:"我用这个IP地址给你,你要不要?"
  3. R - Request(请求):
    • 客户端可能会收到多个提供(如果网络中有多个DHCP服务器),它会选择其中一个,然后再次广播一个 DHCP请求包,宣布:"我接受这个IP地址!"
  4. A - Acknowledgment(确认):
    • 被选中的DHCP服务器最终发送一个 DHCP确认包,正式将该IP地址分配给客户端,并附上租期、子网掩码、默认网关、DNS服务器等完整信息。

在您场景中的应用:

  • 您的路由器从光猫那里通过DHCP获取了 192.168.0.10 这个IP。
  • 您的服务器从路由器那里通过DHCP获取了 192.168.1.100 这个IP。

数据在网络上传输的过程

核心原理:协议栈与封装

想象一下寄一封国际信件:

  1. 您用中文写下内容(应用层)。
  2. 把信纸放进信封,用英文写上收件人姓名和街道地址(传输层/网络层)。
  3. 再把信封放进一个大邮包,邮包上用邮政系统通用代码写上目的国家/城市/邮编(数据链路层)。
  4. 邮包被装上飞机(物理层)。

尽管全程运输的都是"同一个物理实体",但不同环节的人根据不同的"格式约定"(语言/代码)来读取和处理信息。

网络通信也是如此,它遵循一个标准的模型(如TCP/IP模型)。

数据格式的识别:逐层解封装

接收端的网卡和操作系统会执行一个与发送端完全相反的、自底向上的过程,称为解封装。每一层都只理解和处理自己那一层的"信封",然后将其内部数据传递给上一层。

以下是每一层如何识别和处理数据的详细过程:

1. 物理层:从信号到比特

  • 输入:电信号(网线)、光脉冲(光纤)、电磁波(Wi-Fi)。
  • 处理:网卡根据物理介质的编码方案(如曼彻斯特编码、NRZ等)将模拟信号解码成数字的比特流(0和1)。
  • 关键:这一步只关心时序、电压/光强,将连续的信号流转换成离散的比特流。它不关心比特的含义。

2. 数据链路层(如以太网):从比特到帧

  • 目标:识别一个完整的数据块(帧) 的开始和结束,并交给正确的上层协议。
  • 输入:物理层上传的原始比特流。
  • 如何识别帧?
    • 前导码和帧起始定界符:以太网帧以一段固定的101010...序列开始,最后以10101011结束。这就像"注意,下面开始是一封信!"的喊话,让接收方进行时钟同步,并精确地找到帧的开始位置。
  • 如何解析帧内容?
    • 帧有非常严格的格式。接收方"知道":
      1. 紧接在定界符后面的是14字节的帧头
      2. 这14字节中,前6个字节是目标MAC地址接着6个字节是源MAC地址最后2个字节是类型字段
    • 接收方读取目标MAC地址,如果与自己的MAC地址或不匹配(且不是广播/组播),则直接丢弃该帧。
    • 如果地址匹配,它读取类型字段。这个2字节的代码告诉操作系统帧内部封装的是什么数据。
      • 0x0800 -> 这是IPv4数据包,交给网络层的IP协议处理。
      • 0x86DD -> 这是IPv6数据包。
      • 0x0806 -> 这是ARP请求/应答。
  • 如何知道帧结束了?
    • 以太网帧有最小和最大长度限制。接收方还会计算帧校验序列,与帧尾的FCS进行比较,如果出错则丢弃。这标志着帧的可靠结束。
  • 输出:剥离帧头和帧尾,将中间的"数据"部分(现在称为IP数据包)根据"类型字段"的指示,传递给对应的网络层协议(如IP协议)。

3. 网络层(IP):从帧到包

  • 目标:将数据包路由到最终目的地。
  • 输入:数据链路层上交的IP数据包(仍然是一串二进制)。
  • 如何解析?
    • IP头也有固定格式。接收方"知道"IP头的第一个字节的前4位是版本
      • 如果这4位是0100(十进制4),它就是IPv4包,按IPv4头格式解析。
      • 如果这4位是0110(十进制6),它就是IPv6包,按IPv6头格式解析。
    • IPv4头中有一个固定的头长度字段(IHL),告诉接收方IP头有多长(通常是20字节)。
    • 接收方读取目标IP地址。如果这个地址与自己的IP地址不匹配(且设备不是路由器),它可能会丢弃该包。
    • 它读取协议字段。这个1字节的代码告诉操作系统数据包内部封装的是什么。
      • 6 -> 这是TCP段,交给传输层的TCP协议处理。
      • 17 -> 这是UDP数据报。
      • 1 -> 这是ICMP包(Ping命令用的)。
  • 输出:剥离IP头,将内部的"数据"部分(现在称为TCP段UDP数据报)根据"协议字段"的指示,传递给对应的传输层协议。

4. 传输层(TCP/UDP):从包到段

  • 目标:将数据交给正确的应用程序。
  • 输入:网络层上交的TCP段或UDP数据报。
  • 如何解析?
    • TCP/UDP头也有固定格式。接收方读取目标端口号
    • 端口号就是一个"应用程序的地址"。操作系统维护着一个表,记录着哪些程序在监听哪些端口。
      • 例如,80端口通常对应Web服务器,53端口对应DNS服务。
    • 当数据到达时,操作系统查看目标端口号(如12354),发现这个端口被您部署的服务器进程监听者,于是就将这个数据段交给该进程。
  • 输出:剥离TCP/UDP头,将最终的"应用数据"交给指定的应用程序。

5. 应用层:从段到有意义的数据

  • 输入:传输层上交的原始二进制数据。
  • 如何解析?
    • 应用程序根据应用层协议(如HTTP、FTP、DNS、SMTP)来解析这些数据。
    • 这些协议定义了严格的语法。例如,HTTP协议规定,请求的第一行必须是 方法 SP URI SP HTTP版本 CRLF
    • 应用程序的代码被编写来"理解"这种语法。它会逐字节读取,寻找空格、换行符等分隔符,从而解析出"这是一个GET请求","请求的资源是/index.html"等信息。

总结:为什么能识别?

  1. 严格的分层:每一层只关心自己层的格式,处理完后交给上一层,职责分明。
  2. 固定的格式规范(协议):每一层的"信封"都有国际标准定义的固定格式。接收方严格按照这个已知的格式去"丈量"和"解读"二进制流。
    • "前6字节是MAC地址"
    • "第23-24字节是类型字段"
    • "IP头的第10字节是协议字段"
  3. 自描述的字段:数据本身包含了如何解读后续数据的线索,如IP版本字段、TCP端口号、HTTP方法等。
  4. 共同的"语言":通信的双方必须事先约定好使用相同的协议栈(如TCP/IP),否则就是"鸡同鸭讲",无法理解。

最终,通过这一系列精密、标准化的"拆信封"过程,您服务器上的应用程序最终收到的,就是一段它能够理解和处理的、有意义的应用数据,而这一切的起点,仅仅是网线里的一串0和1。

具体的路由转发的设置

1.首先查看服务器对应的网关(也就是上一层的路由器)的ip地址

2.在路由器的上一层网关(光猫或者是其他路由器)配置NAT服务

3.整体数据的流程

重新设置后沙果服务出现的问题以及解决的办法

1.emqx服务器出现问题

设备无法连接服务器,mqttx无法连接服务器。

如何解决:直接将后端的sagooiot服务重启。(./opt/sagoo/sagooiot/bin/curl.sh start)