本节主要记录 IP 网络层协议,所以关于传输层 TCP、UDP 协议与应用层 HTTP、CoAP 等其他协议只有简单记录。
TCP/IP 协议栈是基于 wifi 无线传输媒介的。所有的数据通信都是基于 IP 网络协议层进行传输的。在这一层需要通过路由器分配的 IP 地址进行通信。
文章目录
本地获取 IP 的常见方法
IP 通信除了常用的点对点通信,还有一对多(组播)通信和一对所有(广播)通信。
当然 IP 地址也可以分为:
- 单播地址
- 组播地址
- 广播地址
本地发现设备的方法是,在不知道对端 IP 地址的情况下,通过组播或广播的方式,向特定地址发送报文。对端设备只需监听该地址就可以接收报文。因此组播和广播适合在局域网中发现设备。
广播
是指将报文发送给网络中所有可能的接收方。
广播的用途有两个:
- 在本地网络中定位一个主机设备。
- 在本地网络中减少分组流通,一个报文就可以通知本地网络中的所有主机设备。
常见的广播应用报文
- ARP(Address Resolution Protocol,地址解析协议)。其用途是在本地网络中,广播一个 IP 地址,要求此 IP 设备返回自己的 MAC 地址。APR 的广播属于数据链路层广播。而不是三层网络层的 IP 广播。
- 例如:在本地网络中,广播一个 ARP 请求:“IP 地址为 a,b,c,d 的设备,硬件 MAC 地址是多少,请告诉我”
- DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)。这种广播协议需要本地网络中存在一台 DHCP 服务器。此时 DHCP 客户端发送目的 IP 地址(通常为 255.255.255.255)的 DHCP 请求,在同一网络中的 DHCP 服务器端就可以接收到改请求并回复分配的 IP 地址。
广播地址
一般来说,报文的二层地址为 FF:FF:FF:FF:FF:FF: 则三层地址就为 255.255.255.255。因为对于接收方来说,发现报文中的二层地址不是自己的 MAC 地址 或者 广播的 MAC 地址或组播 MAC 地址(如 01:00:5E:XX:XX:XX),则丢弃不处理。
- 二层数据链路层广播地址:(FF:FF:FF:FF:FF:FF:)
- 三层网络层 IP 广播地址:(255.255.255.255)
子网广播与主机广播
IPv4 地址是由主机 ID与子网 ID 组成
- 子网广播地址(如 子网掩码为 255.255.255.0 的 xxx.xxx.xxx.255)。
- 假设子网掩码为 255.255.255.0 IP 地址为 192.168.1.1 向目的地址 192.168.1.255 发送报文,路由器只会将该报文广播给(192.168.1)子网中的主机。
- 优点:其他子网里的主机不会接收到此报文,避免网络资源浪费。
- 主机广播地址(如 255.255.255.255)本地网络中的所有主机都可以收到该报文。
服务器地址
一般作为服务器端,报文原地址设置为 0.0.0.0 表示不对报文源地址进行验证。
组播
组播也称为多播,相较于要么一对一的单播与一对多的广播,他提供了一个这种的方案。
- 一个主机可以向一个组地址发送报文。所有加入此组的主机都可以收到这个报文,有点类似于子网广播。但比子网广播更灵活,所有主机都可以随时加入或者离开某个组。
组播 IP 协议 IGMP
IGMP(Internet Group Management Protocol,互联网组管理协议)是一种负责组播成员管理的协议。用来与支持 IGMP 协议的路由器之间建立、维护组播组成员关系。
常见的本地数据通信协议
下面主要介绍与 Internet 相关的协议,其他比如 蓝牙通信协议、ZigBee 通信协议等暂不做介绍。
- TCP
- HTTP
- UDP
- CoAP
TCP 协议
传输控制协议(TCP,Transmission Control Protocol)是 Internet 协议族的主要协议之一。
在 TCP/IP 模型中,TCP 作为传输层协议,为应用层协议提供可靠的数据出传输。常用的应用层协议:HTTP、MQTT、FTP 等。
TCP 协议的特点
- 面向连接。采用 TCP 协议发送数据前需要三次握手建立连接。
- 可靠的。采用 TCP 协议发送数据,出现丢失数据的情况会重传。
- 字节流。
TCP 协议发送流程
- 上层应用程序将应用数据写入 TCP 缓冲区。
- TCP 缓冲区将数据打包成 TCP 报文发往网络层。
- 接收方收到 TCP 报文,将其放入 TCP 缓冲区。
- 接收一定数量的 TCP 报文后,对数据进行排序与重组并告知应用程序。
TCP 的保活功能
TCP 客户端在一段保活间隔时间内没有数据时,需要给 TCP 服务器端发送保活报文,从而保持连接。保活间隔时间与重传次数都是可配置的。
HTTP 协议
HTTP(HyperText Transfer Protocol,超文本传输协议) 是基于传输层 TCP/IP 之上的应用协议。它规定了客户端与服务器端之间数据传输的格式与方式。客户端(用户)可通过网站、网络爬虫或者其他工具与服务器端(网站)建立 TCP 连接。通过 HTTP 协议请求的资源由统一资源标识符(Uniform Resource Identifiers,URI)来标识。
常见的 HTTP 请求方法
- GET,请求指定的 URI 资源。
- POST,向指定 URI 资源提交数据。
- DELETE,请求服务器端删除 URI 所标识的资源。
UDP 协议
用户数据报协议(UDP ,User Datagram Protocol)是一个简单的面向数据报的通信协议,它的特点如下
- 面向数据
- 不可靠。因为不会与 TCP 一样建立连接与维护连接状态,而是只负责传输。当然也可以在应用层代码加一些逻辑处理。
- 网络资源与时间耗费少。因为不会与 TCP 一样存在丢包重传机制。
- 适合流媒体、实时多人游戏和 IP 语音之类丢失几个包不会影响的应用。
CoAP 协议
受限制的应用协议(Constrained Application Protocol, CoAP)为了满足资源(RAM/FLASH/CPU/网络宽带)受限的物联网设备而产生的基于 UDP 的协议。因为 TCP 和 HTTP 往往需要更多的内存与网络带宽。
特点:
- 客户端和服务器端都可以独立地向对方发送请求。
- 虽然是基于 UDP 的协议,但支持可靠的数据传输。
- 支持多播与广播,可以实现一对多的数据传输。
- 支持低功耗、非长连接的通信。
- 相比于 HTTP 协议,其包头更轻量。
蓝牙通信协议
暂略。
ref:《ESP32C3 物联网开发实战》