网络优化小结
网络基础知识
OSI七层网络架构
OSI简称Open System Intercnnect,开放式系统互联,是一个国际互联网标准制定的一个组织
-
应用层
-
实际应用场景,比如 浏览器、文件传输、电子邮件、文件服务、虚拟终端等;
-
http、FTP、ssh等
-
-
表示层
- 用于数据的格式化,让不同应用之间能够统一兼容,比如,ASCII、UTF-8等
-
会话层
- 用于建立、断开会话连接等;比如服务端和客户端之间是1对多关系,服务端就需要跟客户端建立多个会话连接;例如Socket
-
传输层
- 用于解决两个终端之间数据如何传输问题;TCP、UDP
-
网络层
- 用于解决在网络中定位终端问题,路由器的功能;比如IP
-
数据链路层
- 用于包装Mac地址等信息形成帧数据,根据MAC地址查找目标设备,检查数据错误问题等,数据单位是帧;交换机的作用
-
物理层
- 用于将两台设备通过网线连接起来,将比特流二进制数据中1、0转换为光电信号;比如网线
【TCP/IP】四层网络架构
-
应用层、传输层、网络层、网络接口层
-
TCP/IP协议是美国国防部发明的,相比七层架构:
-
TCP/IP中的应用层相当于七层架构中的应用层、表示层、会话层
-
TCP/IP中的网络接口层相当于七层架构中的数据链路层和物理层
-
TCP/IP是一系列协议簇,而OSI七层网络架构是一种网络模型
-
IP地址和MAC地址、端口区别
-
IP地址主要作用于网络层,主要用于在外网中,通过网关定位目标设备;
-
而MAC地址主要用于数据链路层,用于内网中定位具体的设备
-
端口是用于在同一台设备中,区分不同应用
TCP/UDP区别
-
TCP是一种可靠的传输方式,它连接时需要经历三次握手,断开连接时需要经历四次挥手,确保传输过程中信息准确传输到目的地;缺点是传输速率慢
-
UDP是不可靠的传输方式,发送完数据不管对方有没有接收到,效率高,速度快
TCP三次握手、四次挥手
-
三次握手:
-
客户端向服务端发起TCP连接请求,发送ACK报文
-
服务端收到请求后,准备好连接资源,回复SYN报文
-
客户端收到信息后,再次发送ACK报文给服务端,表示收到消息并准备好连接
-
服务端第二次收到客户端ACK报文后就开始正式与客户端建立TCP连接
-
之所以要三次握手而不是两次,是为了避免服务端这边准备好连接资源后,客户端又出现意外停止连接,造成服务端资源浪费
-
-
-
四次挥手:
-
客户端发送SYN报文给服务端请求断开TCP连接
-
服务端回复ACK报文告诉客户端进入等待状态
-
服务端在一段时间后再次发送SYN报文通知客户端可以断开连接了
-
客户端接收到通知后,再次发送ACK报文给服务端,表示准备好断开连接了
-
服务端接收到报文后就断开TCP连接回收资源
-
客户端在发送完最后一次报文后并不会立刻断开连接并回收资源,这是为了防止服务端在一段时间内没有接收到客户端发送过去的报文,会再次重复发送,这时候客户端就需要再次回复ACK报文通知服务端关闭连接
-
之所以需要四次而不是三次,是因为客户端通知服务端关闭TCP连接时,可能当时还有传输任务没有结束,所以服务端会要求客户端等待一段时间,等数据传输任务都完成后再通知客户端断开连接
-
-
Socket和WebSocket
-
WebSocket和HTML一样是应用层协议,它最早出现在HTML5中,主要用于解决HTML只能单向通信问题,后面各种主流语言都有WebSocket相应实现
-
而Socket不是协议,它是一组接口,用于方便应用层使用TCP/UDP建立连接,它介于应用层和传输层之间
-
Llinux中的Socket则是在服务端和客户端各自维护一个文件,当建立连接后,可以写入自己文件后供对方读取或者读取对方文件中的内容,断开连接后则关闭文件
优化方向:
-
减少网络传输的数据大小
-
使用gzip压缩数据=》“Content-Encoding”:“gzip”
-
使用protobuffer序列化/反序列化数据;
- 采用二进制格式,相比json序列化和反序列化速度更快;但是数据可读性差,使用相对复杂
-
-
减少网络请求次数
-
将需要上传或者下载的多份数据合并成一次网络请求
-
使用socket发起http请求,复用http/tcp连接,避免多次频繁创建和销毁连接
- okhttp就是使用了socket复用,socket建立连接后会缓存起来供下次使用,提高网络请求效率
-
-
其他方面优化
- 发起网络请求时直接用IP地址代替网址,因为网址转IP地址需要经过DNS解析