IPC-共享内存-进程间通信方式 网络编程基本知识

 

共享内存是一种高效的 IPC 机制,允许不同进程共享同一块内存区域。以下是共享内存相关知识点及函数的详细介绍和示例:

1. shmget()

  • 功能: 创建一个新的共享内存段或获取一个现有的共享内存段的标识符。

  • 语法: int shmget(key_t key, size_t size, int shmflg);

  • 参数:

    • key: 共享内存段的键值,通常使用 ftok() 函数生成。
    • size: 共享内存段的大小(以字节为单位)。
    • shmflg: 标志位,包含权限和创建标志。常见的标志包括 IPC_CREAT(创建新段)和 0666(读写权限)。
  • 返回值: 成功时返回共享内存标识符,失败时返回 -1。

    key_t key = ftok("shmfile",65);
    int shmid = shmget(key, 1024, 0666|IPC_CREAT);
    if (shmid == -1) {
        perror("shmget");
        exit(EXIT_FAILURE);
    }
    

    2.shmat()

  • 功能: 将共享内存段附加到调用进程的地址空间。

  • 语法: void* shmat(int shmid, const void* shmaddr, int shmflg);

  • 参数:

    • shmid: 共享内存标识符。
    • shmaddr: 内存地址。通常设置为 NULL,让系统自动选择地址。
    • shmflg: 附加标志。常见的标志包括 SHM_RDONLY(只读模式)。
  • 返回值: 成功时返回共享内存段的地址,失败时返回 (void *) -1

char *str = (char*) shmat(shmid, NULL, 0);
if (str == (char*) -1) {
    perror("shmat");
    exit(EXIT_FAILURE);
}

 

3. shmdt()

  • 功能: 将共享内存段从调用进程的地址空间分离。

  • 语法: int shmdt(const void* shmaddr);

  • 参数:

    • shmaddr: 共享内存段的地址,通常是由 shmat() 返回的地址。
  • 返回值: 成功时返回 0,失败时返回 -1。

if (shmdt(str) == -1) {
    perror("shmdt");
    exit(EXIT_FAILURE);
}

 

4. shmctl()

  • 功能: 控制共享内存段的操作,如删除、获取状态等。

  • 语法: int shmctl(int shmid, int cmd, struct shmid_ds *buf);

  • 参数:

    • shmid: 共享内存标识符。
    • cmd: 控制命令。常见的命令包括 IPC_RMID(删除共享内存段)和 IPC_STAT(获取状态)。
    • buf: 指向 shmid_ds 结构体的指针,用于获取共享内存段的状态或设定状态。
  • 返回值: 成功时返回 0,失败时返回 -1。

if (shmctl(shmid, IPC_RMID, NULL) == -1) {
    perror("shmctl");
    exit(EXIT_FAILURE);
}

 网络模型,tcp/ip

 

1. OSI 模型(开放系统互联模型)

层次结构:

  1. 物理层(Physical Layer): 负责数据在物理媒介上的传输,如电缆、电磁波等。定义了硬件设备和信号传输标准。
  2. 数据链路层(Data Link Layer): 提供数据帧的传输,负责错误检测和纠正,确保在物理层上的数据传输的可靠性。包含 MAC(介质访问控制)地址。
  3. 网络层(Network Layer): 负责数据包的路由和转发。主要协议有 IP(互联网协议),负责逻辑地址和网络路径选择。
  4. 传输层(Transport Layer): 提供端到端的通信服务,主要协议有 TCP(传输控制协议)和 UDP(用户数据报协议),负责数据流控制和错误恢复。
  5. 会话层(Session Layer): 负责建立、管理和终止会话。处理会话恢复和同步。
  6. 表示层(Presentation Layer): 处理数据格式转换、加密和解密,确保数据能够被应用层理解。
  7. 应用层(Application Layer): 直接与用户交互,提供各种网络服务和应用,如 HTTP、FTP、SMTP 等。

2. TCP/IP 模型

层次结构:

  1. 网络接口层(Network Interface Layer): 对应 OSI 模型的物理层和数据链路层,处理数据在网络介质上的传输。
  2. 网络层(Internet Layer): 对应 OSI 的网络层,主要使用 IP 协议负责数据包的路由和传输。包括 IP 地址和路由选择。
  3. 传输层(Transport Layer): 对应 OSI 的传输层,主要使用 TCP 和 UDP 协议,负责数据传输的可靠性和顺序。
  4. 应用层(Application Layer): 对应 OSI 的应用层、表示层和会话层,处理网络应用的各种服务,如 HTTP、FTP、DNS、SMTP 等。

3. 客户端-服务器模型

概念:

  • 客户端: 向服务器请求服务或资源的实体。通常是用户的计算机或设备。
  • 服务器: 提供服务或资源的实体。通常是网络上运行的程序或服务。

工作流程:

  1. 客户端发送请求到服务器。
  2. 服务器处理请求,并返回相应的数据或服务。
  3. 客户端接收响应并进行处理或显示。

应用: 常见的应用包括 Web 浏览器(客户端)和 Web 服务器,邮件客户端和邮件服务器等。

4. 点对点模型(P2P)

概念:

  • 点对点(P2P): 所有节点既可以是客户端也可以是服务器。每个节点可以同时提供和请求资源。

特点:

  • 去中心化: 不需要中央服务器,每个节点直接连接到其他节点。
  • 弹性: 系统更具弹性,节点的加入和离开不会影响整体系统的运行。
  • 应用: 文件共享(如 BitTorrent)、区块链技术等。

5. 分布式系统

概念:

  • 分布式系统: 多个计算机系统通过网络协作完成任务,提供统一的服务或资源。

特点:

  • 透明性: 用户通常不会感知到系统是由多个计算机组成的。
  • 容错性: 系统能够处理节点的故障。
  • 可扩展性: 可以通过添加更多节点来提升系统的性能或容量。

应用: 分布式数据库(如 Cassandra)、分布式文件系统(如 Hadoop HDFS)、云计算平台等。

TCP(传输控制协议):

 

连接导向:在数据传输前,TCP建立一个连接(通过三次握手)。

可靠性:保证数据按顺序到达,重传丢失的数据包。

流量控制:通过窗口机制控制数据流量,避免拥堵。

拥塞控制:检测网络拥塞,并动态调整数据传输速率。

适用场景:需要可靠性和顺序保证的应用,如网页浏览、文件传输(HTTP、FTP)。

UDP(用户数据报协议):

 

无连接:不建立连接,数据直接发送。

不可靠:不保证数据的顺序、完整性和可靠性,数据包可能丢失或重复。

低开销:开销小,适合高效的数据传输。

适用场景:实时性要求高但对可靠性要求低的应用,如视频流、在线游戏(VoIP、DNS)。

  • TCP(传输控制协议)

    • 连接导向:在数据传输前,TCP建立一个连接(通过三次握手)。
    • 可靠性:保证数据按顺序到达,重传丢失的数据包。
    • 流量控制:通过窗口机制控制数据流量,避免拥堵。
    • 拥塞控制:检测网络拥塞,并动态调整数据传输速率。
    • 适用场景:需要可靠性和顺序保证的应用,如网页浏览、文件传输(HTTP、FTP)。
  • UDP(用户数据报协议)

    • 无连接:不建立连接,数据直接发送。
    • 不可靠:不保证数据的顺序、完整性和可靠性,数据包可能丢失或重复。
    • 低开销:开销小,适合高效的数据传输。
    • 适用场景:实时性要求高但对可靠性要求低的应用,如视频流、在线游戏(VoIP、DNS)。

 

 

  • 物理层 (Layer 1)

    • 协议和标准:Ethernet(IEEE 802.3)、DSL、USB、RS-232
    • 功能:定义了数据传输的物理特性,如电缆类型、电压水平、传输速率等。物理层负责将数据以电信号、光信号或无线信号的形式传输到网络介质中。
  • 数据链路层 (Layer 2)

    • 协议:Ethernet、PPP(点对点协议)、HDLC(高级数据链路控制)、VLAN(虚拟局域网)
    • 功能:处理数据帧的传输、错误检测和纠正,确保数据在局域网内的可靠传输。它为网络层提供了物理地址的映射(如MAC地址)。
  • 网络层 (Layer 3)

    • 协议:IP(互联网协议,包括IPv4和IPv6)、ICMP(互联网控制消息协议)、IGMP(互联网组管理协议)
    • 功能:负责数据包的路由选择和转发,将数据从源地址传输到目标地址。网络层提供逻辑地址(如IP地址)来实现网络间的通信。
  • 传输层 (Layer 4)

    • 协议:TCP(传输控制协议)、UDP(用户数据报协议)
    • 功能:提供端到端的通信服务,包括数据流控制、错误检查和重传。TCP提供可靠的连接导向服务,而UDP提供无连接的、尽最大努力的传输服务。
  • 会话层 (Layer 5)

    • 协议:NetBIOS、RPC(远程过程调用)、PPTP(点对点隧道协议)
    • 功能:管理和控制会话的建立、维护和终止,确保应用程序之间的数据交换能够协调和同步。
  • 表示层 (Layer 6)

    • 协议:SSL/TLS(安全套接字层/传输层安全性)、JPEG、MPEG、ASCII
    • 功能:处理数据的表示、编码和转换,以确保不同系统之间的兼容性。它包括数据加密、解密和数据格式转换。
  • 应用层 (Layer 7)

    • 协议:HTTP(超文本传输协议)、FTP(文件传输协议)、SMTP(简单邮件传输协议)、DNS(域名系统)
    • 功能:提供网络服务和应用程序的接口,处理用户应用程序的数据传输请求。应用层直接与用户交互,处理各种网络服务。

 

 

socket()

  • 功能:创建一个新的套接字。
  • 原型int socket(int domain, int type, int protocol);
  • 参数
    • domain:协议族(通常为AF_INET表示IPv4)。
    • type:套接字类型(SOCK_DGRAM表示UDP)。
    • protocol:协议(通常为0)

sendto()

 

功能:向指定的目标地址发送数据。

原型:ssize_t sendto(int sockfd, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen);

参数:

sockfd:套接字描述符。

buf:要发送的数据缓冲区。

len:数据长度。

flags:通常为0。

dest_addr:指向目标地址的sockaddr结构。

addrlen:目标地址的长度。

  • 功能:关闭套接字,释放资源。
  • 原型int close(int fd);
  • 参数
    • fd:套接字描述符。

你可能感兴趣的:(算法,linux,开发语言,c语言,数据结构)