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

相关推荐
发光小北1 小时前
SG-TCP-Profibus (M)(ModbusTCP 转 Profibus DP 网关)
网络·网络协议·tcp/ip
Arva .1 小时前
TCP 与 UDP 的 10 大核心区别是什么?
网络协议·tcp/ip·udp
重启的码农3 小时前
enet源码解析 (2) 对等节点 (ENetPeer)
c++·网络协议
发光小北4 小时前
SG-TCP-COE-210(Modbus TCP 转 CANOpen 网关)
网络·网络协议·tcp/ip
路由侠内网穿透.4 小时前
外部访问 Python 搭建的 HTTP 服务器
运维·服务器·网络·网络协议·http·远程工作
charlie1145141914 小时前
勇闯前后端Week2:后端基础——HTTP与REST
开发语言·网络·笔记·网络协议·学习·http
陈橘又青5 小时前
CANN在智能安防场景中的落地实践:释放硬件潜能,简化AI开发
人工智能·网络协议·学习·ai·编辑器
Xiaomostream6 小时前
实现TCP服务器:一请求一线程 | epoll
服务器·网络协议·tcp/ip
大、男人17 小时前
目标URL存在http host头攻击漏洞
网络·网络协议·http
运维行者_18 小时前
网站出现 525 错误(SSL 握手失败)修复指南
服务器·网络·数据库·redis·网络协议·bootstrap·ssl