news 2026/5/25 22:42:56

自学嵌入式day37,网络编程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
自学嵌入式day37,网络编程

1.OSI模型和TCP/IP协议栈

OSI(开放系统互连)模型是一个七层框架,用于描述网络通信过程。TCP/IP协议栈是互联网模型的核心,它将OSI模型简化合并为四层:

  • 应用层:提供用户服务,如HTTP(网页)、FTP(文件传输)、DNS(域名解析)。例如,DNS将域名(如www.baidu.com)解析为IP地址。
  • 传输层:管理端到端通信,使用端口号区分应用程序。主要协议包括:
    • TCP(传输控制协议):提供可靠传输,用于文件传输等。
    • UDP(用户数据报协议):提供低延迟传输,用于实时应用如音频/视频。
  • 网络层:负责路由和IP寻址。协议包括IP(互联网协议)、ICMP(用于ping测试)、RIP/OSPF(路由协议)。
  • 接口层:处理物理层和数据链路层功能,如ARP(地址解析协议,将IP转MAC地址)。

OSI模型是通用框架,而TCP/IP是其实践实现,广泛应用于互联网。

2.IP地址组成

IP地址用于唯一标识网络设备,由网络位和主机位组成:

  • 版本:IPv4(主流,如192.168.0.1)和IPv6(未来方向)。
  • 结构:IP地址 = 网络位 + 主机位。例如,在IPv4中,子网掩码划分网络和主机部分。
  • 配置:在Linux系统中,可通过文件/etc/network/interfaces设置永久IP,或使用命令临时设置:
    ifconfig ens33 192.168.0.13/24 # 临时设置IP,重启失效 sudo /etc/init.d/networking restart # 重启网络服务生效

测试网络连通性:ping www.baidu.com

3.网络配置相关命令

常用命令用于管理和诊断网络:

  • ifconfig:查看网络接口配置,如IP地址、MAC地址。
  • netstat -anp:列出所有网络连接和端口使用情况。
  • 文件配置:编辑/etc/network/interfaces设置静态或动态IP(通过DHCP)。

4.名词解释

关键术语澄清:

  • Socket(套接字):网络编程接口,打开后获得文件描述符,用于数据收发。
  • IP + Port:IP地址标识主机,端口号(1-65535)标识应用程序。
  • 字节序
    • 网络字节序:大端存储(高位字节在前),用于网络传输。
    • 主机字节序:小端存储(低位字节在前),用于Intel/AMD等CPU。

5.UDP编程接口

UDP(用户数据报协议)特性:无连接、低延迟、易丢失数据(发送过快可能导致丢包)。编程中使用C语言函数,以下是核心函数解释:

int socket(int domain, int type, int protocol);
  • 功能:创建套接字描述符。
  • 参数
    • domain:地址族,如AF_INET(互联网)或AF_UNIX(单机)。
    • type:套接字类型,如SOCK_DGRAM(UDP)。
    • protocol:协议,0表示自动适应。
  • 返回值:成功返回套接字ID,失败返回-1。

示例代码:

#include <sys/socket.h> int sockfd = socket(AF_INET, SOCK_DGRAM, 0); // 创建UDP套接字
int bind(int sockfd, struct sockaddr *my_addr, socklen_t addrlen);
  • 功能:绑定套接字到本地地址(服务器端)。
  • 参数
    • sockfd:套接字ID。
    • my_addr:地址结构体(如struct sockaddr_in)。
    • addrlen:地址结构体长度。
  • 返回值:成功返回0,失败返回-1。

地址结构体示例:

struct sockaddr_in { u_short sin_family; // 地址族,如AF_INET u_short sin_port; // 端口号 struct in_addr sin_addr; // IP地址 };
ssize_t sendto(int sockfd, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen);
  • 功能:发送UDP数据。
  • 参数
    • sockfd:套接字ID。
    • buf:数据缓冲区。
    • len:数据长度。
    • flags:发送方式,0为阻塞。
    • dest_addr:目标地址结构体。
    • addrlen:目标地址长度。
  • 返回值:成功返回发送字节数,失败返回-1。
ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags, struct sockaddr *src_addr, socklen_t *addrlen);
  • 功能:接收UDP数据。
  • 参数
    • sockfd:套接字ID。
    • buf:存储数据的缓冲区。
    • len:缓冲区大小。
    • flags:接收方式,0为阻塞。
    • src_addr:可选的源地址结构体(NULL表示不关心)。
    • addrlen:源地址长度指针。
  • 返回值:成功返回接收字节数,失败返回-1。

UDP编程中,注意数据边界和丢包风险。例如,发送太快时使用流量控制机制。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/20 11:24:14

构建金融级风控中台:Java Spring Boot 集成天远借贷风险探查 API 实战

1. 企业级风控的“最后一块拼图” 在构建企业级信贷审批系统时&#xff0c;后端工程师往往面临双重挑战&#xff1a;既要保证核心链路的高可用性&#xff0c;又要处理多源异构数据的安全性。特别是在接入外部征信数据时&#xff0c;如何优雅地将第三方数据“清洗”并融入内部的…

作者头像 李华
网站建设 2026/5/24 9:51:04

基于51单片机的秒表设计—0.01精度、有提示音

基于51单片机的秒表设计 &#xff08;仿真&#xff0b;程序&#xff0b;原理图&#xff0b;设计报告&#xff09; 功能介绍 具体功能&#xff1a; 1.数码管显示&#xff0c;精度为0.01&#xff1b; 2.按键控制启动/停止&#xff0c;暂停/开始&#xff1b; 3.有一秒钟一次提示…

作者头像 李华
网站建设 2026/5/18 21:54:57

α-Bungarotoxin, AF647,α-博格毒素-AF647标记物,荧光信号检测方法

α-Bungarotoxin, AF647&#xff0c;α-博格毒素-AF647标记物&#xff0c;荧光信号检测方法 中文名称&#xff1a;α-博格毒素-AF647标记物 概述&#xff1a; α-Bungarotoxin, AF647是一种经过荧光染料标记的α-博格毒素衍生物&#xff0c;其中使用AF647&#xff08;一种长波…

作者头像 李华
网站建设 2026/5/19 22:13:30

java计算机毕业设计无人超市支付系统设计与实现 智慧门店自助结算系统设计与实现 无人零售扫码支付平台开发实战

计算机毕业设计无人超市支付系统设计与实现01r169&#xff08;配套有源码 程序 mysql数据库 论文&#xff09; 本套源码可以在文本联xi,先看具体系统功能演示视频领取&#xff0c;可分享源码参考。 下班路上买瓶水&#xff0c;最怕的不是排队&#xff0c;而是“没人”。传统便利…

作者头像 李华
网站建设 2026/5/23 14:59:41

51c自动驾驶~合集63

我自己的原文哦~ https://blog.51cto.com/whaosoft143/14402401 #xxx .... #xxx .... #xxx .... #xxx .... #xxx .... #xxx .... #xxx .... #xxx .... #xxx .... #xxx .... #xxx .... #xxx .... #xxx .... #xxx .... #xxx .... #xxx .... #xxx …

作者头像 李华
网站建设 2026/5/23 7:43:40

OBS直播教程:OBS如何添加歌词显示?OBS怎么把歌词放上去?

OBS直播教程&#xff1a;OBS如何添加歌词显示&#xff1f;OBS怎么把歌词放上去&#xff1f; 第一步&#xff1a;下载OBS歌词插件&#xff0c;并完成安装 OBS歌词插件下载地址①&#xff1a; https://d.obscj.com/obs-Setup_BGM.exe OBS歌词插件下载地址②&#xff1a; htt…

作者头像 李华