进程间通信之信号灯 || 网络协议UDP/TCP || 三次握手四次挥手

在线程通信中由于数据段等内存空间的共用性,导致同时访问时资源竞争的问题,在线程中我们使用信号量的申请和释放,在防止资源竞争的产生。在进程间的通信中,有信号灯的概念。搭配共享内存实现进程同步。

有名信号量:

1.创建

semget

int semget(key_t key, int nsems, int semflg);

功能:

创建一组信号量

参数:

key:IPC对象名

nsems:信号量的个数

semflg:IPC_CREAT

返回值:

成功返回信号量ID

失败返回-1

2.销毁

semctl

int semctl(int semid, int semnum, int cmd, ...);

功能:

向信号灯发送命令

参数:

semid:信号灯ID号

semnum:具体操作信号量的编号

cmd:

IPC_RMID 删除信号灯

SETVAL 设置信号量的值

返回值:

成功返回0

失败返回-1

初始化:

union semun {

int val; /* Value for SETVAL */

struct semid_ds *buf; /* Buffer for IPC_STAT, IPC_SET */

unsigned short *array; /* Array for GETALL, SETALL */

struct seminfo *__buf; /* Buffer for IPC_INFO

(Linux-specific) */

};

3.申请信号量

4.释放信号量

semop

int semop(int semid, struct sembuf *sops, size_t nsops);

功能:

对信号量完成操作

参数:

semid:信号灯的ID号

sops:信号量操作的数组首地址

nsops:数组元素个数

返回值:

成功返回0

失败返回-1

unsigned short sem_num; /* semaphore number */ 操作信号量的下标

short sem_op; /* semaphore operation */ 具体对信号量的操作(申请:-1 释放:+1)

short sem_flg; /* operation flags */ SEM_UNDO


网络编程:

网络:

数据传输,数据共享
1.网络协议模型:

OSI协议模型

应用层 实际发送的数据

表示层 发送的数据是否加密

会话层 是否建立会话连接

传输层 数据传输的方式(数据报、流式)

网络层 数据的路由(如何从一个局域网到达另一个局域网) IP地址

数据链路层 局域网下如何通信

物理层 物理介质的连接
TCP/IP协议模型

应用层 传输的数据

传输层 传输的方式

网络层 数据如何从一台主机到达另一台主机

网络接口层 物理介质的连接

应用层:

HTTP 超文本传输协议

HTTPS

FTP 文件传输协议

TFTP 简单文本传输协议

SMTP 邮件传输协议

MQTT

TELNET

..

传输层:

UDP 用户数据报协议

特点:

1.实现机制简单

2.资源开销小

3.不安全不可靠
TCP 传输控制协议

特点:

1.实现机制复杂

2.资源开销大

3.安全可靠
TCP可靠依赖于:三次握手四次挥手

三次握手:SYN-> <-ACK+SYN

ACK->

当客户端想和服务器建立传输的时候,会首先发送信息进行确认,服务器获得信息后,返回接受到信息,为了让服务器也了解到对方就收到,客户端也会发送一条信息最后返回给服务器。

四次挥手:断开连接:首先发送断开请求,SYN-> 客端收到信息后,返回ACK并等待数据传输完成。

完成之后发送< - SYN

主机返回 ACK-> 四次挥手结束。

关于子网掩码和网络位,主机位

网络层:

IPv4

IP地址:唯一标识网络中一台主机的标号

IP地址:网络位 + 主机位

子网掩码:用来标识IP地址的网络位和主机位

子网掩码是1的部分表示IP地址的网络位

子网掩码是0的部分表示IP地址的主机位

网段号:网络位不变,主机位全为0,表示网段号

广播地址:网络位不变,主机位全为1,表示广播地址

IP地址类型:

A类

1.0.0.0 - 126.255.255.255

子网掩码:255.0.0.0

管理超大规模网络

10.0.0.0 - 10.255.255.255

B类

128.0.0.0 - 191.255.255.255

子网掩码:255.255.0.0

管理大中规模型网络

172.16.0.0 - 172.31.255.255

C类

192.0.0.0 - 223.255.255.255

子网掩码:255.255.255.0

管理中小规模型网络

192.168.0.0 - 192.168.255.255

D类

224.0.0.0 - 239.0.0.0

用于组播

E类

240.0.0.0 - 255.255.255.255

用于实验
2.UDP编程

socket套接字编程:

1.发端:

socket

int socket(int domain, int type, int protocol);

功能:

创建一个用来通信的文件描述符

参数:

domain:使用的协议族 AF_INET (IPv4协议族)

type:套接字类型

SOCK_STREAM:流式套接字

SOCK_DGRAM:数据报套接字

SOCK_RAW:原始套接字

protocol:协议

默认为0

返回值:

成功返回文件描述符

失败返回-1

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:目的地址信息存放的空间首地址

addrlen:目的地址的长度

struct sockaddr_in {

sa_family_t sin_family; /* address family: AF_INET */

in_port_t sin_port; /* port in network byte order */

struct in_addr sin_addr; /* internet address */

};

/* Internet address. */

struct in_addr {

uint32_t s_addr; /* address in network byte order */

};

返回值:

成功返回实际发送字节数

失败返回-1

inet_addr:

in_addr_t inet_addr(const char *cp);

功能:

将字符串IP地址转换为内存中的IP地址

htons

uint16_t htons(uint16_t hostshort);

功能:

将本地字节序转换为网络的大端字节序

close

相关推荐
arron88991 小时前
RK3588 Ubuntu 22.04 静态 IP 真实配置文件位置 + 最稳修改方法
tcp/ip·ubuntu·php
网工养成记_121381 小时前
网络故障排查日常记录
网络·网络协议
Days20502 小时前
关于SSL证书签发时长调整通知
网络协议·https·ssl
北京耐用通信3 小时前
架桥记:耐达讯自动化CC-Link IE转EtherCAT的工业协议融合实战
人工智能·科技·物联网·网络协议·自动化
zmj3203245 小时前
MQTT(消息队列遥测传输)
网络·网络协议
Par@ish6 小时前
【局域网协议】通过ISE实现radius认证,AD 的TCP 3268端口在其中发挥什么作用
服务器·网络·tcp/ip
M158227690557 小时前
SG-ECAT-HUB_4 4 口 EtherCAT 分支器|一进三出・多拓扑・DC 同步工业扩展神器
网络·tcp/ip
taxunjishu8 小时前
Profinet转Modbus TCP正极材料匀浆智能网关实施方案
网络·网络协议
watersink9 小时前
第10章 信息安全技术基础知识
网络协议·https·ssl
CHENKONG_CK9 小时前
晨控CK-UR08与汇川AC系列PLC配置EtherNet/IP通讯连接手册
网络·网络协议·自动化·ethernet/ip·汇川·rfid