进程间通信之信号灯 || 网络协议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

相关推荐
XUEYUAN52121 天前
ASN 自治系统号风控:平台如何通过 IP 所属自治域批量识别代理流量
python·网络协议·http·网络安全·socks5
CHENKONG_CK1 天前
破解制鞋打磨痛点:RFID赋能去毛刺工序自动化升级
网络·单片机·嵌入式硬件·网络协议·tcp/ip
z落落1 天前
C#UDP+串口服务端+UDP 客户端(含 CRC16 校验)
网络·网络协议·udp
曼巴UE51 天前
UE5 客户端 需要的网络同步概念总结(3 )-事件同步 RPC 以及三种调用方式
网络·c++·网络协议·学习·rpc·ue5
开开心心就好1 天前
安卓手写文字生成工具,多种纸张一直免费
网络·网络协议·tcp/ip·leetcode·智能手机·电脑·模拟退火算法
渡我白衣1 天前
HttpRequest与HttpResponse的实现
服务器·数据结构·c++·人工智能·tcp/ip·机器学习·caffe
小贺儿开发2 天前
Unity 家居视频遥控(细节优化)
科技·unity·程序员·udp·视频·工具·通信
IpdataCloud2 天前
如何判断游戏注册IP是住宅宽带还是机房代理?IP风险识别看ASN、IDC标签与风险分
tcp/ip·ip
K成长日志2 天前
DALI协议-Part209-颜色控制
物联网·网络协议·iot·智能照明·智能建筑·dali
IPdodo_3 天前
跨境 API 调用不稳定怎么办:出口、超时重试与链路监控的实践
网络·python·网络协议