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

相关推荐
花鱼白羊15 分钟前
TCP Vegas拥塞控制算法——baseRtt 和 minRtt的区别
服务器·网络协议·tcp/ip
总是学不会.7 小时前
第五篇:前后端如何“扯皮”——HTTP 在开发中的应用
java·网络·网络协议·http·开发
m0_748238278 小时前
WebClient HTTP 请求问题处理模板(泛型响应、忽略 SSL 证书等)
网络协议·http·ssl
୧⍢⃝୨ LonelyCoder9 小时前
FreePBX修改IP地址和端口以及添加SSL证书开启HTTPS访问
tcp/ip·https·ssl
轩辰~10 小时前
网络协议入门
linux·服务器·开发语言·网络·arm开发·c++·网络协议
Ven%11 小时前
如何在防火墙上指定ip访问服务器上任何端口呢
linux·服务器·网络·深度学习·tcp/ip
神的孩子都在歌唱11 小时前
TCP/IP 模型中,网络层对 IP 地址的分配与路由选择
网络·tcp/ip·智能路由器
EasyDSS13 小时前
国标GB28181-2022平台EasyGBS:安防监控中P2P的穿透方法
网络协议·php·音视频·p2p
网安墨雨13 小时前
常用网络协议
网络·网络协议
Tlzns13 小时前
Linux网络——UDP的运用
linux·网络·udp