1 进程间通信 2 3 本地 4 有亲缘关系的进程 5 管道: 6 特点: 7 必须要凑齐读写双方 8 命名管道(没有亲缘关系的进程也可以进程通信) 9 man 7 fifo 10 mkfifo(3); 11 匿名管道 12 man 7 pipe 13 pipe(2); 14 15 可以用于没有亲缘关系的进程 16 sysV IPC(XSI) 17 18 ipcs 19 20 第一步 21 获取同一个key值 ftok(); 22 第二步 23 通过同一个key值得到同一个实例 xxxget(); 24 第三步 25 进行通信xxxop(); 26 第四步 27 销毁实例 xxxctl(); 28 29 消息队列 30 共享内存 31 信号量数组 32 33 mmap(2); 34 35 网络 36 ip地址 37 点分十进制----》整型 38 inet_pton(); 39 40 端口 41 标识唯一进程 42 周知端口:0~1024 43 用户定义:1024~ 44 45 七层网络模型 46 物理层 数据链路层 网络层 传输层 会话层 表示层 应用层 47 48 四层网络模型(tcp/ip) 49 链路层 网络层 传输层 应用层 50 51 跨主机传输面临的问题: 52 1.数据类型字节个数差别 53 <stdint.h> 54 int32_t 55 int64_t 56 2.字节序 57 大端存储 58 小端存储 59 本地字节序---》网络字节数 60 htons(); 61 htonl(); 62 网络----》本地 63 ntohs(); 64 ntohl(); 65 3.结构体对齐 66 struct { 67 68 }__attribute__((packed)); 69 70 ipv4地址的划分 71 ip地址=网络号+主机号 72 A 1byte+3byte 73 0开头 74 0.0.0.0 ~ 127.255.255.255 75 0.0.0.0---->任意地址 76 127.0.0.1--->回环测试地址 77 子网掩码 78 255.0.0.0 79 B 2byte+2byte 80 10开头 81 128~192 82 子网掩码 83 255.255.0.0 84 C 3byte+1byte 85 110开头 86 192~223 87 子网掩码 88 255.255.255.0 89 D 组播地址 90 1110 91 224~239 92 E 保留 93 94 95 man 7 socket 96 man 7 ip 97 man 7 tcp 98 man 7 udp 99 man 7 unix 100 101 主动端 102 先发包的一端 103 104 被动端 105 先收包的一端 106 107 1.socket 108 抽象层 109 110 2.报式套接字 111 端对端 无连接,不可靠 112 主动端 被动端 113 socket() socket() 114 //bind()可省 bind() 115 sendto();/recvfrom() recvfrom()/sendto(); 116 close(); close(); 117 118 广播: 119 setsockopt();-->使能广播选项 120 组播/多播: 121 122 3.流式套接字 123 点对点 创建连接,可靠 124 被动端 主动端 125 socket(); socket(); 126 bind(); 127 listen(); connect(); 128 accept(); 129 recv();/read(); send();/write(); 130 close(); close(); 131
SOCK_STREAM:流式套接字,特点是有序、可靠。有序、双工、基于链接的、以字节流为单位的。
可靠不是指不丢包,而是流式套接字保证只要你能接收到这个包,那么包中的数据的完整性一定是正确的。
双工是指双方都能收发。
基于链接的是指:比如大街上张三、李四进行对话,一定不会说每句话之前都叫着对方的名字。也就是说通信双方是知道对方是谁的。
字节流是指数据没有明显的界限,一端数据可以分为任意多个包发送。
SOCK_DGRAM:报式套接字,无链接的,固定的最大长度,不可靠的消息。
就像写信,无法保证你发出的信对方一定能收到,而且无法保证内容不会被篡改。如果今天发了一封信,明天又发了一封信,不能保证哪封信先到。大家都能收到这个包,但是发现不是自己的之后就会丢弃,发现是自己的包再处理,有严格的数据分界线。 132 三次握手 133 四次挥手 134 135 4.本地套接字 136 AF_UNIX 137 138 man 7 unix