ESP一键配网实现
手动实现 WIFI SmartConfig 一键配网功能
起因
之前有尝试过乐鑫官方提供的smartconfig,效果并不是很理想,后来也使用巴法云的一键配网功能,想重新学习原理并实现这个功能,但发现网上关于UDP组播的方式文章很好,很多都是使用广播方式发送WIFI信息,因此就重新自己做了程序并记录一下。
目前实现的效果为:使ESP8266进入混杂模式,然后使用UDP程序发送组播信息,得到并解析出路由器的SSID和PWD信息!后续就能使用这个账号密码来连接WIFI了
最后实现的是组播方式发送信息,且每一个数据包带上校验和。第一个数据包为数据总长度,第二个为SSID长度,后边为SSID和PWD数据。
网上有很多文章已经很完整解释了一键配网的基本原理,这里就简单记录用到的内容。
常用的配网方式
常用的配网方式:
1、AP配网:ESP等WIFI芯片开启AP模式,然后手机连接上这个AP并通过TCP等发送路由器SSID和PWD信息到芯片,WIFI芯片接收到后切换到STA模式并连接到对应WIFI,这个方式的缺点是步骤麻烦,不过也相对稳定!可以通过强制门户功能使手机在连接上AP之后直接打开配网网页!
2、一键配网:用户直接通过已经连接路由器的手机或者其他工具发送UDP广播或多播信息,处于混杂模式(WiFi Promiscuous)的WIFI芯片会接收并解析相应信息后得到了联网SSID和PWD信息,然后进行联网操作。
3、蓝牙配网等:通过蓝牙或者其他方式将配网信息发送到WIFI芯片并进行联网。
流程实现
1、 先复制乐鑫SDK下的 examples/wifi/sniffer 混杂实验到测试目录,并编译。
2、 通过网络工具的UDP功能向 239.0.0.1:18226 发送任意数据,这里就发送一个字符,此时路由器会发送组播信息。
3、 使用Wireshark等工具查看当前IP所发送的UDP数据包,发现有个 0x01 0x00 0x05 … 的数据包,这就是组播数据包。
4、 对ESP接收到的数据进行解析,截取 0x01 0x00 0x05 … 开头的6组数据,这个其实是 这个 239.0.0.1 对应的MAC地址。
5、 后续只要对 UDP地址进行调整即可得到相应的信息。
编译修改ESP的sniffer工程
正常ESP环境搭建好的话编译是没有问题的。
需要修改的是实现方式。
注意:开始使用了默认方式老是接收不到有效UDP信息,后来先尝试全开然后发现 CONFIG_FILTER_MASK_DATA 这个模式下才能接收到。
数据格式为:0x01-0x00-0x5e-index-char-checksum
其中: 0x01-0x00-0x5e:组播固定MAC;index:数据编号;char:有效字符;checksum:校验和
SSID和PWD字符串转换工具
写了个程序将SSID和PWD转换成IP并通过UDP组播发送出去。
即只需要根据SSID和PWD字符串中的每个字符来更改IP地址的后3位就能得到不一样的MAC后三位数据,也就是最终对应的char。
ESP接收解析
ESP在没接收到一组信息时会一直变换信道,分别从1-12不断变化,直到有一组数据正确后就会停留在当前信道20秒,若20秒内一直没有等到数据则需要重新调整信道来接收数据。
根据相应信息编码就可得到联网所需的SSID和PWD信息,进一步设置STA即可完成联网!
效果实现
下图为信道刷新
当一直接收不到信息时,将会每秒调整信道,用以查到信道位置。

下图是ESP打印出接收到的有效SSID和PWD信息
发送的信息为 MySSID 和 My877 ,ESP所接收到的也是一样,同时打印出当前为12信道。

WiFi一键配网(smartconfig)原理介绍
概述
随着越来越多智能家居设备进入家庭,这些产品大部分都是要连接家庭的WiFi网络的,但WiFi网络的接入需要知道无线路由器的名字(SSID)和密码,绝大多数的智能家居不会设置键盘和屏幕,这样对于智能家居要连接的无线路由器输入无线路由器的名字和密码就成了一个困难。为了克服这个问题,人们使用了多种配网方法,比如智能家居热点配网,手机热点配网,蓝牙辅助配网等等,这些配网方式都存在一定的不方便之处,而smartConfig配网方式是无线配网方式里面比较方便和快捷的配网方式。
常用的配网方式
智能家居设备热点配网:

如上图所示,待配网设备首先启动热点功能,手机连接后把待连接的无线路由器SSID和密码告诉设备,然后,设备去连接无线路由器
手机热点配网方式:
手机热点配网方式和设备配网差不多,仅仅是手机做为热点,流程和上图类似。
蓝牙配网方式:
蓝牙配网是需要设备同时具有蓝牙功能,先使用蓝牙进行连接,把无线路由器的SSID和密码通过蓝牙发送给待配网设备。这种配网方式要求待配网设备具有蓝牙功能,成本较高,结构复杂,使用较少。
这些配网方式都需要实现设置一个网络来辅助配网,配网时间比较长,也比较繁琐,使用上并不便利。
SmartConfig配网基本原理
smartconfig的配网基本原理是通过手机直接发送报文到待配网设备。

手机发送UDP广播报文,待配网设备扫描所有的可用无线信道,找到发送smartConfig的报文,并锁定在这一信道上开始接受数据。
需要克服的问题
我们配置的无线路由器绝大多数都是带密码的,我们知道,WiFi设置了密码则数据就是加密的,这时候待配网的设备是不能解密出数据的内容的,那怎么把无线路由器的密码和SSID送给待配网设备呢?

上图就是用抓包软件抓取的数据报文内容,大家可以看到,除了802.11 MAC Header 能看到外,其他都是加密字段,我们能了解到的只有源MAC地址和目的MAC地址和BSSID信息其他有限几个字段,如何把信息告诉待配网设备呢?
- 由于配网设备未连接无线路由器,手机无法知道待配网设备的的MAC地址,如何才能让待配网设备接收到信息呢?
解决方法:- 虽然报文的整个数据部分都是加密的,但我们能知道报文的长度和发送MAC和目的MAC,我们要传输信息可以从这几个地方着手。我们可以使用报文长度这个特征来传递数据。
- 由于设备没有连接到无线路由器,这时候手机要发送配网信息是不知道设备的地址的,所以使用的地址是广播地址,这样只要在附近的无线WiFi设备处于监听模式都可以接收到这个报文。
报文长度传递信息
如何使用报文长度传递信息呢?smartconfig使用UDP报文传递信息,UDP的特点是可以发送广播数据,长度从0到最大的MAC报文长度减去前面的报文首部。这个长度可以传递我们需要的信息。SmartConfig有多种实现,我们举一个例子来说明。

上图显示的是连续发送三个长度为1248长度的数据报文表示smartconfig的开始,后面接数据帧。数据帧里面可以传递无线路由器的SSID和密码。由于smartconfig使用的是UDP报文传递,在发送的时候是没有顺序的,这时候就需要对发送的数据有索引字段。

这样报文的长度等于 packet len = 索引 | 数据 ,索引和数据的位数可以自己来设计。
传递的效率
由于信息仅能靠长度来传递,而且报文的长度是受限的,则每个报文的信息量是很有限的,传递一个长度是1248长度的数据帧,传递的信息也仅仅是两个字节的数据0X04E0 (0x04e0 = 1248), 传递信息的效率是相当低的,1248是UDP报文的长度,加上前面的UDP包头IP包头,MAC包头等可能要超过1300个字节,那传输的效率就是2/1300=0.0015,情况更糟的是,2个字节传递的信息是0- 0xFFFF,就是0-65535,MAC层的报文长度最大是1500个字节,也就是说即便使用最大的报文长度传递信息连两个字节也传递不了,再去掉索引数据,一般一个报文只能传递一个字节数据。这样传递的效率就更低了。所以smartconfig广播UDP配网的效率普遍较慢,在密码和SSID比较长的情况下,还有配网失败的情况发生。
多播配网
为了克服广播配网的缺陷,出现了多播配网的应用。多播和广播一样,都是一种可以被附近配网设备接收到的报文,但由于多播地址有多个,可以使用多播的地址来传递信息。
IP多播地址
范围从 224.0.0.0 到 239.255.255.255
MAC多播地址
01-00-5E-00-00-00 到 01-00-5E-7F-FF-FF
对于smartconfig配网而言,一般情况下IP地址是加密的字段,我们无法看到,所以只能使用多播MAC地址来传递信息。
从上面的地址我们可以看出多播地址有个较大的范围,地址有三个字节是变化的,我们可以使用这三个变化的地址空间来传递信息。同样由于每次只能传递三个字节,我们需要一个顺序字段,一般会占用一个字节,这样还有两个字节来传递信息,如下图是使用多播MAC地址的示意图。

多播配网的数据部分不需要传递信息,所以传递的数据长度大大降低,传递效率很高,多播配网的效率和速度都远远高于广播长度字段配网效率。
smartConfig 浅析
一、背景
物联网时代技术开始规模化服务于民众,方便快捷显得尤为重要,WIFI 直连便是一个典型案例。
目前主流的 WIFI 配置模式有以下 2 种:
- 智能硬件处于 AP 模式(类似路由器,组成局域网),手机用于 STA 模式
手机连接到处于 AP 模式的智能硬件后组成局域网,手机发送需要连接路由的 SSID 及密码至智能硬件,智能硬件主动去连接指定路由后,完成配网 - 一键配网(smartConfig)模式
智能硬件处于混杂模式下,监听网络中的所有报文;手机 APP 将 SSID 和密码编码到 UDP 报文中,通过广播包或组播报发送,智能硬件接收到 UDP 报文后解码,得到正确的 SSID 和密码,然后主动连接指定 SSID 的路由完成连接。
AP 模式:
AP 是 (Wireless) Access Point 的缩写,即 (无线) 访问接入点。简单来讲就像是无线路由器一样,设备打开后进入 AP 模式,在手机的网络列表里面,可以搜索到类似 TPLINK_XXX 的名字(SSID)。
连接步骤:
1、智能硬件设备初始化并进入 AP 模式
2、手机扫描 WIFI 列表:扫描到智能硬件设备后(SSID)连接该智能硬件设备,通过 UDP 发送 经过 AES 加密过的 ssid/password/token

** smartConfig 模式:**
这种快速连接方式,相对于 AP 模式连接简化操作,更加贴近于市场
1、手机连上 WiFi,打开智能硬件指定 APP 软件,进入配置界面,输入手机所在 WiFi 密码,请求配网 TOKEN
2、智能硬件开启混杂模式监听所有网络数据包
3、手机通过广播、组播循环发送 ssid/password/token
4、硬件设备通过 UDP 包(长度)获取配置信息捕捉到 ssid/password/token,连接路由器(广播根据 UDP 包长度,组播根据 IP 地址信息)

从原理上讲只要芯片驱动支持开启混杂模式(WiFi Promiscuous),就可以支持一键配网功能
手机编码发送采用有 UDP 组播或广播,不同的发送方式和编码,对应的解码过程也不一样
1、广播:
发送方可通过改变其所需要发送数据包的长度进行控制,因此只要指定出一套利用长度编码的通讯协议,就可利用数据包的 Length 字段进行数据传递
2、 组播:
组播地址是保留的 D 类地址从224.0.0.0-239.255.255.255
IP 地址与 MAC 地址映射关系为:将 MAC 地址的前 25 位设定为 01.00.5e,而 MAC 地址的后 23 位对应 IP 地址位
故发送端可以将数据编码在组播 IP 的后 23bit 中,通过组播包发送接收端进行解码即可

二、smartConfig 原理浅析
在没有和其他设备(支持 smartConfig 技术)建立任何性质的通讯链路的情况下, 配置该设备接入 WIFI 网络
普通权限的应用程序是没有能力完全控制和定义传输层及下层所有协议数据的, 唯一可以完全控制的就是应用层数据
本质上就是将 UDP 包头的数据长度作为 smartConfig 的数据,APP 端和设备端共用一套编码表即可解析数据
TCP/IP 协议栈中的网络层和传输层的数据结构
常用的网络层协议是 IPv4, IPv4 的头部绝大多数情况下都是定长的20字节
传输层协议是 UDP, 因为 UDP 协议头部为定长的 8 字节
明文长度 = 20 + 8 + dataLen
密文长度 = 20 + 8 + dataLen + 算法常量
例子:
如果需要发出一个密文长度为 500 字节的 802.11 帧,只需要在 UDP 中填充任意(500 – 20 – 8 – 算法常亮)个字节数据即可
因此,只需要利用可控的密文长度(dataLen)定义一张编码表即可将数据告诉任何知道这张编码表的设备(IoT硬件设备)
自定义一张编码表,流程如下:
dataLen –> 映射
1234 –> 起始符; 连续的3个起始符, 用于表示数据传输开始
1324 –> 结束符; 连续的3个结束符, 用于表示数据传输结束
110 –> 间隔符; 连续的2个间隔符, 用于表示数据符之间的间隔
1000 –> 数据符; 表示 ASCII 0x00
1001 –> 数据符; 表示 ASCII 0x01
…
1127 –> 数据符; 表示 ASCII 0x7F

假设我们要把字符串”Jay”告诉摄像头, 整个流程大致如下: (假设算法常亮为 16)
APP 端:
打开手机 APP, 在输入框中填入要发送的字符串”Jay”, 点击发送:
1.1、APP 连续发送 3 个 UDP 广播包, 填充数据为 1190 个字节 0x00 数据 ( 1234 – 16 – 20 – 8 = 1190 ), 表示传输开始
1.2、APP 发送 1 个 UDP 广播包, 填充数据为 1030 个字节 0x00 数据 ( 1074 – 16 -20 – 8 = 1030 ), 传输字符 J
1.3、APP 连续发送 2 个 UDP 广播包, 填充数据为 66 个字节 0x00 数据 ( 110 – 16 – 20 – 8 = 66 ), 表示数据间隔
1.4、APP 发送 1 个 UDP 广播包, 填充数据为 1053 个字节 0x00 数据 ( 1097 – 16 -20 – 8 = 1053 ), 传输字符 1097 对应 a
1.5、APP 连续发送 2 个 UDP 广播包, 填充数据为 66 个字节 0x00 数据 ( 110 – 16 – 20 – 8 = 66 ), 表示数据间隔
1.6、APP 发送 1 个 UDP 广播包, 填充数据为 1077 个字节 0x00 数据 ( 1121 – 16 -20 – 8 = 1077 ), 传输字符 1121 对应 y
1.7、APP 连续发送 3 个 UDP 广播包, 填充数据为 1280 个字节 0x00 数据 ( 1324- 16 – 20 – 8 = 1280 ), 表示传输结束
从步骤 1.1 开始循环多次, 直到超时或 IoT 设备成功接入 WIFI
IoT 设备端:
设备上电进入混杂模式,开始监听信号覆盖范围内的所有 WIFI 数据帧
捕获数据帧, 如果连续收到 3 个密文,其数据长度 dataLen 为 1234 字节, 且来自于同一个发射源 channel-A 的数据帧, 则进入下一步, 否则该步骤
捕获发射源 channel-A 的数据帧, 持续捕获密文数据长度为 110 或 1000-1127 之间的数据帧, 直到捕获到连续 3 个密文数据长度为 1324 的数据帧
将上述数据帧按照编码表进行映射, 由于手机 APP 并非是独占网络, 所以捕获到的数据可能有噪音, 比如解码出来的结果可能是(/表示分隔符): mnJ/o@a/ymmm
如果没有噪音, 记为候选数据RC, 重复捕获X, 进行二次验证, 通过则表示接收完成, 没通过也重复捕获 channel-A,
将这次所得结果同上一次做交集, 循环如此直到得出唯一结果, 即 RC, 之后再重复 5
由于捕获的数据帧头部信息中已经包含了 WIFI 的 BSSID 信息, 使用 “Jay” 作为密码去尝试连接相应的 WIFI
四、知识扩展
在当前网络通信中有三种通信模式:
单播、广播、组播(又叫多播),其中多播出现的时间最晚,但同时具备单播和广播的优点,最具有发展前景.
通信方式分类:
1.单播:单台主机与单台主机之间的通信;
2.广播:单台主机与网络中所有主机的通信;
3.组播:单台主机与选定的一组主机的通信;
单播:
单播是网络通信中最常见的,网络节点之间的通信 就好像是人们之间的对话一样,如果一个人对另外一个人说话,那么用网络技术的术语来描述就是“单播”,此时信息的接收和传递只在两个节点之间进行。
1. 单播的优点:
(1)服务器以及响应客户端的请求;
(2)服务器能针对每个客户端的不同请求发送不同的响应,容易显示个性化服务;
2. 单播的缺点:
服务器针对每个客户机发送数据流,服务器流量=客户机数量×客户机流量;在客户数量大、每个客户机流量大的流媒体应用中服务器不堪重负;
3. 应用场景:
单播在网络中得到了广泛的应用,网络上绝大部分的数据都是以单播的形式传输的,例如:收发电子邮件、游览网页时,必须与邮件服务器、服务器建立连接,此时使用的就是单播通信方式;
广播:
广播可以比作为一个人通过广播喇叭对在场的全体说话,换句话说: 广播是一台主机对某一个网络上的所有主机发送数据报包。
这个网络可能是网络,也可能时子网,还有可能是所有子网。
广播有两类:本地广播和定向广播:
定向广播:将数据报包发送到本网络之外的特定网络的所有主机,互联网上的大部分路由器都不转发定向广播消息;
本地广播:将数据报包发送到本地网络的所有主机,IPv4的本地广播地址为“255.255.255.255”,路由器不会转发此广播;
1.广播的优点:
(1)通信的效率高,信息一下子就可以传递到某一个网络上的所有主机。
(2)由于服务器不用向每个客户端单独发送数据,所以服务器流量比较负载低;
2.广播的缺点:
(1)非常占用网络的带宽;
(2)缺乏针对性,也不管主机是否真的需要接收该数据, 就强制的接收数据;
3.应用场景:
有线电视就是典型的广播型网络
组播:
组播可以比作为你对着大街喊:女士免费领优惠券,那么女士就会过来,男士就不会过来(组播:其中所有的女士就是一个组)
换句话说:
组播是一台主机向指定的一组主机发送数据报包,因为如果采用单播方式,逐个节点传输,有多少个目标节点就会有多少次传送过程,这种方式显然效率极低,是不可取的;
如果采用不区分目标、全部发送的广播方式,虽然一次可以传送完数据,但是显然达不到区分特定数据接收对象的目的,又会占用网络带宽。
采用组播方式,既可以实现一次传送所有目标节点的数据,也可以达到只对特定对象传送数据的目的;
IP 网络的组播一般通过组播 IP 地址来实现,组播 IP 地址就是 D 类 IP 地址,即 224.0.0.0 至 239.255.255.255 之间的IP地址。
1.组播的优点:
(1)具备广播所具备的所有优点;
(2)与单播相比,提供了发送数据报包的效率,与广播相比,减少了网络流量;
2.组播的缺点:
与单播协议相比没有纠错机制,发生丢包错包后难以弥补,但可以通过一定的容错机制和QOS加以弥补;
refer:
https://wenku.baidu.com/view/ab6bc08a9b6648d7c0c746ac.html
https://blog.csdn.net/sadshen/article/details/47049129
https://my.oschina.net/u/2396236/blog/1788674
https://blog.csdn.net/li_yangyang_li/article/details/50989220
https://blog.csdn.net/flyingcys/article/details/49283273
https://blog.csdn.net/dabing69221/article/details/17286441#t1
UDP 单播、广播、多播

一、UDP广播
广播UDP与单播UDP的区别就是IP地址不同,广播使用广播地址255.255.255.255,将消息发送到在同一广播网络上的每个主机。值得强调的是:本地广播信息是不会被路由器转发。当然这是十分容易理解的,因为如果路由器转发了广播信息,那么势必会引起网络瘫痪。这也是为什么IP协议的设计者故意没有定义互联网范围的广播机制。
广播地址通常用于在网络游戏中处于同一本地网络的玩家之间交流状态信息等。
其实广播顾名思义,就是想局域网内所有的人说话,但是广播还是要指明接收者的端口号的,因为不可能接受者的所有端口都来收听广播。
二、UDP多播
1、多播(组播)的概念
多播,也称为“组播”,将网络中同一业务类型主机进行了逻辑上的分组,进行数据收发的时候其数据仅仅在同一分组中进行,其他的主机没有加入此分组不能收发对应的数据。
在广域网上广播的时候,其中的交换机和路由器只向需要获取数据的主机复制并转发数据。主机可以向路由器请求加入或退出某个组,网络中的路由器和交换机有选择地复制并传输数据,将数据仅仅传输给组内的主机。多播的这种功能,可以一次将数据发送到多个主机,又能保证不影响其他不需要(未加入组)的主机的其他通 信。
相对于传统的一对一的单播,多播具有如下的优点:
1、具有同种业务的主机加入同一数据流,共享同一通道,节省了带宽和服务器的优点,具有广播的优点而又没有广播所需要的带宽。
2、服务器的总带宽不受客户端带宽的限制。由于组播协议由接收者的需求来确定是否进行数据流的转发,所以服务器端的带宽是常量,与客户端的数量无关。
3、与单播一样,多播是允许在广域网即Internet上进行传输的,而广播仅仅在同一局域网上才能进行。
组播的缺点:
1、多播与单播相比没有纠错机制,当发生错误的时候难以弥补,但是可以在应用层来实现此种功能。
2、多播的网络支持存在缺陷,需要路由器及网络协议栈的支持。
3、多播的应用主要有网上视频、网上会议等。
2、广域网的多播
多播的地址是特定的,D类地址用于多播。D类IP地址就是多播IP地址,即224.0.0.0至239.255.255.255之间的IP地址,并被划分为局部连接多播地址、预留多播地址和管理权限多播地址3类:
1、局部多播地址:在224.0.0.0~224.0.0.255之间,这是为路由协议和其他用途保留的地址,路由器并不转发属于此范围的IP包。
2、预留多播地址:在224.0.1.0~238.255.255.255之间,可用于全球范围(如Internet)或网络协议。
3、管理权限多播地址:在239.0.0.0~239.255.255.255之间,可供组织内部使用,类似于私有IP地址,不能用于Internet,可限制多播范围。
多播的程序设计使用setsockopt()函数和getsockopt()函数来实现,组播的选项是IP层的,其选项值和含义参见11.5所示。
表11.5 多播相关的选项
**getsockopt()/setsockopt()**的选项 | 含 义 |
---|---|
IP_MULTICAST_TTL | 设置多播组数据的TTL值 |
IP_ADD_MEMBERSHIP | 在指定接口上加入组播组 |
IP_DROP_MEMBERSHIP | 退出组播组 |
IP_MULTICAST_IF | 获取默认接口或设置接口 |
IP_MULTICAST_LOOP | 禁止组播数据回送 |
3、多播程序设计的框架
要进行多播的编程,需要遵从一定的编程框架。多播程序框架主要包含套接字初始化、设置多播超时时间、加入多播组、发送数据、接收数据以及从多播组中离开几个方面。其步骤如下:
(1)建立一个socket。
(2)然后设置多播的参数,例如超时时间TTL、本地回环许可LOOP等。
(3)加入多播组。
(4)发送和接收数据。
(5)从多播组离开
UDP广播与单播
广播与单播的比较
广播和单播的处理过程是不同的,单播的数据只是收发数据的特定主机进行处理,而广播的数据整个局域网都进行处理。
例如在一个以太网上有3个主机,主机的配置如表11.4所示。
表11.4 某局域网中主机的配置情况
主 机 | A | B | C |
---|---|---|---|
IP地址 | 192.168.1.150 | 192.168.1.151 | 192.168.1.158 |
MAC地址 | 00:00:00:00:00:01 | 00:00:00:00:00:02 | 00:00:00:00:00:03 |
单播流程:主机A向主机B发送UDP数据报,发送的目的IP为192.168.1.151,端口为 80,目的MAC地址为00:00:00:00:00:02。此数据经过UDP层、IP层,到达数据链路层,数据在整个以太网上传播,在此层中其他主机会 判断目的MAC地址。主机C的MAC地址为00:00:00:00:00:03,与目的MAC地址00:00:00:00:00:02不匹配,数据链路层 不会进行处理,直接丢弃此数据。
主机B的MAC地址为00:00:00:00:00:02,与目的MAC地址00:00:00:00:00:02一致,此数据会经过IP层、UDP层,到达接收数据的应用程序。
广播的流程:主机A向整个网络发送广播数据,发送的目的IP为192.168.1.255,端口为 80,目的MAC地址为FF:FF:FF:FF:FF:FF。此数据经过UDP层、IP层,到达数据链路层,数据在整个以太网上传播,在此层中其他主机会 判断目的MAC地址。由于目的MAC地址为FF:FF:FF:FF:FF:FF,主机C和主机B会忽略MAC地址的比较(当然,如果协议栈不支持广播,则 仍然比较MAC地址),处理接收到的数据。
主机B和主机C的处理过程一致,此数据会经过IP层、UDP层,到达接收数据的应用程序。
相关链接(侵删)
欢迎到公众号来唠嗑:
