自学嵌入式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,或使用命令临时设置:

    bash 复制代码
    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。

示例代码:

c 复制代码
#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。

地址结构体示例:

c 复制代码
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编程中,注意数据边界和丢包风险。例如,发送太快时使用流量控制机制。

相关推荐
JaguarJack16 小时前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
后端·php·服务端
BingoGo16 小时前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
php
JaguarJack2 天前
告别 Laravel 缓慢的 Blade!Livewire Blaze 来了,为你的 Laravel 性能提速
后端·php·laravel
郑州光合科技余经理2 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
DianSan_ERP2 天前
电商API接口全链路监控:构建坚不可摧的线上运维防线
大数据·运维·网络·人工智能·git·servlet
feifeigo1232 天前
matlab画图工具
开发语言·matlab
dustcell.2 天前
haproxy七层代理
java·开发语言·前端
norlan_jame2 天前
C-PHY与D-PHY差异
c语言·开发语言
多恩Stone2 天前
【C++入门扫盲1】C++ 与 Python:类型、编译器/解释器与 CPU 的关系
开发语言·c++·人工智能·python·算法·3d·aigc
呉師傅2 天前
火狐浏览器报错配置文件缺失如何解决#操作技巧#
运维·网络·windows·电脑