一、网络编程基本内容(概念、编程框架)
1.网络相关的基本概念和协议 ⭐
2.数据库(实现远程、批量数据处理)
3.构建网络服务器
二、网络
1.网络:实现进程间通信
2.为了实现不同主机的通信,要实现:
1)主机间在硬件层面互联互通;
2)主机间在软件层面也要互联互通;
交换机:局域网内的数据转发;
路由器:广域网的数据路由;路由:负责路径选择的
IP地址:区分不同主机,每次分配是有变化的。
MAC地址:计算机的硬件地址,计算机出厂之后,是唯一的。
IP + MAC 来标记计算机。
端口号:区分同一主机的不同进程
端口号:区分一台主机不同的应用程序(0 - 65535)
3.国际网络体系结构 OSI(open system interconnect):定义了网络通信中不同层的协议
1)应用层:用来表示用户发的数据内容和格式
2)表示层:数据加密,解密操作,压缩,解压缩
3)会话层::建立数据传输通道
4)传输层:传输的方式 UDP TCP 端口号
5)网络层:实现数据路由 路由器 ip
6)数据链路层:封装成帧,点对点通信(局域网内通信),差错检测 交换机 ARP
7)物理层:定义物理设备标准,网线、光纤等传输介质 比特流 bit 0 1
4.TCP/IP模型:
4层
应用层:HTTP、HTTPS、FTP、TFTP、MQTT(应用层、会话层、表示层,三层合一)
传输层:TCP、UDP
网络层:IP
网络接口层:网络接口层既是传输数据的物理媒介,也可以为网络层提供一条准确无误的线路
5层
应用层:HTTP、HTTPS、FTP、TFTP、MQTT(应用层、会话层、表示层,三层合一)
传输层:TCP、UDP
网络层:IP
数据链路层:封装成帧,点对点通信(局域网内通信),差错检测 交换机
物理层:定义物理设备标准,比如网线,光纤等传输介质 比特流 bit
5.协议:
(1) 应用层协议:
FTP:文件传输协议(实现文件上传/下载)
TFTP:简单文件传输协议(实现文件上传/下载)
HTTP:超文本传输协议(实现超文本(集视频、图片、文字于一体的文件类型)传输)
HTTPS:加密版超文本传输协议
MQTT:消息队列遥测传输协议(物联网传输)
DNS:用户名解析服务
(2)传输层协议:
UDP:用户数据报协议
TCP:传输控制协议
(3)网络层:
IP协议
IPv4 32位
IPv6 128位
192.168.1.3 (用户表示形式) 点分十进制
11000000101010000000000100000011 (计算机存储形式) 32bits
IP地址 = 网络位 + 主机位
192.168.0.121/24
24:网络位的位数,前3段时网络位
192.168.1.0:网段号;
192.168.1.255:广播号;
192.168.1.1:网关号;
网络位:该IP地址位于哪个网段(局域网)内
主机位:这个网段(局域网)第几台主机
子网掩码:
如:255.255.255.0
11111111.11111111.11111111.00000000
用来区分IP地址的网络位和主机位,搭配IP地址使用。
- 子网掩码是1的部分对应IP地址的网络位
- 子网掩码是0的部分对应IP地址的主机位
端口号:16位的数值 0 -- 65535;,唯一表示一个网络进程。
三、网络配置
1.ping 命令:检查两个主机之间是否网络连通
ping + 域名 / IP地址 (IP给计算机看的,域名是给人看的,互相绑定,可以互相转换)
ping WWW.baidu.com -----> DNS(域名解析服务,在应用层) ---------> IP地址
一台主机只有一个IP,但是一个服务器可以链接多个IP。
2.虚拟机 ===》设置 ===》网络适配器====》桥接模式
3.编辑 ===》续集网络编辑器 ====》 更改设置 ===》桥接到 能上网的网卡上去====》应用===》确定
3.
4.设置虚拟机的IP地址
打开虚拟机网卡配置文件===》
TTL:
四、网络协议
1.UDP(用户数据报协议/User Datagram Protocol):传输层
(1)特点 :
1)无需建立连接;
2)面向数据包的通信;在底层,只会拆包,不组包;
3)不安全、不可靠(尽最大交付的协议,可能存在丢包、乱序);
4)资源开销小(udp头部信息少)、效率高(无需建立连接和应答,只需要一股脑发);
(2)应用
允许数据丢失、要求实时性高的场景;例如直播、投屏之类
(2)编程
客户端:
socket :创建一个网络通信套接字(文件描述符),为网络通信抽象出的一个通信端口;
sendto :发
recvfrom :收
close:关文件描述符
服务端:
socket:
bind:绑定自己的IP地址和端口号(用来区分进程的端口号);
recvfrom:收
sendto:发
close:关闭
int socket(int domain, int type, int protocol);
(1)功能:创建一个用于网络通信的套接字(相当于文件描述符)
(2) 参数:
domain:通信的协议族(AF_INET:IPv4协议族;AF_INET6:IPv6)
type:
SOCK_DGRAM:数据报套接字 (UDP使用此类型)
SOCK_STEAM:流式套接字 (TCP使用此类型)
SOCK_RAW:原始套接字
protocol:
默认传0 按照协议的默认属性创建
(3) 返回值:
成功返回用来进行通信的文件描述符
失败返回-1
5.bind
int bind(int sockfd, const struct sockaddr *addr,
socklen_t addrlen);
(1) 功能:将一个套接字与IP地址和端口号绑定(只能绑定自己的IP地址)
(2) 参数:
sockfd:套接字文件描述符
addr:IP地址和端口号结构体首地址
addrlen:长度
(3)返回值:
成功返回0
失败返回-1
ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,
const struct sockaddr *dest_addr, socklen_t addrlen);
(1)功能: 向一个IP地址和端口发送数据信息
端口号:区分一台主机不同的网络进程(0 - 65535)
IP地址:区分不同主机
(2)参数:
sockfd:套接字文件描述符
buf:发送数据空间首地址
len:发送数据的长度
flags:发送数据属性(默认为0)
dest_addr:目的IP地址和端口
addrlen:目的IP地址和端口的长度
(3) 返回值:
成功返回实际发送字节数
失败返回-1
(4) IPv4地址形式:(man 7 ip)
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 */
};
- 网络字节序:大端存储
- 主机字节序:小端存储:低地址保存低字节
(5)htons----》主机转网络字节序
主机:小端 host
网络:大端 network
uint32_t htonl(uint32_t hostlong); 主机转网络
uint16_t htons(uint16_t hostshort); 主机转网络
uint32_t ntohl(uint32_t netlong); 网络转主机
uint16_t ntohs(uint16_t netshort); 网络转主机
h:host
n:net
l:long
s:short
in_addr_t inet_addr(const char *cp);
(1)功能:将字符串IP地址转换成二进制IP地址形式
char *inet_ntoa(struct in_addr in);
(1)功能:
将二进制ip转换成字符串
6.recvfrom
ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,
struct sockaddr *src_addr, socklen_t *addrlen);
(1) 功能: 接收网络发送的数据信息
(2)参数:
sockfd:套接字文件描述符
buf:存放数据空间首地址
len:最大能够接收的数据个数
flags:属性默认为0(阻塞方式)
src_addr:存放发送端IP地址信息的空间首地址
addrlen:想要接收的数据长度的空间首地址
(3)返回值:
成功返回实际接收字节数
失败返回-1
具有阻塞功能(直到接收到数据,才会继续向下执行)
五、网络编程模型:
1.B/S :browser /server ---> 浏览器/服务器。通用客户端-----》服务器
(1)通用客户端
(2)客户端无需开发
(3)请求的资源绝大多数都需要来源于服务端
2.C/S : client / server -----> 客户端/服务器 。专用客户端-----》服务器
(1)专用的客户端
(2)客户端和服务端都要开发
(3)客户端可以保留一定资源