有名信号量
1创建
semget
功能:创建一组信号量
参数:key:IPC对象名字
nsem:信号量的个数
semflg:IPC_CREAT
返回值:
成功返回信号量ID
失败返回-1
2销毁
semctl
功能:向信号灯发送命令
参数:
semid:信号灯ID号
semnum:具体操作信号量的编号
cmd:
IPC_RMID 删除信号灯
SETVAL 设置信号量的值
返回值:
成功返回0
失败返回-1
初始化:
3申请信号量
4释放信号量
semop
功能:对信号量完成操作
参数:
semid:信号灯ID号
sops:信号量操作的数组首地址
nsops:数组元素个数
返回值:
成功返回0
失败返回-1
网络:
数据传输、数据共享
1网络协议模型:
OSI协议模型
应用层、 实际发送的数据
表示层、 发送的数据是否加密
会话层、 是否建立会话链接
传输层、 数据传输方式(数据报、流式)
网络层、 数据的路由(如何从一个局域网到达另一个局域网) IP地址
物理层、 物理介质的链接
数据链路层 局域网下如何通信
-
物理层(Physical Layer):负责传输数据的物理介质,如电缆、光纤等,以及传输数据的电信号的编码和解码。
-
数据链路层(Data Link Layer):负责将物理层传输的数据分成帧,并在物理介质上进行可靠的传输。
-
网络层(Network Layer):负责将数据包从发送方传输到接收方,包括路由选择、寻址和数据包的分组与传输。
-
传输层(Transport Layer):负责提供端到端的可靠数据传输和错误恢复,包括数据分段、流量控制和拥塞控制。
-
会话层(Session Layer):负责建立、管理和终止应用程序之间的会话,包括会话的开始、数据交换和会话的结束。
-
表示层(Presentation Layer):负责数据的格式转换、加密和压缩,以便于不同系统之间的互操作性。
-
应用层(Application Layer):负责为用户提供各种网络应用服务,例如电子邮件、文件传输、远程登录等。
YCP/IP协议模型
应用层、 传输的数据
传输层、 传输的方式
网络层、 数据如何从一台主机到达另一台主机
网络接口层 物理介质的链接
-
网络接口层:提供物理网络的访问和数据传输,包括硬件设备和驱动程序。它定义了通过网络传输数据的规则和格式。
-
互联网层:负责在不同的网络上传输数据包,通过IP协议进行寻址和路由选择,确保数据能够正确地从源主机发送到目标主机。
-
传输层:提供端到端的可靠数据传输和错误恢复机制,主要使用TCP协议。它将数据分割为小的数据包,并通过序号、确认和超时机制确保数据的有序和完整传输。
-
应用层:提供各种应用程序和用户之间的数据交互,包括电子邮件、文件传输、远程登录等。常见的应用层协议有HTTP、FTP、SMTP等。
应用层:
HTTP 超文本传输协议
HTTPS
FTP 文本传输协议
TFTP 简单文本协议
SMTP 邮件传输协议
MQTT
TELNET ......
传输层:
UDP
用户数据报协议
特点:实现机制简单
资源开销小
不安全不可靠
TCP 传输控制协议
特点:实现机制复杂
资源开销大
安全可靠
网络层:
IPv4
IP地址:唯一标识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);
功能:
将本地字节序转换为网络的大端字节序