ARTICLE DETAIL

资讯详情

深耕商务建站与企业官网运营的一线实战洞察。

嵌入式从0到精通——Linux 网络通信|UDP协议

嵌入式从0到精通——Linux 网络通信|UDP协议 本篇梳理网络模型、IP、端口、数据包封装再到 UDP 协议原理与 socket 代码接口适合博客阅读。一、网络基础模型1. OSI 七层模型理论模型层级功能说明应用层上层业务数据文件传输、邮件等表示层数据加密解密、压缩解压缩会话层建立维护会话通道传输层数据传输控制TCP/UDP端口网络层路由选路IP 协议路由器数据链路层封装帧局域网通信ARP交换机物理层比特流传输网线、光纤硬件2. TCP/IP 四层工业实际使用应用层合并 OSI 应用层、表示层、会话层 常见协议HTTP、HTTPS、FTP、TFTP、DNS、MQTT传输层TCP、UDP网络层IP 协议网络接口层合并数据链路层 物理层3. 五层网络模型教学常用应用层 → 传输层 → 网络层 → 数据链路层 → 物理层二、IP 地址IPv4 是32 位使用点分十进制表示分为网络位 主机位。子网掩码区分网络位和主机位掩码 1 对应网络位0 对应主机位。网段号网络位不变主机位全部置 0广播号网络位不变主机位全部置 1发给广播号局域网所有主机接收网关跨网段访问的出口设备IP 地址分类类别地址范围默认子网掩码私有 IP 段A 类1.0.0.0~126.255.255.255255.0.0.010.0.0.0/8B 类128.0.0.0~191.255.255.255255.255.0.0172.16‑172.31C 类192.0.0.0~223.255.255.255255.255.255.0192.168.x.xD 类224~239组播使用‑E 类240~255实验保留‑私有 IP局域网内部使用不能直接访问互联网公有 IP 由运营商分配可访问外网。 127.x.x.x 回环地址本机内部通信。三、端口号端口16 位无符号短整型0‑65535。作用IP 定位主机IP 端口定位主机上的进程。1‑1023知名端口系统服务占用80HTTP443HTTPS21FTP1883MQTT69TFTP1024‑49151注册端口49152‑65535动态 / 私有端口程序临时使用四、数据包封装和解封装发送数据时从上到下逐层封装头部接收从下到上逐层剥离头部应用层原始业务数据传输层加上 TCP/UDP 头部 →报文网络层加上 IP 头部 →数据包数据链路层加上 MAC 头部、尾部校验 →帧物理层转为比特流 0/1通过网线传输五、网络字节序计算机主机一般是小端序网络传输强制使用大端序。大端低字节存高地址小端低字节存低地址。字节序转换 APIhtons()short 主机序 → 网络序2 字节端口htonl()long 主机序 → 网络序4 字节IPntohs()short 网络序 → 主机序ntohl()long 网络序 → 主机序IP 字符串转换inet_addr()点分字符串 IP → 32 位网络序整数 ipinet_ntoa()网络 ip 结构体 → 点分字符串 IP六、网络配置常用命令ifconfig查看网卡信息LinuxipconfigWindows 查看网卡ping ip/域名测试网络连通性虚拟机桥接模式虚拟机网卡和物理网卡同一网段可以局域网其他设备访问虚拟机。七、UDP 协议UDP (User Datagram Protocol) 用户数据报协议。UDP 核心特点无连接通信前不需要建立连接面向数据报一次发送一整个数据包不会拆分拼接不可靠尽最大努力交付会丢包、乱序没有重传确认机制开销小实时性高适合直播、游戏音视频场景。UDP 通信模型 C/S客户端 / 服务端C/S客户端服务端模型B/S 浏览器服务端模型。表格UDP 客户端UDP 服务端socket () 创建套接字socket () 创建套接字sendto () 发送报文bind () 绑定本机 IP 端口recvfrom () 接收报文recvfrom () 接收报文close () 关闭套接字sendto () 回复报文close () 关闭套接字核心 API 说明1.socket 创建套接字int socket(int domain, int type, int protocol);domainAF_INETIPv4typeSOCK_DGRAMUDP 数据报套接字protocol填 0 返回成功返回套接字文件描述符失败返回‑12.bind 绑定 IP 端口服务端专用int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);服务端必须 bind 固定端口客户端可以不 bind操作系统自动分配随机端口。3.sendto 发送 UDP 数据报ssize_t sendto(int sockfd, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen);dest_addr对端的 IP 端口信息结构体flags 一般填 0。4.recvfrom 接收 UDP 数据报ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags, struct sockaddr *src_addr, socklen_t *addrlen);src_addr 会保存发送方的 IP 和端口回复数据直接使用这个地址。5.sockaddr_in 地址结构体IPv4struct sockaddr_in { sa_family_t sin_family; /* AF_INET */ in_port_t sin_port; /* 网络字节序端口 */ struct in_addr sin_addr; /* 网络序IP */ }; struct in_addr { uint32_t s_addr; };UDP 报文头部8 字节固定源端口 (2B)目标端口 (2B)UDP 总长度 (2B)校验和 (2B)抓包工具 WiresharkLinux 安装sudo apt install wireshark过滤 udpudp.port 50000过滤指定端口数据包。
返回列表
PREV
查看更多资讯
NEXT
返回资讯列表