进程间通信(分类):网络通信、无名管道、有名管道、信号、消息队列、共享内存、信号量集
OSI七层模型:(理论模型)
应用层 : 要传输的数据信息,如文件传输,电子邮件等
表示层 : 数据加密,解密操作,压缩,解压缩
会话层 : 建立数据传输通道
传输层 : 传输的方式 UDP TCP 端口号
网络层 : 实现数据路由 路由器 ip
数据链路层 : 封装成帧,点对点通信(局域网内通信),差错检测 交换机 ARP
物理层 : 定义物理设备标准,比如网线,光纤等传输介质 比特流 bit 0 1
TCP/IP四层模型:(工业生产)
应用程:HTTP, HTTPS(超文本传输协议) (基于TCP)
FTP : 文件传输协议(基于TCP)
TFTP:简单文件传输协议(基于UDP)
MQTT: 消息遥测传输协议(物联网)
DNS :域名解析服务
传输层:UDP : 用户数据报协议 面向数据包
TCP:传输控制协议 面向数据流
网络层:IPv4、IPv6
网络接口层:ARP:地址解析协议
标记主机:
MAC:硬件地址 : 局域网通信
IP:软件地址
端口号:同一主机,区分不同的网络进程
2字节的无符号整形数据
0-65535
ARP:地址解析协议
网络层:IP协议:IPv4:32bits
IPv6:128bits
点分十进制:192.168.1.148
网络配置:
1.虚拟机——>设置——>网络适配器——>桥接方式
2.编辑——>虚拟网络编辑器——>更改设置——>VMnet0——>桥接模式——>桥接到电脑正在上网的网卡——>应用——>确定
3.修改配置文件: sudo vim /etc/network/interfaces
4.重启网络配置: sudo /etc/init.d/networking restart
5.测试 ifconfig (查看虚拟机的IP地址) ping www.baidu.com
网络通信模型:B/S : Browser——>Server
1. 通用的客户端
C/S : Client-----》Server
1. 专用的客户端
2. 客户端也可保存资源
int socket(int domain, int type, int protocol);
功能:创建一个通讯的套接字
参数:
domain: 网络协议族
AF_INET: IPv4
AF_INET6: IPv6
type: 表示传输层协议类型
SOCK_STREAM: tcp
SOCK_DGRAM: udp
protocol:
0 : 默认普通正常模式
成功:文件描述符
失败:-1
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:接收方的地址大小
返回值:
成功:实际发送的字节数
失败:-1
int bind(int sockfd, const struct sockaddr *addr,socklen_t addrlen);
功能:绑定套接字和自己的地址信息
参数:
sockfd:套接字
addr : 自己的地址信息
addrlen:地址的大小
返回值:
成功:0
失败:-1
ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,struct sockaddr *src_addr, socklen_t *addrlen);
功能:接收udp发送的数据
参数:
sockfd:接收数据的套接字
buff:保存接收数据的首地址
len:期待收到的字节数
flags:0:默认方式接收
src_addr: 保存发送发地址信息的空间首地址
addrlen:发送方地址信息大小的首地址
返回值:
成功:返回实际收到的字节数
失败:-1
网络字节序:大端
主机字节序:小端
htons: 将主机字节序(小端)的short类型转换成网络字节序(大端)
htonl: 将主机字节序(小端)的long类型转换成网络字节序(大端)
ntohs:将网络字节序转换成主机字节序
inet_ntoa():将二进程整形ip转换成字符串ip
inet_addr() : 将字符串ip转换成网络字节序的二进制ip