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

相关推荐
言之。19 小时前
TCP 拥塞控制设计空间课程要点总结
网络·网络协议·tcp/ip
eqwaak019 小时前
Matplotlib 动画显示进阶:交互式控制、3D 动画与未来趋势
python·tcp/ip·3d·语言模型·matplotlib
跨境小新21 小时前
ChatGPT大模型训练指南:如何借助动态代理IP提高训练效率
网络协议·tcp/ip·chatgpt
不会c嘎嘎21 小时前
Linux -- 基于TCP服务器实现一个简单的电商网站
linux·服务器·tcp/ip
树码小子1 天前
Java网络编程:(socket API编程:UDP协议的 socket API -- 回显程序的服务器端程序的编写)
java·网络·udp
威斯软科的老司机1 天前
WebSocket压缩传输优化:机器视觉高清流在DCS中的低延迟方案
网络·websocket·网络协议
啟明起鸣1 天前
【网络编程】从与 TCP 服务器的对比中探讨出 UDP 协议服务器的并发方案(C 语言)
服务器·c语言·开发语言·网络·tcp/ip·udp
emojiwoo1 天前
HTTP 状态码背后的逻辑:从请求到响应的完整流程解析(含完整流程图)
网络·网络协议·http
KKKlucifer1 天前
国家网络安全通报中心:重点防范境外恶意网址和恶意 IP
tcp/ip·安全·web安全
GilgameshJSS1 天前
【学习K230-例程19】GT6700-TCP-Client
网络·python·网络协议·学习·tcp/ip